Tue, 06 May 2025 15:24:39 +0200
add incomplete ui_window implementation (WIN32)
| application/main.c | file | annotate | diff | comparison | revisions | |
| ui/win32/objs.mk | file | annotate | diff | comparison | revisions | |
| ui/win32/toolkit.c | file | annotate | diff | comparison | revisions | |
| ui/win32/window.c | file | annotate | diff | comparison | revisions | |
| ui/win32/window.h | file | annotate | diff | comparison | revisions |
--- a/application/main.c Tue May 06 13:17:52 2025 +0200 +++ b/application/main.c Tue May 06 15:24:39 2025 +0200 @@ -1014,7 +1014,8 @@ #ifdef UI_WIN32 void application_startup(UiEvent *event, void *data) { - + UiObject *obj = ui_window("Test", NULL); + } int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
--- a/ui/win32/objs.mk Tue May 06 13:17:52 2025 +0200 +++ b/ui/win32/objs.mk Tue May 06 15:24:39 2025 +0200 @@ -29,7 +29,8 @@ WIN32_SRC_DIR = ui/win32/ WIN32_OBJPRE = $(OBJ_DIR)$(WIN32_SRC_DIR) -WIN32OBJ = toolkit.obj +WIN32OBJ = toolkit.obj +WIN32OBJ += window.obj TOOLKITOBJS += $(WIN32OBJ:%=$(WIN32_OBJPRE)%) TOOLKITSOURCE += $(WIN32OBJ:%.obj=win32/%.c)
--- a/ui/win32/toolkit.c Tue May 06 13:17:52 2025 +0200 +++ b/ui/win32/toolkit.c Tue May 06 15:24:39 2025 +0200 @@ -29,6 +29,8 @@ #include "toolkit.h" #include "Windows.h" +#include "window.h" + #include "../common/properties.h" #include <stdio.h> @@ -45,6 +47,8 @@ void ui_init(const char *appname, int argc, char **argv) { application_name = appname; + + ui_window_init(); } const char* ui_appname() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/win32/window.c Tue May 06 15:24:39 2025 +0200 @@ -0,0 +1,99 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2024 Olaf Wintermann. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "window.h" +#include "Windows.h" + + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> + + +static HINSTANCE hInstance; + +static const wchar_t *mainWindowClass = L"UiMainWindow"; + +LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + switch(uMsg) { + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hwnd, uMsg, wParam, lParam); + } + return 0; +} + +void ui_window_init(void) { + hInstance = GetModuleHandle(NULL); + + WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; + wc.lpfnWndProc = WindowProc; + wc.hInstance = hInstance; + wc.lpszClassName = mainWindowClass; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + + if(!RegisterClassEx(&wc)) { + MessageBox(NULL, "RegisterClassEx failed", "Error", MB_ICONERROR); + exit(-1); + } +} + +static UiObject* create_window(const char *title, void *window_data, bool simple) { + CxMempool *mp = cxMempoolCreateSimple(256); + const CxAllocator *a = mp->allocator; + UiObject *obj = cxCalloc(a, 1, sizeof(UiObject)); + obj->ctx = uic_context(obj, mp); + obj->window = window_data; + + HWND hwnd = CreateWindowEx( + 0, + L"UiMainWindow", + "Test", + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + CW_USEDEFAULT, + CW_USEDEFAULT, + 800, + 600, + NULL, + NULL, + hInstance, + NULL); + + ShowWindow(hwnd, SW_SHOWNORMAL); + UpdateWindow(hwnd); + + return obj; +} + +UiObject *ui_window(const char *title, void *window_data) { + return create_window(title, window_data, FALSE); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/win32/window.h Tue May 06 15:24:39 2025 +0200 @@ -0,0 +1,51 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2024 Olaf Wintermann. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WINDOW_H +#define WINDOW_H + +#include <inttypes.h> +#include "../ui/window.h" +#include "../common/context.h" +#include "../common/object.h" + +#include "toolkit.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +void ui_window_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* WINDOW_H */ +