[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