From f11b1141fbda7b236982b1ecfad160c80736b07b Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Fri, 14 Nov 2014 22:41:25 -0500 Subject: [PATCH] Stored the checkbox width/height in the new Windows Table. This will be needed for hit-testing checkboxes. --- wintable/imagelist_windows.c | 9 ++++----- wintable/main.c | 8 +++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/wintable/imagelist_windows.c b/wintable/imagelist_windows.c index c97fc0f..2527d16 100644 --- a/wintable/imagelist_windows.c +++ b/wintable/imagelist_windows.c @@ -148,9 +148,8 @@ static HBITMAP makeCheckboxImageListEntry(HDC dc, int width, int height, int cbS return bitmap; } -static HIMAGELIST newCheckboxImageList(HWND hwnddc, void (*sizefunc)(HDC, int *, int *, HTHEME), void (*drawfunc)(HDC, RECT *, int, HTHEME), HTHEME theme) +static HIMAGELIST newCheckboxImageList(HWND hwnddc, void (*sizefunc)(HDC, int *, int *, HTHEME), void (*drawfunc)(HDC, RECT *, int, HTHEME), HTHEME theme, int *width, int *height) { - int width, height; int cbState; HDC dc; HIMAGELIST il; @@ -176,7 +175,7 @@ static HIMAGELIST newCheckboxImageList(HWND hwnddc, void (*sizefunc)(HDC, int *, return il; } -HIMAGELIST makeCheckboxImageList(HWND hwnddc, HTHEME *theme) +HIMAGELIST makeCheckboxImageList(HWND hwnddc, HTHEME *theme, int *width, int *height) { if (*theme != NULL) { HRESULT res; @@ -190,7 +189,7 @@ HIMAGELIST makeCheckboxImageList(HWND hwnddc, HTHEME *theme) if (*theme == NULL) // try to open the theme *theme = OpenThemeData(hwnddc, L"button"); if (*theme != NULL) // use the theme - return newCheckboxImageList(hwnddc, themeSize, themeImage, *theme); + return newCheckboxImageList(hwnddc, themeSize, themeImage, *theme, width, height); // couldn't open; fall back - return newCheckboxImageList(hwnddc, dfcSize, dfcImage, *theme); + return newCheckboxImageList(hwnddc, dfcSize, dfcImage, *theme, width, height); } diff --git a/wintable/main.c b/wintable/main.c index 86d8ada..edea173 100644 --- a/wintable/main.c +++ b/wintable/main.c @@ -16,7 +16,7 @@ #include #include #include -extern HIMAGELIST makeCheckboxImageList(HWND hwnddc, HTHEME *theme); +extern HIMAGELIST makeCheckboxImageList(HWND hwnddc, HTHEME *theme, int *, int *); enum { checkboxStateChecked = 1 << 0, checkboxStateHot = 1 << 1, @@ -81,6 +81,8 @@ struct table { HTHEME theme; int *columnTypes; intptr_t focusedColumn; + int checkboxWidth; + int checkboxHeight; }; static LONG rowHeight(struct table *t) @@ -684,7 +686,7 @@ if (ImageList_AddIcon(t->imagelist, icon) == -1)abort(); if (ImageList_GetIconSize(t->imagelist, &unused, &(t->imagelistHeight)) == 0)abort(); } } - t->checkboxes = makeCheckboxImageList(t->hwnd, &(t->theme)); + t->checkboxes = makeCheckboxImageList(t->hwnd, &(t->theme), &(t->checkboxWidth), &(t->checkboxHeight)); t->focusedColumn = -1; SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR) t); } @@ -758,7 +760,7 @@ if (ImageList_GetIconSize(t->imagelist, &unused, &(t->imagelistHeight)) == 0)abo case WM_THEMECHANGED: if (ImageList_Destroy(t->checkboxes) == 0) abort(); - t->checkboxes = makeCheckboxImageList(t->hwnd, &(t->theme)); + t->checkboxes = makeCheckboxImageList(t->hwnd, &(t->theme), &(t->checkboxWidth), &(t->checkboxHeight)); resize(t); // TODO needed? redrawAll(t); // now defer back to DefWindowProc() in case other things are needed