[teklib-general] teklib: work in progress: visual supports more than one window now

Franciska Schulze fschulze at neoscientists.org
Sun Sep 7 15:31:02 CEST 2008


details:   http://hg.teklib.org/teklib/rev/9c01d5093593
changeset: 197:9c01d5093593
user:      Franciska Schulze <fschulze at neoscientists.org>
date:      Mon May 19 12:30:42 2008 +0000
description:
work in progress: visual supports more than one window now

diffs (98 lines):

diff -r cacfac9b1738 -r 9c01d5093593 src/display_dfb/display_dfb_api.c
--- a/src/display_dfb/display_dfb_api.c	Sun May 18 16:56:39 2008 +0000
+++ b/src/display_dfb/display_dfb_api.c	Mon May 19 12:30:42 2008 +0000
@@ -76,17 +76,21 @@ dfb_openvisual(TMOD_DFB *mod, struct TVR
 
 	struct FontNode *fn;
 
+#if 0
 	if (!TISLISTEMPTY(&mod->dfb_vlist))
 	{
 		req->tvr_Op.OpenVisual.Instance = TNULL;
 		return;
 	}
+#endif
 
 	v = TExecAlloc0(exec, mod->dfb_MemMgr, sizeof(VISUAL));
 	req->tvr_Op.OpenVisual.Instance = v;
 	if (v == TNULL) return;
 
 	TInitList(&v->penlist);
+	v->bgpen = TVPEN_UNDEFINED;
+	v->fgpen = TVPEN_UNDEFINED;
 
 	TInitList(&v->imsgqueue);
 	v->imsgport = req->tvr_Op.OpenVisual.IMsgPort;
@@ -130,7 +134,7 @@ dfb_openvisual(TMOD_DFB *mod, struct TVR
 		{
 			if (v->winsurface->SetFont(v->winsurface, fn->font) == DFB_OK)
 			{
-				TDBPRINTF(TDB_ERROR,("Open success\n"));
+				TDBPRINTF(TDB_TRACE,("Add window: %p\n", v->window));
 				TAddTail(&mod->dfb_vlist, &v->node);
 
 				/* success: */
diff -r cacfac9b1738 -r 9c01d5093593 src/display_dfb/display_dfb_mod.c
--- a/src/display_dfb/display_dfb_mod.c	Sun May 18 16:56:39 2008 +0000
+++ b/src/display_dfb/display_dfb_mod.c	Mon May 19 12:30:42 2008 +0000
@@ -507,6 +507,7 @@ dfb_taskfunc(TAPTR task)
 	char buf[1];
 	struct timeval tv;
 	VISUAL *v;
+	struct TNode *node, *next;
 
 	/* interval time: 1/50s: */
 	TTIME intt = { 0, 20000 };
@@ -529,8 +530,14 @@ dfb_taskfunc(TAPTR task)
 			TExecReplyMsg(inst->dfb_ExecBase, req);
 		}
 
-		v = (VISUAL *) TFIRSTNODE(&inst->dfb_vlist);
-		v->winsurface->Flip(v->winsurface, NULL, 0);
+		node = inst->dfb_vlist.tlh_Head;
+		for (; (next = node->tln_Succ); node = next)
+		{
+			v = (VISUAL *) node;
+			v->winsurface->Flip(v->winsurface, NULL, 0);
+		}
+		//v = (VISUAL *) TFIRSTNODE(&inst->dfb_vlist);
+		//v->winsurface->Flip(v->winsurface, NULL, 0);
 
 		FD_ZERO(&rset);
 		FD_SET(inst->dfb_FDInput, &rset);
@@ -631,17 +638,33 @@ static void
 static void
 dfb_processevent(TMOD_DFB *mod)
 {
-	VISUAL *v = (VISUAL *) TFIRSTNODE(&mod->dfb_vlist);
-	//IDirectFBEventBuffer *ievents = mod->dfb_Events;
+	VISUAL *v; //= (VISUAL *) TFIRSTNODE(&mod->dfb_vlist);
+	struct TNode *node, *next;
 
 	while (TTRUE)
 	{
 		DFBEvent evt;
+		DFBWindowEvent *wevt;
 		int res;
 		res = read(mod->dfb_FDInput, &evt, sizeof(DFBEvent));
 
 		if (res == -1)
 			break;
+
+		/* lookup window: */
+		wevt = (DFBWindowEvent *)&evt;
+		v = TNULL;
+		node = mod->dfb_vlist.tlh_Head;
+		for (; (next = node->tln_Succ); node = next)
+		{
+			v = (VISUAL *) node;
+			if (v->winid == wevt->window_id)
+				break;
+			v = TNULL;
+		}
+
+		if (v == TNULL)
+			continue;
 
 		/* while true, spool out messages for this particular event: */
 		while (dfb_processvisualevent(mod, v, TNULL, &evt));


More information about the teklib-general mailing list