Merge branch 'windows-resource-removal'

Updates #308.
This commit is contained in:
Pietro Gagliardi 2018-05-02 23:40:04 -04:00
commit 0359c2fa5c
13 changed files with 629 additions and 98 deletions

View File

@ -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

View File

@ -5,6 +5,9 @@ This README is being written.<br>
## 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.)

View File

@ -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 $<TARGET_PROPERTY:libui,BINARY_DIR>/CMakeFiles/libui.dir/windows/resources.rc.* ${_LIBUI_STATIC_RES}
COMMENT "Copying libui.res")
# do nothing
endmacro()
# TODO prune this list

10
windows/_rc2bin/build.bat Normal file
View File

@ -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

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>

69
windows/_rc2bin/main.cpp Normal file
View File

@ -0,0 +1,69 @@
// 2 may 2018
#include "winapi.hpp"
#include <stdio.h>
#include <stdlib.h>
#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;
}

View File

@ -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

View File

@ -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

View File

@ -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 <windows.h>
// Microsoft's resource compiler will segfault if we feed it headers it was not designed to handle
#ifndef RC_INVOKED
#include <commctrl.h>
#include <uxtheme.h>
#include <windowsx.h>
#include <shobjidl.h>
#include <d2d1.h>
#include <d2d1helper.h>
#include <dwrite.h>
#include <stdint.h>
#include <string.h>
#include <wchar.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <inttypes.h>
#include <vector>
#include <map>
#include <unordered_map>
#include <sstream>
#include <functional>
#endif

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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");