# HG changeset patch # User Olaf Wintermann # Date 1762888213 -3600 # Node ID 5e53ef72a5d3810aade21ee75764ef9151ac00d1 # Parent 32b334db5f8b1708faeb87fb1a0912ae77f0819d# Parent 0fbaac4aafc83f861cf796ed6ea30ac794e92719 merge diff -r 32b334db5f8b -r 5e53ef72a5d3 ui/win32/container.c --- a/ui/win32/container.c Tue Nov 11 20:08:55 2025 +0100 +++ b/ui/win32/container.c Tue Nov 11 20:10:13 2025 +0100 @@ -35,7 +35,7 @@ static W32WidgetClass grid_layout_widget_class = { - .eventproc = NULL, + .eventproc = ui_grid_widget_event, .enable = NULL, .show = w32_widget_default_show, .get_preferred_size = ui_grid_layout_get_preferred_size, @@ -62,6 +62,14 @@ ctn->container.newline = FALSE; } +void ui_grid_widget_event(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + HDC hdc = (HDC)wParam; + UiGridWidget *grid = (UiGridWidget*)widget; + RECT rc; + GetClientRect(hwnd, &rc); + FillRect(hdc, &rc, grid->brush); +} + W32Size ui_grid_layout_get_preferred_size(W32Widget *widget) { UiGridLayout *grid = widget->layoutmanager; W32Size size; @@ -134,26 +142,27 @@ TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE, - 0, 0, 100, 100, + 0, 0, 300, 300, parent, NULL, hInstance, NULL); SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)ui_default_eventproc); - W32Widget *widget = w32_widget_new(&grid_layout_widget_class, hwnd); - ui_container_add(container, widget, &layout); + UiGridWidget *widget = w32_widget_create(&grid_layout_widget_class, hwnd, sizeof(UiGridWidget)); + ui_container_add(container, (W32Widget*)widget, &layout); UiContainerX *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO); uic_object_push_container(obj, gridContainer); UiGridLayoutContainer *grid = (UiGridLayoutContainer*)gridContainer; - widget->layout = (W32LayoutFunc)ui_grid_layout; - widget->layoutmanager = grid->layout; + widget->widget.layout = (W32LayoutFunc)ui_grid_layout; + widget->widget.layoutmanager = grid->layout; + widget->brush = GetSysColorBrush(COLOR_BTNFACE); grid->layout->preferred_width = 200; grid->layout->preferred_height = 200; - return widget; + return (W32Widget*)widget; } UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { diff -r 32b334db5f8b -r 5e53ef72a5d3 ui/win32/container.h --- a/ui/win32/container.h Tue Nov 11 20:08:55 2025 +0100 +++ b/ui/win32/container.h Tue Nov 11 20:10:13 2025 +0100 @@ -40,6 +40,7 @@ typedef struct UiContainerPrivate UiContainerPrivate; typedef struct UiGridLayoutContainer UiGridLayoutContainer; typedef struct UiBoxContainer UiBoxContainer; +typedef struct UiGridWidget UiGridWidget; enum UiBoxOrientation { UI_BOX_VERTICAL = 0, @@ -88,10 +89,16 @@ UiBool def_vfill; }; +struct UiGridWidget { + W32Widget widget; + HBRUSH brush; +}; + UiContainerPrivate* ui_obj_container(UiObject *obj); HWND ui_container_get_parent(UiContainerPrivate *ctn); void ui_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout); +void ui_grid_widget_event(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); W32Size ui_grid_layout_get_preferred_size(W32Widget *widget); UiContainerX* ui_box_container_create(UiObject *obj, HWND hwnd, UiBoxOrientation orientation, short spacing, GridEdgeInsets padding); diff -r 32b334db5f8b -r 5e53ef72a5d3 ui/win32/grid.c --- a/ui/win32/grid.c Tue Nov 11 20:08:55 2025 +0100 +++ b/ui/win32/grid.c Tue Nov 11 20:10:13 2025 +0100 @@ -293,7 +293,9 @@ child_x = col->pos + elm->layout.margin.left; child_y = row->pos + elm->layout.margin.top; - SetWindowPos(elm->widget->hwnd, NULL, child_x, child_y, child_width, child_height, SWP_NOZORDER); + SetWindowPos(elm->widget->hwnd, NULL, child_x, child_y, child_width, child_height, SWP_NOZORDER | SWP_NOACTIVATE); + InvalidateRect(elm->widget->hwnd, NULL, TRUE); + //UpdateWindow(elm->widget->hwnd); if (elm->widget->layout) { elm->widget->layout(elm->widget->layoutmanager, child_width, child_height); } diff -r 32b334db5f8b -r 5e53ef72a5d3 ui/win32/toolkit.c --- a/ui/win32/toolkit.c Tue Nov 11 20:08:55 2025 +0100 +++ b/ui/win32/toolkit.c Tue Nov 11 20:10:13 2025 +0100 @@ -141,6 +141,7 @@ if (cmdWidget && cmdWidget->wclass->eventproc) { cmdWidget->wclass->eventproc(cmdWidget, hwnd, uMsg, wParam, lParam); } + break; } case WM_SIZE: { int width = LOWORD(lParam);