[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