summaryrefslogtreecommitdiff
path: root/alf/alf.cpp
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-16 18:17:56 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-16 18:17:56 +0200
commit536ea04c34ba761d7031eeabb6d50adab0f0f2bd (patch)
tree7def1b680705497636c2f5e5649c0ffeb477539c /alf/alf.cpp
parent5cbb664bd49cd2b9c035ccfc3024aa436d28c36c (diff)
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
Diffstat (limited to 'alf/alf.cpp')
-rw-r--r--alf/alf.cpp159
1 files changed, 98 insertions, 61 deletions
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(&params, 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, &params);
-}
-
-void ALF_AddWidgetEx(HWND win, const ALFWidgetLayoutParams* params)
-{
- SendMessage(win, ALF_WM_ADDWIDGET, 0, (LPARAM)params);
+ SendMessage(win, ALF_WM_ADDWIDGET, 0, (LPARAM)&params);
}
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