diff options
| author | Pietro Gagliardi <[email protected]> | 2015-04-16 20:33:28 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2015-04-16 20:33:28 -0400 |
| commit | e34c561ed5bedeb180437ec165882b98d70d38c1 (patch) | |
| tree | d095e5db16d7a23e883526c8c1d3c524639c97cf /new/windows/button.c | |
| parent | de9d72299fb89a8b6cdc8963cd6b6ae708a81e80 (diff) | |
Split the rewrite into a new repository.
Diffstat (limited to 'new/windows/button.c')
| -rw-r--r-- | new/windows/button.c | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/new/windows/button.c b/new/windows/button.c deleted file mode 100644 index fd7afa3..0000000 --- a/new/windows/button.c +++ /dev/null @@ -1,112 +0,0 @@ -// 7 april 2015 -#include "uipriv_windows.h" - -struct button { - uiButton b; - void (*onClicked)(uiButton *, void *); - void *onClickedData; -}; - -static BOOL onWM_COMMAND(uiControl *c, WORD code, LRESULT *lResult) -{ - struct button *b = (struct button *) c; - - if (code != BN_CLICKED) - return FALSE; - (*(b->onClicked))(uiButton(b), b->onClickedData); - *lResult = 0; - return TRUE; -} - -static BOOL onWM_NOTIFY(uiControl *c, NMHDR *nm, LRESULT *lResult) -{ - return FALSE; -} - -static void onWM_DESTROY(uiControl *c) -{ - struct button *b = (struct button *) c; - - uiFree(b); -} - -// from http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing -#define buttonHeight 14 - -static void preferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *height) -{ - HWND hwnd; - SIZE size; - - hwnd = uiControlHWND(c); - - // try the comctl32 version 6 way - size.cx = 0; // explicitly ask for ideal size - size.cy = 0; - if (SendMessageW(hwnd, BCM_GETIDEALSIZE, 0, (LPARAM) (&size)) != FALSE) { - *width = size.cx; - *height = size.cy; - return; - } - - // that didn't work; fall back to using Microsoft's metrics - // Microsoft says to use a fixed width for all buttons; this isn't good enough - // use the text width instead, with some edge padding - *width = uiWindowsWindowTextWidth(hwnd) + (2 * GetSystemMetrics(SM_CXEDGE)); - *height = uiDlgUnitsToY(buttonHeight, d->sys->baseY); -} - -static void defaultOnClicked(uiButton *b, void *data) -{ - // do nothing -} - -static char *getText(uiButton *b) -{ - return uiWindowsControlText(uiControl(b)); -} - -static void setText(uiButton *b, const char *text) -{ - uiWindowsControlSetText(uiControl(b), text); -} - -static void setOnClicked(uiButton *bb, void (*f)(uiButton *, void *), void *data) -{ - struct button *b = (struct button *) bb; - - b->onClicked = f; - b->onClickedData = data; -} - -uiButton *uiNewButton(const char *text) -{ - struct button *b; - uiWindowsNewControlParams p; - WCHAR *wtext; - - b = uiNew(struct button); - - p.dwExStyle = 0; - p.lpClassName = L"button"; - wtext = toUTF16(text); - p.lpWindowName = wtext; - p.dwStyle = BS_PUSHBUTTON | WS_TABSTOP; - p.hInstance = hInstance; - p.useStandardControlFont = TRUE; - p.onWM_COMMAND = onWM_COMMAND; - p.onWM_NOTIFY = onWM_NOTIFY; - p.onWM_DESTROY = onWM_DESTROY; - uiWindowsNewControl(uiControl(b), &p); - uiFree(wtext); - - b->onClicked = defaultOnClicked; - - uiControl(b)->PreferredSize = preferredSize; - - uiButton(b)->Text = getText; - uiButton(b)->SetText = setText; - uiButton(b)->OnClicked = setOnClicked; - - return uiButton(b); -} |
