From 536ea04c34ba761d7031eeabb6d50adab0f0f2bd Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Thu, 16 Apr 2020 18:17:56 +0200 Subject: rework grid layout Fractional expand is now supported like Qt, and also per row/column instead of as a widget attribute. Instead of margins, you're now supposed to use empty rows/columns instead. Spacer is also gone, use empty rows/columns with minimum size. Layout engine is prepared to directly calculate edit, button, etc. sizes without subclassing these controls --- alf/alf.cpp | 159 +++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 61 deletions(-) (limited to 'alf/alf.cpp') diff --git a/alf/alf.cpp b/alf/alf.cpp index f914e55..de8d9c3 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -258,6 +258,7 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) } if (msg == WM_CREATE) { + ALF_UpdateFontsPriv(hwnd, priv); if (priv->vtbl->create) { priv->vtbl->create(priv->closure, hwnd); } @@ -266,7 +267,6 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) if (!alwaysUnderline) { SendMessage(hwnd, WM_UPDATEUISTATE, MAKEWPARAM(UIS_INITIALIZE, 0), 0); } - ALF_UpdateFontsPriv(hwnd, priv); ALF_Layout_Apply(&priv->layout, hwnd); } @@ -340,9 +340,9 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) } void -ALF_AddWidget(HWND win, UINT x, UINT y, HWND widget, UINT minWidth, UINT minHeight, DWORD flags) +ALF_AddWidget(HWND win, int x, int y, HWND widget, int minWidth, int minHeight, DWORD flags) { - ALFWidgetLayoutParams params; + ALFAddWidgetParams params; ZeroMemory(¶ms, sizeof(params)); params.hwnd = widget; params.x = x; @@ -350,12 +350,7 @@ ALF_AddWidget(HWND win, UINT x, UINT y, HWND widget, UINT minWidth, UINT minHeig params.width = minWidth; params.height = minHeight; params.flags = flags; - ALF_AddWidgetEx(win, ¶ms); -} - -void ALF_AddWidgetEx(HWND win, const ALFWidgetLayoutParams* params) -{ - SendMessage(win, ALF_WM_ADDWIDGET, 0, (LPARAM)params); + SendMessage(win, ALF_WM_ADDWIDGET, 0, (LPARAM)¶ms); } static LRESULT CALLBACK @@ -398,7 +393,6 @@ ALF_Initialize(void) ALF_RegisterComboClass(); ALF_RegisterPanelClass(); - ALF_RegisterSpacerClass(); ALF_RegisterLabelClass(); ALF_RegisterNotebookClass(); @@ -423,7 +417,6 @@ ALF_UnInitialize(void) UnregisterClass(_alf_comboClass, ALF_HINSTANCE); UnregisterClass(_alf_panelClass, ALF_HINSTANCE); - UnregisterClass(_alf_spacerClass, ALF_HINSTANCE); UnregisterClass(_alf_labelClass, ALF_HINSTANCE); UnregisterClass(_alf_notebookClass, ALF_HINSTANCE); @@ -709,84 +702,128 @@ ALF_WidgetText(HWND parent, WORD id) DWORD ALF_WidgetLayoutFlags(HWND parent, HWND widget) { - ALFWidgetLayoutParams p; - if (SendMessage(parent, ALF_WM_GETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p)) { - return p.flags; - } else { - return 0; - } + return (DWORD)SendMessage(parent, ALF_WM_LYT_GETWDGTFLAGS, (WPARAM)widget, 0); } BOOL ALF_SetWidgetLayoutFlags(HWND parent, HWND widget, DWORD flags) { - ALFWidgetLayoutParams p; - if (SendMessage(parent, ALF_WM_GETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p)) { - p.flags = flags; - return SendMessage(parent, ALF_WM_SETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p); - } + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETWDGTFLAGS, (WPARAM)widget, (LPARAM)flags); +} - return FALSE; +BOOL +ALF_WidgetLayoutPosition(HWND parent, HWND widget, int *pX, int *pY) +{ + POINT p = { 0, 0 }; + + LRESULT r = SendMessage(parent, ALF_WM_LYT_GETWIDGETPOS, (WPARAM)widget, (LPARAM)&p); + *pX = p.x; + *pY = p.y; + return (BOOL)r; } BOOL -ALF_WidgetLayoutPosition(HWND parent, HWND widget, UINT *pX, UINT *pY) +ALF_SetWidgetLayoutPosition(HWND parent, HWND widget, int x, int y) { - ALFWidgetLayoutParams p; - if (SendMessage(parent, ALF_WM_GETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p)) { - *pX = p.x; - *pY = p.y; - return TRUE; - } else { - return FALSE; - } + POINT p = { x, y }; + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETWIDGETPOS, (WPARAM)widget, (LPARAM)&p); } BOOL -ALF_SetWidgetLayoutPosition(HWND parent, HWND widget, UINT x, UINT y) +ALF_WidgetLayoutMinSize(HWND parent, HWND widget, int *pWidth, int *pHeight) { - ALFWidgetLayoutParams p; - if (SendMessage(parent, ALF_WM_GETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p)) { - p.x = x; - p.y = y; - return SendMessage(parent, ALF_WM_SETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p); - } + SIZE s = { 0, 0 }; + LRESULT r = SendMessage(parent, ALF_WM_LYT_GETWIDGTSIZE, (WPARAM)widget, (LPARAM)&s); + *pWidth = s.cx; + *pHeight = s.cy; + return (BOOL)r; +} + +BOOL +ALF_SetWidgetLayoutMinSize(HWND parent, HWND widget, int width, int height) +{ + SIZE s = { width, height }; + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETWIDGTSIZE, (WPARAM)widget, (LPARAM)&s); +} - return FALSE; +HWND +ALF_WidgetAtLayoutPosition(HWND parent, int x, int y) +{ + int xy[2] = { x, y }; + + return (HWND)SendMessage(parent, ALF_WM_GETWIDGETATPOS, 0, (LPARAM)&xy); +} + +int +ALF_LayoutRowMinSize(HWND parent, int rowno) +{ + return (int)SendMessage(parent, ALF_WM_LYT_GETROWSIZE, (WPARAM)rowno, 0); } BOOL -ALF_WidgetLayoutSize(HWND parent, HWND widget, UINT *pCptWidth, UINT *pCptHeight) +ALF_LayoutSetRowMinSize(HWND parent, int rowno, int rowsize) { - ALFWidgetLayoutParams p; - if (SendMessage(parent, ALF_WM_GETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p)) { - *pCptWidth = p.width; - *pCptHeight = p.height; - return TRUE; - } else { - return FALSE; - } + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETROWSIZE, (WPARAM)rowno, (LPARAM)rowsize); +} + +int +ALF_LayoutColumnMinSize(HWND parent, int colno) +{ + return (int)SendMessage(parent, ALF_WM_LYT_GETCOLSIZE, (WPARAM)colno, 0); } BOOL -ALF_SetWidgetLayoutSize(HWND parent, HWND widget, UINT cptWidth, UINT cptHeight) +ALF_LayoutSetColumnMinSize(HWND parent, int colno, int colsize) { - ALFWidgetLayoutParams p; - if (SendMessage(parent, ALF_WM_GETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p)) { - p.width = cptWidth; - p.height = cptHeight; - return SendMessage(parent, ALF_WM_SETLAYOUTPARAMS, (WPARAM)widget, (LPARAM)&p); - } + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETCOLSIZE, (WPARAM)colno, (LPARAM)colsize); +} - return FALSE; +DWORD +ALF_LayoutRowFlags(HWND parent, int rowno) +{ + return (DWORD)SendMessage(parent, ALF_WM_LYT_GETROWFLAGS, (WPARAM)rowno, 0); } -HWND -ALF_WidgetAtLayoutPosition(HWND parent, UINT x, UINT y) +BOOL +ALF_LayoutSetRowFlags(HWND parent, int rowno, DWORD flags) { - UINT xy[2] = { x, y }; + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETROWFLAGS, (WPARAM)rowno, (LPARAM)flags); +} - return (HWND)SendMessage(parent, ALF_WM_GETWIDGETATPOS, 0, (LPARAM)&xy); +DWORD +ALF_LayoutColumnFlags(HWND parent, int colno) +{ + return (DWORD)SendMessage(parent, ALF_WM_LYT_GETCOLFLAGS, (WPARAM)colno, 0); +} + +BOOL +ALF_LayoutSetColumnFlags(HWND parent, int colno, DWORD flags) +{ + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETCOLFLAGS, (WPARAM)colno, (LPARAM)flags); +} + +int +ALF_LayoutRowExpandNumerator(HWND parent, int rowno) +{ + return (int)SendMessage(parent, ALF_WM_LYT_GETROWEXPAND, (WPARAM)rowno, 0); +} + +BOOL +ALF_LayoutSetRowExpandNumerator(HWND parent, int rowno, int expand) +{ + return (BOOL)SendMessage(parent, ALF_WM_LYT_SETROWEXPAND, (WPARAM)rowno, (LPARAM)expand); +} + +int +ALF_LayoutColumnExpandNumerator(HWND parent, int colno) +{ + return (int)SendMessage(parent, ALF_WM_LYT_GETCOLEXPAND, (WPARAM)colno, 0); +} + +BOOL +ALF_LayoutSetColumnExpandNumerator(HWND parent, int colno, int expand) +{ + return (int)SendMessage(parent, ALF_WM_LYT_SETCOLEXPAND, (WPARAM)colno, (LPARAM)expand); } BOOL -- cgit v1.2.3