summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-01 19:15:03 -0400
committerPietro Gagliardi <[email protected]>2014-08-01 19:15:03 -0400
commit785d6ac4fd6d60113c0ad37b9b5cfbbe5b7f4abc (patch)
tree901fbeaee1ba4b9434519f04738f3d66e95a3980
parentb31ce95b3315c2b6567ed96c3e424e5c2a5e67f4 (diff)
Added a function to the Windows backend to keep track of text length. This will be important for sizing purposes.
-rw-r--r--redo/sizing_windows.c21
-rw-r--r--redo/winapi_windows.h3
2 files changed, 24 insertions, 0 deletions
diff --git a/redo/sizing_windows.c b/redo/sizing_windows.c
index 133cbcc..e6f27a6 100644
--- a/redo/sizing_windows.c
+++ b/redo/sizing_windows.c
@@ -38,3 +38,24 @@ void moveWindow(HWND hwnd, int x, int y, int width, int height)
if (MoveWindow(hwnd, x, y, width, height, TRUE) == 0)
xpanic("error setting window/control rect", GetLastError());
}
+
+LONG controlTextLength(HWND hwnd, LPWSTR text)
+{
+ HDC dc;
+ HFONT prev;
+ SIZE size;
+
+ dc = GetDC(hwnd);
+ if (dc == NULL)
+ xpanic("error getting DC of control for text length", GetLastError());
+ prev = SelectObject(dc, controlFont);
+ if (prev == NULL)
+ xpanic("error setting control font to DC for text length", GetLastError());
+ if (GetTextExtentPoint32W(dc, text, wcslen(text), &size) == 0)
+ xpanic("error actually getting text length", GetLastError());
+ if (SelectObject(dc, prev) != controlFont)
+ xpanic("error restoring previous control font to DC for text length", GetLastError());
+ if (ReleaseDC(hwnd, dc) == 0)
+ xpanic("error releasing DC of control for text length", GetLastError());
+ return size.cx;
+}
diff --git a/redo/winapi_windows.h b/redo/winapi_windows.h
index 4bd035c..12e5ddf 100644
--- a/redo/winapi_windows.h
+++ b/redo/winapi_windows.h
@@ -18,6 +18,8 @@
#include <commctrl.h>
#include <stdint.h>
#include <uxtheme.h>
+#include <string.h>
+#include <wchar.h>
/* global messages unique to everything */
enum {
@@ -68,6 +70,7 @@ extern int baseX;
extern int baseY;
extern void calculateBaseUnits(HWND);
extern void moveWindow(HWND, int, int, int, int);
+extern LONG controlTextLength(HWND, LPWSTR);
/* window_windows.c */
extern DWORD makeWindowWindowClass(char **);