diff --git a/CMakeLists.txt b/CMakeLists.txt index fbcb3358..fe5f71df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,7 +210,7 @@ macro(_add_exec _name) add_executable(${_name} EXCLUDE_FROM_ALL ${ARGN}) - target_link_libraries(${_name} libui ${_LIBUI_STATIC_RES}) + target_link_libraries(${_name} libui) _target_link_options_private(${_name} _COMMON_LDFLAGS) # make shared-linked executables PIC too diff --git a/README.md b/README.md index d8e07745..e7b90918 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ This README is being written.
## Announcements +* **2 May 2018** + * On Windows, you no longer need to carry around a `libui.res` file with static builds. You do need to link in the appropriate manifest file, such as the one in the `windows/` folder (I still need to figure out exactly what is needed apart from the Common Controls v6 dependency, or at least to create a complete-ish template), or at least include it alongside your executables. This also means you should no longer see random cmake errors when building the static libraries. + * **18 April 2018** * Introduced a new `uiTimer()` function for running code on a timer on the main thread. (Thanks to @cody271.) diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt index eab9ca90..4b208385 100644 --- a/windows/CMakeLists.txt +++ b/windows/CMakeLists.txt @@ -56,8 +56,17 @@ list(APPEND _LIBUI_SOURCES windows/window.cpp windows/winpublic.cpp windows/winutil.cpp - windows/resources.rc ) +# resources.rc only contains the libui manifest. +# For a DLL, we have to include this directly, so we do so. +# Windows won't link resources in static libraries, so including this would have no effect. +# In those cases, we just need them to include the manifest with the executable (or link it directly into the output executable themselves); they can also customize the manifest as they see fit (assuming nothing breaks in the process). +# TODO make sure this gets added to both binary-only archives and install rules in this case +if(BUILD_SHARED_LIBS) + list(APPEND _LIBUI_SOURCES + windows/resources.rc + ) +endif() set(_LIBUI_SOURCES ${_LIBUI_SOURCES} PARENT_SCOPE) list(APPEND _LIBUI_INCLUDEDIRS @@ -65,18 +74,9 @@ list(APPEND _LIBUI_INCLUDEDIRS ) set(_LIBUI_INCLUDEDIRS _LIBUI_INCLUDEDIRS PARENT_SCOPE) -# Windows won't link resources in static libraries; we need to provide the libui.res file in this case. set(_LIBUINAME libui PARENT_SCOPE) -if(NOT BUILD_SHARED_LIBS) - set(_LIBUI_STATIC_RES ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/libui.res PARENT_SCOPE) -endif() macro(_handle_static) - # TODO this full path feels hacky - add_custom_command( - TARGET libui POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy $/CMakeFiles/libui.dir/windows/resources.rc.* ${_LIBUI_STATIC_RES} - COMMENT "Copying libui.res") + # do nothing endmacro() # TODO prune this list diff --git a/windows/_rc2bin/build.bat b/windows/_rc2bin/build.bat new file mode 100644 index 00000000..5aaccf4c --- /dev/null +++ b/windows/_rc2bin/build.bat @@ -0,0 +1,10 @@ +@rem 2 may 2018 +@echo off + +cl /nologo /TP /GR /EHsc /MDd /Ob0 /Od /RTC1 /W4 /wd4100 /bigobj /RTC1 /RTCs /RTCu /FS -c main.cpp +if errorlevel 1 goto out +rc -foresources.res resources.rc +if errorlevel 1 goto out +link /nologo main.obj resources.res /out:main.exe /LARGEADDRESSAWARE /NOLOGO /INCREMENTAL:NO /MANIFEST:NO /debug user32.lib kernel32.lib gdi32.lib comctl32.lib uxtheme.lib msimg32.lib comdlg32.lib d2d1.lib dwrite.lib ole32.lib oleaut32.lib oleacc.lib uuid.lib + +:out diff --git a/windows/_rc2bin/libui.manifest b/windows/_rc2bin/libui.manifest new file mode 100644 index 00000000..8beb6cfc --- /dev/null +++ b/windows/_rc2bin/libui.manifest @@ -0,0 +1,31 @@ + + + +Your application description here. + + + + + + + + + + + + + + + diff --git a/windows/_rc2bin/main.cpp b/windows/_rc2bin/main.cpp new file mode 100644 index 00000000..2143fc80 --- /dev/null +++ b/windows/_rc2bin/main.cpp @@ -0,0 +1,69 @@ +// 2 may 2018 +#include "winapi.hpp" +#include +#include +#include "resources.hpp" + +// TODO make sure there are no CRs in the output + +void die(const char *f, const char *constname) +{ + DWORD le; + + le = GetLastError(); + fprintf(stderr, "error calling %s for %s: %I32d\n", f, constname, le); + exit(1); +} + +void dumpResource(const char *constname, const WCHAR *name, const WCHAR *type) +{ + HRSRC hrsrc; + HGLOBAL res; + uint8_t *b, *bp; + DWORD i, n; + DWORD j; + + hrsrc = FindResourceW(NULL, name, type); + if (hrsrc == NULL) + die("FindResourceW()", constname); + n = SizeofResource(NULL, hrsrc); + if (n == 0) + die("SizeofResource()", constname); + res = LoadResource(NULL, hrsrc); + if (res == NULL) + die("LoadResource()", constname); + b = (uint8_t *) LockResource(res); + if (b == NULL) + die("LockResource()", constname); + + printf("static const uint8_t %s[] = {\n", constname); + bp = b; + j = 0; + for (i = 0; i < n; i++) { + if (j == 0) + printf("\t"); + printf("0x%02I32X,", (uint32_t) (*bp)); + bp++; + if (j == 7) { + printf("\n"); + j = 0; + } else { + printf(" "); + j++; + } + } + if (j != 0) + printf("\n"); + printf("};\n"); + printf("static_assert(ARRAYSIZE(%s) == %I32d, \"wrong size for resource %s\");\n", constname, n, constname); + printf("\n"); +} + +int main(void) +{ +#define d(c, t) dumpResource(#c, MAKEINTRESOURCEW(c), t) + d(rcTabPageDialog, RT_DIALOG); + d(rcFontDialog, RT_DIALOG); + d(rcColorDialog, RT_DIALOG); + return 0; +} diff --git a/windows/_rc2bin/resources.hpp b/windows/_rc2bin/resources.hpp new file mode 100644 index 00000000..4ae54725 --- /dev/null +++ b/windows/_rc2bin/resources.hpp @@ -0,0 +1,37 @@ +// 30 may 2015 + +#define rcTabPageDialog 29000 +#define rcFontDialog 29001 +#define rcColorDialog 29002 + +// TODO normalize these + +#define rcFontFamilyCombobox 1000 +#define rcFontStyleCombobox 1001 +#define rcFontSizeCombobox 1002 +#define rcFontSamplePlacement 1003 + +#define rcColorSVChooser 1100 +#define rcColorHSlider 1101 +#define rcPreview 1102 +#define rcOpacitySlider 1103 +#define rcH 1104 +#define rcS 1105 +#define rcV 1106 +#define rcRDouble 1107 +#define rcRInt 1108 +#define rcGDouble 1109 +#define rcGInt 1110 +#define rcBDouble 1111 +#define rcBInt 1112 +#define rcADouble 1113 +#define rcAInt 1114 +#define rcHex 1115 +#define rcHLabel 1116 +#define rcSLabel 1117 +#define rcVLabel 1118 +#define rcRLabel 1119 +#define rcGLabel 1120 +#define rcBLabel 1121 +#define rcALabel 1122 +#define rcHexLabel 1123 diff --git a/windows/_rc2bin/resources.rc b/windows/_rc2bin/resources.rc new file mode 100644 index 00000000..989dfc91 --- /dev/null +++ b/windows/_rc2bin/resources.rc @@ -0,0 +1,96 @@ +// 30 may 2015 +#include "winapi.hpp" +#include "resources.hpp" + +// this is a UTF-8 file +#pragma code_page(65001) + +// this is the Common Controls 6 manifest +// we only define it in a shared build; static builds have to include the appropriate parts of the manifest in the output executable +// LONGTERM set up the string values here +#ifndef _UI_STATIC +ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "libui.manifest" +#endif + +// this is the dialog template used by tab pages; see windows/tabpage.c for details +rcTabPageDialog DIALOGEX 0, 0, 100, 100 +STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE +EXSTYLE WS_EX_CONTROLPARENT +BEGIN + // nothing +END + +// this is for our custom DirectWrite-based font dialog (see fontdialog.cpp) +// this is based on the "New Font Dialog with Syslink" in Microsoft's font.dlg +// LONGTERM look at localization +// LONGTERM make it look tighter and nicer like the real one, including the actual heights of the font family and style comboboxes +rcFontDialog DIALOGEX 13, 54, 243, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_3DLOOK +CAPTION "Font" +FONT 9, "Segoe UI" +BEGIN + LTEXT "&Font:", -1, 7, 7, 98, 9 + COMBOBOX rcFontFamilyCombobox, 7, 16, 98, 76, + CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS + + LTEXT "Font st&yle:", -1, 114, 7, 74, 9 + COMBOBOX rcFontStyleCombobox, 114, 16, 74, 76, + CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS + + LTEXT "&Size:", -1, 198, 7, 36, 9 + COMBOBOX rcFontSizeCombobox, 198, 16, 36, 76, + CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS + + GROUPBOX "Sample", -1, 7, 97, 227, 70, WS_GROUP + CTEXT "AaBbYyZz", rcFontSamplePlacement, 9, 106, 224, 60, SS_NOPREFIX | NOT WS_VISIBLE + + DEFPUSHBUTTON "OK", IDOK, 141, 181, 45, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 190, 181, 45, 14, WS_GROUP +END + +rcColorDialog DIALOGEX 13, 54, 344, 209 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_3DLOOK +CAPTION "Color" +FONT 9, "Segoe UI" +BEGIN + // this size should be big enough to get at least 256x256 on font sizes >= 8 pt + CTEXT "AaBbYyZz", rcColorSVChooser, 7, 7, 195, 195, SS_NOPREFIX | SS_BLACKRECT + + // width is the suggested slider height since this is vertical + CTEXT "AaBbYyZz", rcColorHSlider, 206, 7, 15, 195, SS_NOPREFIX | SS_BLACKRECT + + LTEXT "Preview:", -1, 230, 7, 107, 9, SS_NOPREFIX + CTEXT "AaBbYyZz", rcPreview, 230, 16, 107, 20, SS_NOPREFIX | SS_BLACKRECT + + LTEXT "Opacity:", -1, 230, 45, 107, 9, SS_NOPREFIX + CTEXT "AaBbYyZz", rcOpacitySlider, 230, 54, 107, 15, SS_NOPREFIX | SS_BLACKRECT + + LTEXT "&H:", rcHLabel, 230, 81, 8, 8 + EDITTEXT rcH, 238, 78, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&S:", rcSLabel, 230, 95, 8, 8 + EDITTEXT rcS, 238, 92, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&V:", rcVLabel, 230, 109, 8, 8 + EDITTEXT rcV, 238, 106, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + + LTEXT "&R:", rcRLabel, 277, 81, 8, 8 + EDITTEXT rcRDouble, 285, 78, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcRInt, 315, 78, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&G:", rcGLabel, 277, 95, 8, 8 + EDITTEXT rcGDouble, 285, 92, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcGInt, 315, 92, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&B:", rcBLabel, 277, 109, 8, 8 + EDITTEXT rcBDouble, 285, 106, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcBInt, 315, 106, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&A:", rcALabel, 277, 123, 8, 8 + EDITTEXT rcADouble, 285, 120, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcAInt, 315, 120, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + + LTEXT "He&x:", rcHexLabel, 269, 146, 16, 8 + EDITTEXT rcHex, 285, 143, 50, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + + DEFPUSHBUTTON "OK", IDOK, 243, 188, 45, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 292, 188, 45, 14, WS_GROUP +END diff --git a/windows/_rc2bin/winapi.hpp b/windows/_rc2bin/winapi.hpp new file mode 100644 index 00000000..4f24f607 --- /dev/null +++ b/windows/_rc2bin/winapi.hpp @@ -0,0 +1,60 @@ +// 31 may 2015 +#define UNICODE +#define _UNICODE +#define STRICT +#define STRICT_TYPED_ITEMIDS + +// see https://github.com/golang/go/issues/9916#issuecomment-74812211 +// TODO get rid of this +#define INITGUID + +// for the manifest +#ifndef _UI_STATIC +#define ISOLATION_AWARE_ENABLED 1 +#endif + +// get Windows version right; right now Windows Vista +// unless otherwise stated, all values from Microsoft's sdkddkver.h +// TODO is all of this necessary? how is NTDDI_VERSION used? +// TODO plaform update sp2 +#define WINVER 0x0600 /* from Microsoft's winnls.h */ +#define _WIN32_WINNT 0x0600 +#define _WIN32_WINDOWS 0x0600 /* from Microsoft's pdh.h */ +#define _WIN32_IE 0x0700 +#define NTDDI_VERSION 0x06000000 + +// The MinGW-w64 header has an unverified IDWriteTypography definition. +// TODO I can confirm this myself, but I don't know how long it will take for them to note my adjustments... Either way, I have to confirm this myself. +// TODO change the check from _MSC_VER to a MinGW-w64-specific check +// TODO keep track of what else is guarded by this +#ifndef _MSC_VER +#define __MINGW_USE_BROKEN_INTERFACE +#endif + +#include + +// Microsoft's resource compiler will segfault if we feed it headers it was not designed to handle +#ifndef RC_INVOKED +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#endif diff --git a/windows/colordialog.cpp b/windows/colordialog.cpp index d3d9bde9..d7030a4f 100644 --- a/windows/colordialog.cpp +++ b/windows/colordialog.cpp @@ -1249,9 +1249,202 @@ static INT_PTR CALLBACK colorDialogDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, return FALSE; } +// because Windows doesn't really support resources in static libraries, we have to embed this directly; oh well +/* +rcColorDialog DIALOGEX 13, 54, 344, 209 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_3DLOOK +CAPTION "Color" +FONT 9, "Segoe UI" +BEGIN + // this size should be big enough to get at least 256x256 on font sizes >= 8 pt + CTEXT "AaBbYyZz", rcColorSVChooser, 7, 7, 195, 195, SS_NOPREFIX | SS_BLACKRECT + + // width is the suggested slider height since this is vertical + CTEXT "AaBbYyZz", rcColorHSlider, 206, 7, 15, 195, SS_NOPREFIX | SS_BLACKRECT + + LTEXT "Preview:", -1, 230, 7, 107, 9, SS_NOPREFIX + CTEXT "AaBbYyZz", rcPreview, 230, 16, 107, 20, SS_NOPREFIX | SS_BLACKRECT + + LTEXT "Opacity:", -1, 230, 45, 107, 9, SS_NOPREFIX + CTEXT "AaBbYyZz", rcOpacitySlider, 230, 54, 107, 15, SS_NOPREFIX | SS_BLACKRECT + + LTEXT "&H:", rcHLabel, 230, 81, 8, 8 + EDITTEXT rcH, 238, 78, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&S:", rcSLabel, 230, 95, 8, 8 + EDITTEXT rcS, 238, 92, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&V:", rcVLabel, 230, 109, 8, 8 + EDITTEXT rcV, 238, 106, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + + LTEXT "&R:", rcRLabel, 277, 81, 8, 8 + EDITTEXT rcRDouble, 285, 78, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcRInt, 315, 78, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&G:", rcGLabel, 277, 95, 8, 8 + EDITTEXT rcGDouble, 285, 92, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcGInt, 315, 92, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&B:", rcBLabel, 277, 109, 8, 8 + EDITTEXT rcBDouble, 285, 106, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcBInt, 315, 106, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + LTEXT "&A:", rcALabel, 277, 123, 8, 8 + EDITTEXT rcADouble, 285, 120, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + EDITTEXT rcAInt, 315, 120, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE + + LTEXT "He&x:", rcHexLabel, 269, 146, 16, 8 + EDITTEXT rcHex, 285, 143, 50, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE + + DEFPUSHBUTTON "OK", IDOK, 243, 188, 45, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 292, 188, 45, 14, WS_GROUP +END +*/ +static const uint8_t data_rcColorDialog[] = { + 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC4, 0x00, 0xC8, 0x80, + 0x1C, 0x00, 0x0D, 0x00, 0x36, 0x00, 0x58, 0x01, + 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, + 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x72, 0x00, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x53, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, + 0x65, 0x00, 0x20, 0x00, 0x55, 0x00, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x02, 0x50, + 0x07, 0x00, 0x07, 0x00, 0xC3, 0x00, 0xC3, 0x00, + 0x4C, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x41, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x00, + 0x59, 0x00, 0x79, 0x00, 0x5A, 0x00, 0x7A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x02, 0x50, + 0xCE, 0x00, 0x07, 0x00, 0x0F, 0x00, 0xC3, 0x00, + 0x4D, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x41, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x00, + 0x59, 0x00, 0x79, 0x00, 0x5A, 0x00, 0x7A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x07, 0x00, 0x6B, 0x00, 0x09, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0x00, + 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x77, 0x00, 0x3A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x10, 0x00, 0x6B, 0x00, 0x14, 0x00, + 0x4E, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x41, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x00, + 0x59, 0x00, 0x79, 0x00, 0x5A, 0x00, 0x7A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x09, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0x00, + 0x4F, 0x00, 0x70, 0x00, 0x61, 0x00, 0x63, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x3A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x36, 0x00, 0x6B, 0x00, 0x0F, 0x00, + 0x4F, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x41, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x00, + 0x59, 0x00, 0x79, 0x00, 0x5A, 0x00, 0x7A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x51, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x5C, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x48, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0xEE, 0x00, 0x4E, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x50, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x5D, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x53, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0xEE, 0x00, 0x5C, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x51, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0xE6, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x5E, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x56, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0xEE, 0x00, 0x6A, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x52, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0x15, 0x01, 0x51, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x5F, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x52, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0x1D, 0x01, 0x4E, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x53, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x20, 0x81, 0x50, + 0x3B, 0x01, 0x4E, 0x00, 0x14, 0x00, 0x0E, 0x00, + 0x54, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0x15, 0x01, 0x5F, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x60, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x47, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0x1D, 0x01, 0x5C, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x55, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x20, 0x81, 0x50, + 0x3B, 0x01, 0x5C, 0x00, 0x14, 0x00, 0x0E, 0x00, + 0x56, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0x15, 0x01, 0x6D, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x61, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x42, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0x1D, 0x01, 0x6A, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x57, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x20, 0x81, 0x50, + 0x3B, 0x01, 0x6A, 0x00, 0x14, 0x00, 0x0E, 0x00, + 0x58, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0x15, 0x01, 0x7B, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x62, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x41, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x81, 0x50, + 0x1D, 0x01, 0x78, 0x00, 0x1E, 0x00, 0x0E, 0x00, + 0x59, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x80, 0x20, 0x81, 0x50, + 0x3B, 0x01, 0x78, 0x00, 0x14, 0x00, 0x0E, 0x00, + 0x5A, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0x0D, 0x01, 0x92, 0x00, 0x10, 0x00, 0x08, 0x00, + 0x63, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x48, 0x00, 0x65, 0x00, 0x26, 0x00, 0x78, 0x00, + 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x80, 0x00, 0x81, 0x50, 0x1D, 0x01, 0x8F, 0x00, + 0x32, 0x00, 0x0E, 0x00, 0x5B, 0x04, 0x00, 0x00, + 0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x50, 0xF3, 0x00, 0xBC, 0x00, + 0x2D, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x80, 0x00, 0x4F, 0x00, 0x4B, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x50, + 0x24, 0x01, 0xBC, 0x00, 0x2D, 0x00, 0x0E, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, + 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, + 0x65, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static_assert(ARRAYSIZE(data_rcColorDialog) == 1144, "wrong size for resource rcColorDialog"); + BOOL showColorDialog(HWND parent, struct colorDialogRGBA *c) { - switch (DialogBoxParamW(hInstance, MAKEINTRESOURCE(rcColorDialog), parent, colorDialogDlgProc, (LPARAM) c)) { + switch (DialogBoxIndirectParamW(hInstance, (const DLGTEMPLATE *) data_rcColorDialog, parent, colorDialogDlgProc, (LPARAM) c)) { case 1: // cancel return FALSE; case 2: // ok diff --git a/windows/fontdialog.cpp b/windows/fontdialog.cpp index ea02a416..fa9c1d0d 100644 --- a/windows/fontdialog.cpp +++ b/windows/fontdialog.cpp @@ -591,9 +591,106 @@ static INT_PTR CALLBACK fontDialogDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, L return FALSE; } +// because Windows doesn't really support resources in static libraries, we have to embed this directly; oh well +/* +// this is for our custom DirectWrite-based font dialog (see fontdialog.cpp) +// this is based on the "New Font Dialog with Syslink" in Microsoft's font.dlg +// LONGTERM look at localization +// LONGTERM make it look tighter and nicer like the real one, including the actual heights of the font family and style comboboxes +rcFontDialog DIALOGEX 13, 54, 243, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_3DLOOK +CAPTION "Font" +FONT 9, "Segoe UI" +BEGIN + LTEXT "&Font:", -1, 7, 7, 98, 9 + COMBOBOX rcFontFamilyCombobox, 7, 16, 98, 76, + CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS + + LTEXT "Font st&yle:", -1, 114, 7, 74, 9 + COMBOBOX rcFontStyleCombobox, 114, 16, 74, 76, + CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS + + LTEXT "&Size:", -1, 198, 7, 36, 9 + COMBOBOX rcFontSizeCombobox, 198, 16, 36, 76, + CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS + + GROUPBOX "Sample", -1, 7, 97, 227, 70, WS_GROUP + CTEXT "AaBbYyZz", rcFontSamplePlacement, 9, 106, 224, 60, SS_NOPREFIX | NOT WS_VISIBLE + + DEFPUSHBUTTON "OK", IDOK, 141, 181, 45, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 190, 181, 45, 14, WS_GROUP +END +*/ +static const uint8_t data_rcFontDialog[] = { + 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC4, 0x00, 0xC8, 0x80, + 0x0A, 0x00, 0x0D, 0x00, 0x36, 0x00, 0xF3, 0x00, + 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, + 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0x00, + 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x65, 0x00, + 0x20, 0x00, 0x55, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x50, 0x07, 0x00, 0x07, 0x00, + 0x62, 0x00, 0x09, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x82, 0x00, 0x26, 0x00, 0x46, 0x00, + 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x3A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x0B, 0x21, 0x50, + 0x07, 0x00, 0x10, 0x00, 0x62, 0x00, 0x4C, 0x00, + 0xE8, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x85, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0x72, 0x00, 0x07, 0x00, 0x4A, 0x00, 0x09, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0x00, + 0x46, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x26, 0x00, + 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x3A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x0A, 0x21, 0x50, + 0x72, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x4C, 0x00, + 0xE9, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x85, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, + 0xC6, 0x00, 0x07, 0x00, 0x24, 0x00, 0x09, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x82, 0x00, + 0x26, 0x00, 0x53, 0x00, 0x69, 0x00, 0x7A, 0x00, + 0x65, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x0B, 0x21, 0x50, 0xC6, 0x00, 0x10, 0x00, + 0x24, 0x00, 0x4C, 0x00, 0xEA, 0x03, 0x00, 0x00, + 0xFF, 0xFF, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x02, 0x50, 0x07, 0x00, 0x61, 0x00, + 0xE3, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x80, 0x00, 0x53, 0x00, 0x61, 0x00, + 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x02, 0x40, + 0x09, 0x00, 0x6A, 0x00, 0xE0, 0x00, 0x3C, 0x00, + 0xEB, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x82, 0x00, + 0x41, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x00, + 0x59, 0x00, 0x79, 0x00, 0x5A, 0x00, 0x7A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, + 0x8D, 0x00, 0xB5, 0x00, 0x2D, 0x00, 0x0E, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, + 0x4F, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x50, 0xBE, 0x00, 0xB5, 0x00, + 0x2D, 0x00, 0x0E, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x80, 0x00, 0x43, 0x00, 0x61, 0x00, + 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; +static_assert(ARRAYSIZE(data_rcFontDialog) == 476, "wrong size for resource rcFontDialog"); + BOOL uiprivShowFontDialog(HWND parent, struct fontDialogParams *params) { - switch (DialogBoxParamW(hInstance, MAKEINTRESOURCE(rcFontDialog), parent, fontDialogDlgProc, (LPARAM) params)) { + switch (DialogBoxIndirectParamW(hInstance, (const DLGTEMPLATE *) data_rcFontDialog, parent, fontDialogDlgProc, (LPARAM) params)) { case 1: // cancel return FALSE; case 2: // ok diff --git a/windows/resources.rc b/windows/resources.rc index 989dfc91..2ce7ee53 100644 --- a/windows/resources.rc +++ b/windows/resources.rc @@ -11,86 +11,3 @@ #ifndef _UI_STATIC ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "libui.manifest" #endif - -// this is the dialog template used by tab pages; see windows/tabpage.c for details -rcTabPageDialog DIALOGEX 0, 0, 100, 100 -STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -BEGIN - // nothing -END - -// this is for our custom DirectWrite-based font dialog (see fontdialog.cpp) -// this is based on the "New Font Dialog with Syslink" in Microsoft's font.dlg -// LONGTERM look at localization -// LONGTERM make it look tighter and nicer like the real one, including the actual heights of the font family and style comboboxes -rcFontDialog DIALOGEX 13, 54, 243, 200 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_3DLOOK -CAPTION "Font" -FONT 9, "Segoe UI" -BEGIN - LTEXT "&Font:", -1, 7, 7, 98, 9 - COMBOBOX rcFontFamilyCombobox, 7, 16, 98, 76, - CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | - CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS - - LTEXT "Font st&yle:", -1, 114, 7, 74, 9 - COMBOBOX rcFontStyleCombobox, 114, 16, 74, 76, - CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | - WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS - - LTEXT "&Size:", -1, 198, 7, 36, 9 - COMBOBOX rcFontSizeCombobox, 198, 16, 36, 76, - CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | - CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS - - GROUPBOX "Sample", -1, 7, 97, 227, 70, WS_GROUP - CTEXT "AaBbYyZz", rcFontSamplePlacement, 9, 106, 224, 60, SS_NOPREFIX | NOT WS_VISIBLE - - DEFPUSHBUTTON "OK", IDOK, 141, 181, 45, 14, WS_GROUP - PUSHBUTTON "Cancel", IDCANCEL, 190, 181, 45, 14, WS_GROUP -END - -rcColorDialog DIALOGEX 13, 54, 344, 209 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_3DLOOK -CAPTION "Color" -FONT 9, "Segoe UI" -BEGIN - // this size should be big enough to get at least 256x256 on font sizes >= 8 pt - CTEXT "AaBbYyZz", rcColorSVChooser, 7, 7, 195, 195, SS_NOPREFIX | SS_BLACKRECT - - // width is the suggested slider height since this is vertical - CTEXT "AaBbYyZz", rcColorHSlider, 206, 7, 15, 195, SS_NOPREFIX | SS_BLACKRECT - - LTEXT "Preview:", -1, 230, 7, 107, 9, SS_NOPREFIX - CTEXT "AaBbYyZz", rcPreview, 230, 16, 107, 20, SS_NOPREFIX | SS_BLACKRECT - - LTEXT "Opacity:", -1, 230, 45, 107, 9, SS_NOPREFIX - CTEXT "AaBbYyZz", rcOpacitySlider, 230, 54, 107, 15, SS_NOPREFIX | SS_BLACKRECT - - LTEXT "&H:", rcHLabel, 230, 81, 8, 8 - EDITTEXT rcH, 238, 78, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - LTEXT "&S:", rcSLabel, 230, 95, 8, 8 - EDITTEXT rcS, 238, 92, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - LTEXT "&V:", rcVLabel, 230, 109, 8, 8 - EDITTEXT rcV, 238, 106, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - - LTEXT "&R:", rcRLabel, 277, 81, 8, 8 - EDITTEXT rcRDouble, 285, 78, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - EDITTEXT rcRInt, 315, 78, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE - LTEXT "&G:", rcGLabel, 277, 95, 8, 8 - EDITTEXT rcGDouble, 285, 92, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - EDITTEXT rcGInt, 315, 92, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE - LTEXT "&B:", rcBLabel, 277, 109, 8, 8 - EDITTEXT rcBDouble, 285, 106, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - EDITTEXT rcBInt, 315, 106, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE - LTEXT "&A:", rcALabel, 277, 123, 8, 8 - EDITTEXT rcADouble, 285, 120, 30, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - EDITTEXT rcAInt, 315, 120, 20, 14, ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER | WS_TABSTOP, WS_EX_CLIENTEDGE - - LTEXT "He&x:", rcHexLabel, 269, 146, 16, 8 - EDITTEXT rcHex, 285, 143, 50, 14, ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP, WS_EX_CLIENTEDGE - - DEFPUSHBUTTON "OK", IDOK, 243, 188, 45, 14, WS_GROUP - PUSHBUTTON "Cancel", IDCANCEL, 292, 188, 45, 14, WS_GROUP -END diff --git a/windows/tabpage.cpp b/windows/tabpage.cpp index dc98fb88..c2584019 100644 --- a/windows/tabpage.cpp +++ b/windows/tabpage.cpp @@ -78,6 +78,24 @@ static INT_PTR CALLBACK dlgproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar return FALSE; } +// because Windows doesn't really support resources in static libraries, we have to embed this directly; oh well +/* +// this is the dialog template used by tab pages; see windows/tabpage.c for details +rcTabPageDialog DIALOGEX 0, 0, 100, 100 +STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE +EXSTYLE WS_EX_CONTROLPARENT +BEGIN + // nothing +END +*/ +static const uint8_t data_rcTabPageDialog[] = { + 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static_assert(ARRAYSIZE(data_rcTabPageDialog) == 32, "wrong size for resource rcTabPageDialog"); + struct tabPage *newTabPage(uiControl *child) { struct tabPage *tp; @@ -86,7 +104,7 @@ struct tabPage *newTabPage(uiControl *child) tp = uiprivNew(struct tabPage); // unfortunately this needs to be a proper dialog for EnableThemeDialogTexture() to work; CreateWindowExW() won't suffice - if (CreateDialogParamW(hInstance, MAKEINTRESOURCE(rcTabPageDialog), + if (CreateDialogIndirectParamW(hInstance, (const DLGTEMPLATE *) data_rcTabPageDialog, utilWindow, dlgproc, (LPARAM) tp) == NULL) logLastError(L"error creating tab page");