Wed, 08 Oct 2025 10:41:35 +0200
add container base (win32)
| application/main.c | file | annotate | diff | comparison | revisions | |
| ui/win32/button.c | file | annotate | diff | comparison | revisions | |
| ui/win32/button.h | file | annotate | diff | comparison | revisions | |
| ui/win32/container.c | file | annotate | diff | comparison | revisions | |
| ui/win32/container.h | file | annotate | diff | comparison | revisions | |
| ui/win32/grid.h | file | annotate | diff | comparison | revisions | |
| ui/win32/toolkit.h | file | annotate | diff | comparison | revisions | |
| ui/win32/window.c | file | annotate | diff | comparison | revisions |
--- a/application/main.c Wed Oct 08 09:46:23 2025 +0200 +++ b/application/main.c Wed Oct 08 10:41:35 2025 +0200 @@ -1125,6 +1125,7 @@ void application_startup(UiEvent *event, void *data) { UiObject *obj = ui_window("Test w32", NULL); + ui_button(obj, .label = "Test"); ui_show(obj); }
--- a/ui/win32/button.c Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/button.c Wed Oct 08 10:41:35 2025 +0200 @@ -27,7 +27,40 @@ */ #include "button.h" +#include "widget.h" + +static W32WidgetClass button_widget_class = { + .enable = w32_widget_default_enable, + .show = w32_widget_default_show, + .get_preferred_size = ui_button_get_preferred_size, + .destroy = w32_widget_default_destroy +}; UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) { - return NULL; + HINSTANCE hInstance = GetModuleHandle(NULL); + UiContainerPrivate *container = ui_obj_container(obj); + HWND parent = ui_container_get_parent(container); + UiLayout layout = UI_ARGS2LAYOUT(args); + + HWND hwnd = CreateWindow( + "BUTTON", + args->label, + WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 0, 0, 100, 30, + parent, + (HMENU)0, + hInstance, + NULL); + + W32Widget *widget = w32_widget_create(&button_widget_class, hwnd, sizeof(W32Button)); + ui_container_add(container, widget, &layout); + + return widget; } + +W32Size ui_button_get_preferred_size(W32Widget *widget) { + W32Size size; + size.width = 100; + size.height = 30; + return size; +}
--- a/ui/win32/button.h Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/button.h Wed Oct 08 10:41:35 2025 +0200 @@ -32,4 +32,10 @@ #include "../ui/button.h" #include "container.h" +typedef struct W32Button { + W32Widget widget; +} W32Button; + +W32Size ui_button_get_preferred_size(W32Widget *widget); + #endif //BUTTON_H
--- a/ui/win32/container.c Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/container.c Wed Oct 08 10:41:35 2025 +0200 @@ -28,6 +28,21 @@ #include "container.h" +#include "../common/context.h" + +UiContainerPrivate* ui_obj_container(UiObject *obj) { + return (UiContainerPrivate*)obj->container_end; +} + +HWND ui_container_get_parent(UiContainerPrivate *ctn) { + return ctn->parent ? ctn->parent(ctn) : ctn->hwnd; +} + +void ui_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { + ctn->add(ctn, widget, layout); + ctn->container.newline = FALSE; +} + /* ---------------------------- Box Container ---------------------------- */ @@ -46,3 +61,19 @@ } +/* ---------------------------- Grid Container ---------------------------- */ + +UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { + return NULL; +} + +UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short padding_top, short padding_bottom, short padding_left, short padding_right) { + UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer)); + container->container.hwnd = hwnd; + container->container.add = ui_grid_container_add; + return (UiContainerX*)container; +} + +void ui_grid_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { + // TODO +}
--- a/ui/win32/container.h Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/container.h Wed Oct 08 10:41:35 2025 +0200 @@ -1,5 +1,5 @@ /* -* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2025 Olaf Wintermann. All rights reserved. * @@ -30,6 +30,7 @@ #define CONTAINER_H #include "../ui/container.h" +#include "toolkit.h" #include "grid.h" #ifdef __cplusplus @@ -37,6 +38,7 @@ #endif +typedef struct UiGridLayoutContainer UiGridLayoutContainer; enum UiBoxOrientation { UI_BOX_VERTICAL = 0, @@ -65,7 +67,7 @@ HWND (*parent)(UiContainerPrivate*); void (*add)(UiContainerPrivate*, W32Widget*, UiLayout*); UiContainerType type; - UiLayout layout; + HWND hwnd; }; struct UiGridLayoutContainer { @@ -75,6 +77,13 @@ int y; }; +UiContainerPrivate* ui_obj_container(UiObject *obj); +HWND ui_container_get_parent(UiContainerPrivate *ctn); +void ui_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout); + +UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short padding_top, short padding_bottom, short padding_left, short padding_right); +void ui_grid_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout); + #ifdef __cplusplus } #endif
--- a/ui/win32/grid.h Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/grid.h Wed Oct 08 10:41:35 2025 +0200 @@ -61,7 +61,10 @@ typedef struct UiGridLayout { HWND hwnd; - short padding; + short padding_top; + short padding_bottom; + short padding_left; + short padding_right; short columnspacing; short rowspacing;
--- a/ui/win32/toolkit.h Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/toolkit.h Wed Oct 08 10:41:35 2025 +0200 @@ -34,6 +34,8 @@ #include "../common/context.h" #include "../common/object.h" +#include "win32.h" + #ifdef __cplusplus extern "C" { #endif
--- a/ui/win32/window.c Wed Oct 08 09:46:23 2025 +0200 +++ b/ui/win32/window.c Wed Oct 08 10:41:35 2025 +0200 @@ -27,7 +27,9 @@ */ #include "window.h" -#include "Windows.h" +#include <Windows.h> + +#include "container.h" #include "../common/object.h" @@ -99,7 +101,11 @@ W32Widget *widget = w32_widget_new(&w32_toplevel_widget_class, hwnd); obj->widget = widget; obj->ref = 1; - + + // TODO: switch to box container + UiContainerX *container = ui_grid_container_create(obj, hwnd, 0, 0, 0, 0); + uic_object_push_container(obj, container); + return obj; }