--- a/ui/winui/container.cpp Sat Apr 05 17:57:04 2025 +0200 +++ b/ui/winui/container.cpp Sun Jul 20 22:04:39 2025 +0200 @@ -34,6 +34,7 @@ #include "../common/object.h" #include "util.h" +#include "../ui/widget.h" void ui_container_begin_close(UiObject* obj) { @@ -51,13 +52,13 @@ } -UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args) { +UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args) { UiObject* current = uic_current_obj(obj); UIWIDGET widget = create_widget(obj, args, userdata); FrameworkElement w = widget->uielement.as<FrameworkElement>(); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->Add(w, false); @@ -66,9 +67,9 @@ // --------------------- UiBoxContainer --------------------- -static UIWIDGET ui_box(UiObject* obj, UiContainerArgs args, UiBoxContainerType type) { +static UIWIDGET ui_box(UiObject* obj, UiContainerArgs *args, UiBoxContainerType type) { UiObject* current = uic_current_obj(obj); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); Grid grid = Grid(); current->container->Add(grid, true); @@ -78,18 +79,18 @@ ui_context_add_widget_destructor(current->ctx, widget); UiObject* newobj = uic_object_new(obj, widget); - newobj->container = new UiBoxContainer(grid, type, args.margin, args.spacing); + newobj->container = new UiBoxContainer(grid, type, args->margin, args->spacing); ui_context_add_container_destructor(current->ctx, newobj->container); uic_obj_add(obj, newobj); return widget; } -UIWIDGET ui_vbox_create(UiObject* obj, UiContainerArgs args) { +UIWIDGET ui_vbox_create(UiObject* obj, UiContainerArgs *args) { return ui_box(obj, args, UI_BOX_CONTAINER_VBOX); } -UIWIDGET ui_hbox_create(UiObject* obj, UiContainerArgs args) { +UIWIDGET ui_hbox_create(UiObject* obj, UiContainerArgs *args) { return ui_box(obj, args, UI_BOX_CONTAINER_HBOX); } @@ -161,9 +162,9 @@ // --------------------- UiGridContainer --------------------- -UIWIDGET ui_grid_create(UiObject* obj, UiContainerArgs args) { +UIWIDGET ui_grid_create(UiObject* obj, UiContainerArgs *args) { UiObject* current = uic_current_obj(obj); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); Grid grid = Grid(); current->container->Add(grid, true); @@ -173,7 +174,7 @@ ui_context_add_widget_destructor(current->ctx, widget); UiObject* newobj = uic_object_new(obj, widget); - newobj->container = new UiGridContainer(grid, args.margin, args.columnspacing, args.rowspacing); + newobj->container = new UiGridContainer(grid, args->margin, args->columnspacing, args->rowspacing); ui_context_add_container_destructor(current->ctx, newobj->container); uic_obj_add(obj, newobj); @@ -303,7 +304,7 @@ // --------------------- UI Frame --------------------- -UIWIDGET ui_frame_create(UiObject* obj, UiFrameArgs args) { +UIWIDGET ui_frame_create(UiObject* obj, UiFrameArgs *args) { // create a grid for the frame, that contains the label and a sub-frame Grid frame = Grid(); @@ -320,7 +321,7 @@ // label int row = 0; - if (args.label) { + if (args->label) { RowDefinition rowdefLabel = RowDefinition(); gl.GridUnitType = GridUnitType::Auto; gl.Value = 0; @@ -328,7 +329,7 @@ frame.RowDefinitions().Append(rowdefLabel); TextBlock label = TextBlock(); - wchar_t* wlabel = str2wstr(args.label, nullptr); + wchar_t* wlabel = str2wstr(args->label, nullptr); winrt::hstring hstr(wlabel); label.Text(hstr); free(wlabel); @@ -359,7 +360,7 @@ // add frame to the parent container UiObject* current = uic_current_obj(obj); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->Add(frame, true); UIElement elm = frame; @@ -368,18 +369,18 @@ // sub container UiContainer* ctn = nullptr; - switch (args.subcontainer) { + switch (args->subcontainer) { default: case UI_CONTAINER_VBOX: { - ctn = new UiBoxContainer(workarea, UI_BOX_CONTAINER_VBOX, args.margin, args.spacing); + ctn = new UiBoxContainer(workarea, UI_BOX_CONTAINER_VBOX, args->margin, args->spacing); break; } case UI_CONTAINER_HBOX: { - ctn = new UiBoxContainer(workarea, UI_BOX_CONTAINER_HBOX, args.margin, args.spacing); + ctn = new UiBoxContainer(workarea, UI_BOX_CONTAINER_HBOX, args->margin, args->spacing); break; } case UI_CONTAINER_GRID: { - ctn = new UiGridContainer(workarea, args.margin, args.columnspacing, args.rowspacing); + ctn = new UiGridContainer(workarea, args->margin, args->columnspacing, args->rowspacing); break; } } @@ -394,18 +395,18 @@ // --------------------- UI Expander --------------------- -UIWIDGET ui_expander_create(UiObject* obj, UiFrameArgs args) { +UIWIDGET ui_expander_create(UiObject* obj, UiFrameArgs *args) { Expander expander = Expander(); - if (args.label) { - wchar_t* wlabel = str2wstr(args.label, nullptr); + if (args->label) { + wchar_t* wlabel = str2wstr(args->label, nullptr); expander.Header(box_value(wlabel)); free(wlabel); } - expander.IsExpanded(args.isexpanded); + expander.IsExpanded(args->isexpanded); // add frame to the parent container UiObject* current = uic_current_obj(obj); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->Add(expander, true); UIElement elm = expander; @@ -416,18 +417,18 @@ expander.Content(content); UiContainer* ctn = nullptr; - switch (args.subcontainer) { + switch (args->subcontainer) { default: case UI_CONTAINER_VBOX: { - ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_VBOX, args.margin, args.spacing); + ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_VBOX, args->margin, args->spacing); break; } case UI_CONTAINER_HBOX: { - ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_HBOX, args.margin, args.spacing); + ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_HBOX, args->margin, args->spacing); break; } case UI_CONTAINER_GRID: { - ctn = new UiGridContainer(content, args.margin, args.columnspacing, args.rowspacing); + ctn = new UiGridContainer(content, args->margin, args->columnspacing, args->rowspacing); break; } } @@ -442,12 +443,12 @@ // --------------------- UI ScrolledWindow --------------------- -UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) { +UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) { ScrollViewer scrollW = ScrollViewer(); // add frame to the parent container UiObject* current = uic_current_obj(obj); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->Add(scrollW, true); UIElement elm = scrollW; @@ -459,18 +460,18 @@ scrollW.Content(content); UiContainer* ctn = nullptr; - switch (args.subcontainer) { + switch (args->subcontainer) { default: case UI_CONTAINER_VBOX: { - ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_VBOX, args.margin, args.spacing); + ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_VBOX, args->margin, args->spacing); break; } case UI_CONTAINER_HBOX: { - ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_HBOX, args.margin, args.spacing); + ctn = new UiBoxContainer(content, UI_BOX_CONTAINER_HBOX, args->margin, args->spacing); break; } case UI_CONTAINER_GRID: { - ctn = new UiGridContainer(content, args.margin, args.columnspacing, args.rowspacing); + ctn = new UiGridContainer(content, args->margin, args->columnspacing, args->rowspacing); break; } } @@ -520,21 +521,21 @@ return newobj; } -static UiTabView* tabview_pivot_create(UiObject* obj, UiTabViewArgs args) { +static UiTabView* tabview_pivot_create(UiObject* obj, UiTabViewArgs *args) { Pivot pivot = Pivot(); UiPivotTabView* tabview = new UiPivotTabView(obj, pivot, args); return tabview; } -UiPivotTabView::UiPivotTabView(UiObject* obj, Pivot pivot, UiTabViewArgs args) { +UiPivotTabView::UiPivotTabView(UiObject* obj, Pivot pivot, UiTabViewArgs *args) { this->current = obj; this->pivot = pivot; - this->subcontainer = args.subcontainer; - this->margin = args.margin; - this->spacing = args.spacing; - this->columnspacing = args.columnspacing; - this->rowspacing = args.rowspacing; + this->subcontainer = args->subcontainer; + this->margin = args->margin; + this->spacing = args->spacing; + this->columnspacing = args->columnspacing; + this->rowspacing = args->rowspacing; } UiObject* UiPivotTabView::AddTab(const char* label, int index) { @@ -568,7 +569,7 @@ } -static UiTabView* tabview_invisible_create(UiObject *obj, UiTabViewArgs args) { +static UiTabView* tabview_invisible_create(UiObject *obj, UiTabViewArgs *args) { Grid container = Grid(); container.HorizontalAlignment(HorizontalAlignment::Stretch); container.VerticalAlignment(VerticalAlignment::Stretch); @@ -576,14 +577,14 @@ return tabview; } -UiInvisibleTabView::UiInvisibleTabView(UiObject* obj, Grid container, UiTabViewArgs args) { +UiInvisibleTabView::UiInvisibleTabView(UiObject* obj, Grid container, UiTabViewArgs *args) { this->current = obj; this->container = container; - this->subcontainer = args.subcontainer; - this->margin = args.margin; - this->spacing = args.spacing; - this->columnspacing = args.columnspacing; - this->rowspacing = args.rowspacing; + this->subcontainer = args->subcontainer; + this->margin = args->margin; + this->spacing = args->spacing; + this->columnspacing = args->columnspacing; + this->rowspacing = args->rowspacing; this->currentIndex = -1; GridLength gl; @@ -638,7 +639,7 @@ } -static UiTabView* tabview_main_create(UiObject* obj, UiTabViewArgs args) { +static UiTabView* tabview_main_create(UiObject* obj, UiTabViewArgs *args) { TabView tabview = TabView(); tabview.IsAddTabButtonVisible(false); //tabview.CanDragTabs(false); @@ -648,14 +649,14 @@ return uitabview; } -UiMainTabView::UiMainTabView(UiObject* obj, TabView tabview, UiTabViewArgs args) { +UiMainTabView::UiMainTabView(UiObject* obj, TabView tabview, UiTabViewArgs *args) { this->current = obj; this->tabview = tabview; - this->subcontainer = args.subcontainer; - this->margin = args.margin; - this->spacing = args.spacing; - this->columnspacing = args.columnspacing; - this->rowspacing = args.rowspacing; + this->subcontainer = args->subcontainer; + this->margin = args->margin; + this->spacing = args->spacing; + this->columnspacing = args->columnspacing; + this->rowspacing = args->rowspacing; } UiObject* UiMainTabView::AddTab(const char* label, int index) { @@ -691,7 +692,7 @@ } -static UiTabView* tabview_navigationview_create(UiObject* obj, UiTabViewArgs args, UiTabViewType type) { +static UiTabView* tabview_navigationview_create(UiObject* obj, UiTabViewArgs *args, UiTabViewType type) { NavigationView navigationview = NavigationView(); UiNavigationTabView* tabview = new UiNavigationTabView(obj, navigationview, args, type); navigationview.IsBackButtonVisible(NavigationViewBackButtonVisible::Collapsed); @@ -700,14 +701,14 @@ return tabview; } -UiNavigationTabView::UiNavigationTabView(UiObject* obj, NavigationView navigationview, UiTabViewArgs args, UiTabViewType type) { +UiNavigationTabView::UiNavigationTabView(UiObject* obj, NavigationView navigationview, UiTabViewArgs *args, UiTabViewType type) { this->current = obj; this->navigationview = navigationview; this->type = type; - this->margin = args.margin; - this->spacing = args.spacing; - this->columnspacing = args.columnspacing; - this->rowspacing = args.rowspacing; + this->margin = args->margin; + this->spacing = args->spacing; + this->columnspacing = args->columnspacing; + this->rowspacing = args->rowspacing; if (type == UI_TABVIEW_NAVIGATION_TOP) { navigationview.PaneDisplayMode(NavigationViewPaneDisplayMode::Top); @@ -773,8 +774,8 @@ tabview->Select(value); } -UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) { - UiTabViewType type = args.tabview == UI_TABVIEW_DEFAULT ? UI_TABVIEW_NAVIGATION_TOP2 : args.tabview; +UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) { + UiTabViewType type = args->tabview == UI_TABVIEW_DEFAULT ? UI_TABVIEW_NAVIGATION_TOP2 : args->tabview; UiTabView* tabview = nullptr; switch (type) { default: { @@ -806,7 +807,7 @@ // add frame to the parent container UiObject* current = uic_current_obj(obj); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->Add(tabview->GetFrameworkElement(), true); UIElement elm = tabview->GetFrameworkElement(); @@ -817,7 +818,7 @@ // TODO: add tabview destructor // bind variable - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER); if (var) { UiInteger *i = (UiInteger*)var->value; i->obj = tabview; @@ -861,28 +862,28 @@ // TODO: replace placeholder implementation -UIEXPORT UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) { +UIEXPORT UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) { UiContainerArgs boxargs = { }; boxargs.fill = UI_OFF; - return ui_hbox_create(obj, boxargs); + return ui_hbox_create(obj, &boxargs); } UIEXPORT void ui_headerbar_start_create(UiObject *obj) { UiContainerArgs boxargs = { }; boxargs.fill = UI_OFF; - ui_hbox_create(obj, boxargs); + ui_hbox_create(obj, &boxargs); } UIEXPORT void ui_headerbar_center_create(UiObject *obj) { UiContainerArgs boxargs = { }; boxargs.fill = UI_OFF; - ui_hbox_create(obj, boxargs); + ui_hbox_create(obj, &boxargs); } UIEXPORT void ui_headerbar_end_create(UiObject *obj) { UiContainerArgs boxargs = { }; boxargs.fill = UI_OFF; - ui_hbox_create(obj, boxargs); + ui_hbox_create(obj, &boxargs); }