aboutsummaryrefslogtreecommitdiff
path: root/src/libui_sdl/libui/windows/label.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libui_sdl/libui/windows/label.cpp')
-rw-r--r--src/libui_sdl/libui/windows/label.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/libui_sdl/libui/windows/label.cpp b/src/libui_sdl/libui/windows/label.cpp
new file mode 100644
index 0000000..d74b7d1
--- /dev/null
+++ b/src/libui_sdl/libui/windows/label.cpp
@@ -0,0 +1,57 @@
+// 11 april 2015
+#include "uipriv_windows.hpp"
+
+struct uiLabel {
+ uiWindowsControl c;
+ HWND hwnd;
+};
+
+uiWindowsControlAllDefaults(uiLabel)
+
+// via http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
+#define labelHeight 8
+
+static void uiLabelMinimumSize(uiWindowsControl *c, int *width, int *height)
+{
+ uiLabel *l = uiLabel(c);
+ uiWindowsSizing sizing;
+ int y;
+
+ *width = uiWindowsWindowTextWidth(l->hwnd);
+ y = labelHeight;
+ uiWindowsGetSizing(l->hwnd, &sizing);
+ uiWindowsSizingDlgUnitsToPixels(&sizing, NULL, &y);
+ *height = y;
+}
+
+char *uiLabelText(uiLabel *l)
+{
+ return uiWindowsWindowText(l->hwnd);
+}
+
+void uiLabelSetText(uiLabel *l, const char *text)
+{
+ uiWindowsSetWindowText(l->hwnd, text);
+ // changing the text might necessitate a change in the label's size
+ uiWindowsControlMinimumSizeChanged(uiWindowsControl(l));
+}
+
+uiLabel *uiNewLabel(const char *text)
+{
+ uiLabel *l;
+ WCHAR *wtext;
+
+ uiWindowsNewControl(uiLabel, l);
+
+ wtext = toUTF16(text);
+ l->hwnd = uiWindowsEnsureCreateControlHWND(0,
+ L"static", wtext,
+ // SS_LEFTNOWORDWRAP clips text past the end; SS_NOPREFIX avoids accelerator translation
+ // controls are vertically aligned to the top by default (thanks Xeek in irc.freenode.net/#winapi)
+ SS_LEFTNOWORDWRAP | SS_NOPREFIX,
+ hInstance, NULL,
+ TRUE);
+ uiFree(wtext);
+
+ return l;
+}