[tekui-devel] tekui: Windows display driver now provides most basic functionality
Timm S. Mueller
tmueller at schulze-mueller.de
Sun Mar 15 23:00:01 CET 2009
details: http://hg.teklib.org/tekui/rev/db91666256b7
changeset: 55:db91666256b7
user: Timm S. Mueller <tmueller at schulze-mueller.de>
date: Sun Mar 15 22:50:42 2009 +0100
description:
Windows display driver now provides most basic functionality
diffs (truncated from 963 to 100 lines):
diff -r d0ef472e2599 -r db91666256b7 src/display_windows/display_win_api.c
--- a/src/display_windows/display_win_api.c Sat Mar 14 22:04:48 2009 +0100
+++ b/src/display_windows/display_win_api.c Sun Mar 15 22:50:42 2009 +0100
@@ -30,8 +30,10 @@
RECT wrect;
BITMAPINFOHEADER *bmi;
TUINT style;
+ TUINT exstyle;
TIMSG *imsg;
const char *classname;
+ TSTRPTR title;
win = TAlloc0(mod->fbd_MemMgr, sizeof(WINWINDOW));
if (win == TNULL)
@@ -48,36 +50,61 @@
win->fbv_Borderless = TGetTag(tags, TVisual_Borderless, TFALSE);
win->fbv_UserData = TGetTag(tags, TVisual_UserData, TNULL);
+ win->fbv_MinWidth = (TINT) TGetTag(tags, TVisual_MinWidth, (TTAG) -1);
+ win->fbv_MinHeight = (TINT) TGetTag(tags, TVisual_MinHeight, (TTAG) -1);
+ win->fbv_MaxWidth = (TINT) TGetTag(tags, TVisual_MaxWidth, (TTAG) -1);
+ win->fbv_MaxHeight = (TINT) TGetTag(tags, TVisual_MaxHeight, (TTAG) -1);
+
if (win->fbv_Borderless)
{
- style = WS_OVERLAPPEDWINDOW;
- classname = FB_DISPLAY_CLASSNAME; /* TODO: own class */
+ style = (WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS) & ~WS_BORDER;
+ classname = FB_DISPLAY_CLASSNAME_POPUP;
+ title = NULL;
+ exstyle = WS_EX_TOPMOST | WS_EX_TOOLWINDOW;
}
else
{
style = WS_OVERLAPPEDWINDOW;
classname = FB_DISPLAY_CLASSNAME;
+ title = win->fbv_Title;
+ exstyle = 0;
+ }
+
+ wrect.left = wrect.right = wrect.top = wrect.bottom = 0;
+ AdjustWindowRectEx(&wrect, style, FALSE, exstyle);
+ win->fbv_BorderWidth = wrect.right - wrect.left;
+ win->fbv_BorderHeight = wrect.bottom - wrect.top;
+ win->fbv_BorderLeft = -wrect.left;
+ win->fbv_BorderTop = -wrect.top;
+
+ if (!win->fbv_Borderless)
+ {
+ TINT m1, m2, m3, m4;
+ win_getminmax(win, &m1, &m2, &m3, &m4, TTRUE);
+ win->fbv_Width = TCLAMP(m1, win->fbv_Width, m3);
+ win->fbv_Height = TCLAMP(m2, win->fbv_Height, m4);
}
if (win->fbv_Left != 0xffffffff && win->fbv_Top != 0xffffffff)
{
wrect.left = win->fbv_Left;
wrect.top = win->fbv_Top;
- wrect.right = win->fbv_Left + win->fbv_Width - 1;
- wrect.bottom = win->fbv_Top + win->fbv_Height - 1;
- if (!AdjustWindowRectEx(&wrect, style, FALSE, 0))
+ wrect.right = win->fbv_Left + win->fbv_Width;
+ wrect.bottom = win->fbv_Top + win->fbv_Height;
+ if (!AdjustWindowRectEx(&wrect, style, FALSE, exstyle))
break;
+
win->fbv_Left = wrect.left;
win->fbv_Top = wrect.top;
- win->fbv_HWnd = CreateWindowEx(0, classname,
- win->fbv_Title, style, win->fbv_Left, win->fbv_Top,
- wrect.right - wrect.left + 1, wrect.bottom - wrect.top + 1,
+ win->fbv_HWnd = CreateWindowEx(exstyle, classname,
+ title, style, win->fbv_Left, win->fbv_Top,
+ wrect.right - wrect.left, wrect.bottom - wrect.top,
(HWND) NULL, (HMENU) NULL, mod->fbd_HInst, (LPVOID) NULL);
}
else
{
- win->fbv_HWnd = CreateWindowEx(0, classname,
- win->fbv_Title, style, CW_USEDEFAULT, CW_USEDEFAULT,
+ win->fbv_HWnd = CreateWindowEx(exstyle, classname,
+ title, style, CW_USEDEFAULT, CW_USEDEFAULT,
win->fbv_Width, win->fbv_Height,
(HWND) NULL, (HMENU) NULL, mod->fbd_HInst, (LPVOID) NULL);
}
@@ -86,10 +113,10 @@
break;
GetWindowRect(win->fbv_HWnd, &wrect);
- win->fbv_Left = wrect.left;
- win->fbv_Top = wrect.top;
- win->fbv_Width = wrect.right - wrect.left + 1;
- win->fbv_Height = wrect.bottom - wrect.top + 1;
+ win->fbv_Left = wrect.left + win->fbv_BorderLeft;
+ win->fbv_Top = wrect.top + win->fbv_BorderHeight;
+ win->fbv_Width = wrect.right - wrect.left - win->fbv_BorderWidth;
+ win->fbv_Height = wrect.bottom - wrect.top - win->fbv_BorderHeight;
SetWindowLong(win->fbv_HWnd, GWL_USERDATA, (LONG) win);
More information about the tekui-devel
mailing list