[teklib-general] teklib: Windows display completed; Visual, Displays: Added TVisu...
Timm S. Mueller
tmueller at neoscientists.org
Tue Mar 17 12:13:22 CET 2009
details: http://hg.teklib.org/teklib/rev/35c8e375a710
changeset: 256:35c8e375a710
user: Timm S. Mueller <tmueller at neoscientists.org>
date: Tue Mar 17 12:03:06 2009 +0100
description:
Windows display completed; Visual, Displays: Added TVisual_UserData, which is
propagated in input messages; Visual: Added an option to pass user-allocated
command reply and input message ports; X11 Display: added an exemplary stdin
reader, which translates lines coming in via stdin to user messages (but this
has been disabled by default)
diffs (truncated from 2201 to 100 lines):
diff -r 8d5ad9ed061b -r 35c8e375a710 src/display_directfb/display_dfb_api.c
--- a/src/display_directfb/display_dfb_api.c Sun Feb 22 18:15:13 2009 +0100
+++ b/src/display_directfb/display_dfb_api.c Tue Mar 17 12:03:06 2009 +0100
@@ -26,6 +26,7 @@
req->tvr_Op.OpenWindow.Window = v;
if (v == TNULL) return;
+ v->userdata = TGetTag(tags, TVisual_UserData, TNULL);
v->eventmask = (TUINT) TGetTag(tags, TVisual_EventMask, 0);
TInitList(&v->penlist);
@@ -193,6 +194,8 @@
DFBWINDOW *v = req->tvr_Op.SetInput.Window;
req->tvr_Op.SetInput.OldMask = v->eventmask;
v->eventmask = req->tvr_Op.SetInput.Mask;
+ /* spool out possible remaining messages: */
+ dfb_sendimessages(mod, TFALSE);
}
/*****************************************************************************/
@@ -510,6 +513,9 @@
{
default:
return TTRUE;
+ case TVisual_UserData:
+ *((TTAG *) item->tti_Value) = v->userdata;
+ break;
case TVisual_Width:
*((TINT *) item->tti_Value) = v->winwidth;
break;
diff -r 8d5ad9ed061b -r 35c8e375a710 src/display_directfb/display_dfb_mod.c
--- a/src/display_directfb/display_dfb_mod.c Sun Feb 22 18:15:13 2009 +0100
+++ b/src/display_directfb/display_dfb_mod.c Tue Mar 17 12:03:06 2009 +0100
@@ -25,7 +25,6 @@
static TBOOL processkey(DFBDISPLAY *mod, DFBWINDOW *v, DFBWindowEvent *ev, TBOOL keydown);
TBOOL getimsg(DFBDISPLAY *mod, DFBWINDOW *v, TIMSG **msgptr, TUINT type);
TVOID genimsg(DFBDISPLAY *mod, DFBWINDOW *vold, DFBWINDOW *vnew, TUINT type);
-static void dfb_sendimessages(DFBDISPLAY *mod, TBOOL do_interval);
static const TMFPTR
dfb_vectors[DFBDISPLAY_NUMVECTORS] =
@@ -984,6 +983,7 @@
msg = TExecAllocMsg0(mod->dfb_ExecBase, sizeof(TIMSG));
if (msg)
{
+ msg->timsg_UserData = v->userdata;
msg->timsg_Type = type;
msg->timsg_Qualifier = mod->dfb_KeyQual;
msg->timsg_MouseX = mod->dfb_MouseX;
@@ -996,8 +996,7 @@
return TFALSE;
}
-static void
-dfb_sendimessages(DFBDISPLAY *mod, TBOOL do_interval)
+LOCAL void dfb_sendimessages(DFBDISPLAY *mod, TBOOL do_interval)
{
struct TNode *next, *node = mod->dfb_vlist.tlh_Head;
for (; (next = node->tln_Succ); node = next)
diff -r 8d5ad9ed061b -r 35c8e375a710 src/display_directfb/display_dfb_mod.h
--- a/src/display_directfb/display_dfb_mod.h Sun Feb 22 18:15:13 2009 +0100
+++ b/src/display_directfb/display_dfb_mod.h Tue Mar 17 12:03:06 2009 +0100
@@ -222,6 +222,10 @@
/* current active font */
TAPTR curfont;
+
+ /* userdata attached to this window, also propagated in messages: */
+ TTAG userdata;
+
} DFBWINDOW;
struct DFBPen
@@ -246,6 +250,7 @@
LOCAL TBOOL dfb_init(DFBDISPLAY *mod, TTAGITEM *tags);
LOCAL void dfb_exit(DFBDISPLAY *mod);
+LOCAL void dfb_sendimessages(DFBDISPLAY *mod, TBOOL do_interval);
LOCAL void dfb_wake(DFBDISPLAY *inst);
LOCAL void dfb_openvisual(DFBDISPLAY *mod, struct TVRequest *req);
LOCAL void dfb_closevisual(DFBDISPLAY *mod, struct TVRequest *req);
diff -r 8d5ad9ed061b -r 35c8e375a710 src/display_windows/display_win_api.c
--- a/src/display_windows/display_win_api.c Sun Feb 22 18:15:13 2009 +0100
+++ b/src/display_windows/display_win_api.c Tue Mar 17 12:03:06 2009 +0100
@@ -29,6 +29,11 @@
{
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)
@@ -38,23 +43,80 @@
win->fbv_Width = (TUINT) TGetTag(tags, TVisual_Width, FB_DEF_WIDTH);
win->fbv_Height = (TUINT) TGetTag(tags, TVisual_Height, FB_DEF_HEIGHT);
More information about the teklib-general
mailing list