[teklib-general] teklib: display_sdl work in progress

Franciska Schulze fschulze at neoscientists.org
Thu May 15 21:52:55 CEST 2008


details:   http://hg.teklib.org/teklib/rev/76707ff52967
changeset: 189:76707ff52967
user:      Franciska Schulze <fschulze at neoscientists.org>
date:      Thu May 15 15:11:33 2008 +0000
description:
display_sdl work in progress

diffs (truncated from 121 to 100 lines):

diff -r 95885fc8eed6 -r 76707ff52967 doc/images/teklib.png
Binary file doc/images/teklib.png has changed
diff -r 95885fc8eed6 -r 76707ff52967 doc/images/teklibsmall.png
Binary file doc/images/teklibsmall.png has changed
diff -r 95885fc8eed6 -r 76707ff52967 src/display_sdl/display_sdl_api.c
--- a/src/display_sdl/display_sdl_api.c	Thu May 15 15:01:03 2008 +0000
+++ b/src/display_sdl/display_sdl_api.c	Thu May 15 15:11:33 2008 +0000
@@ -4,6 +4,52 @@ LOCAL void
 LOCAL void
 sdl_openvisual(TMOD_SDL *mod, struct TVRequest *req)
 {
+	TTAGITEM *tags = req->tvr_Op.OpenVisual.Tags;
+	TAPTR exec = TGetExecBase(mod);
+	VISUAL *v;
+
+
+	v = TExecAlloc0(exec, mod->sdl_MemMgr, sizeof(VISUAL));
+	req->tvr_Op.OpenVisual.Instance = v;
+	if (v == TNULL) return;
+
+	for (;;)
+	{
+		TInitList(&v->penlist);
+
+		TInitList(&v->imsgqueue);
+		v->imsgport = req->tvr_Op.OpenVisual.IMsgPort;
+
+		v->winwidth = (TINT)
+			TGetTag(tags, TVisual_PixWidth, (TTAG) -1);
+		v->winheight = (TINT)
+			TGetTag(tags, TVisual_PixHeight, (TTAG) -1);
+
+		v->winwidth = v->winwidth >= 0 ? v->winwidth : 600;
+		v->winheight = v->winheight >= 0 ? v->winheight : 400;
+
+		v->title = (TSTRPTR)
+			TGetTag(tags, TVisual_Title, (TTAG) "TEKlib visual");
+
+		v->window = SDL_SetVideoMode(v->winwidth, v->winheight, 32, SDL_HWSURFACE | SDL_RESIZABLE);
+		if (v->window == TNULL)
+			break;
+
+		SDL_WM_SetCaption(v->title, v->title);
+
+		v->bgpen = TVPEN_UNDEFINED;
+		v->fgpen = TVPEN_UNDEFINED;
+
+		//TDBPRINTF(TDB_TRACE,("Add window: %p\n", v->window));
+		//TAddTail(&mod->sdl_vlist, &v->node);
+
+		/* success: */
+		return;
+	}
+
+	/* failure: */
+	sdl_closevisual(mod, req);
+	req->tvr_Op.OpenVisual.Instance = TNULL;
 }
 
 LOCAL void
diff -r 95885fc8eed6 -r 76707ff52967 src/display_sdl/display_sdl_mod.c
--- a/src/display_sdl/display_sdl_mod.c	Thu May 15 15:01:03 2008 +0000
+++ b/src/display_sdl/display_sdl_mod.c	Thu May 15 15:11:33 2008 +0000
@@ -60,6 +60,7 @@ tek_init_display_sdl(TAPTR task, struct 
 	TTAGITEM *tags)
 {
 	TMOD_SDL *mod = (TMOD_SDL *) vis;
+
 	if (mod == TNULL)
 	{
 		if (version == 0xffff)
diff -r 95885fc8eed6 -r 76707ff52967 src/display_sdl/display_sdl_mod.h
--- a/src/display_sdl/display_sdl_mod.h	Thu May 15 15:01:03 2008 +0000
+++ b/src/display_sdl/display_sdl_mod.h	Thu May 15 15:11:33 2008 +0000
@@ -45,16 +45,45 @@ typedef struct SDLDisplay
 	/* Number of module opens: */
 	TAPTR sdl_RefCount;
 
+	/* list of all visuals: */
+	struct TList sdl_vlist;
+
 	#if 0
 	/* Time module base ptr: */
 	TAPTR sdl_TimeBase;
 	/* Timerequest: */
 	TAPTR sdl_TimeReq;
+	#endif
+
 	/* Module global memory manager (thread safe): */
 	TAPTR sdl_MemMgr;
-	#endif
 
 } TMOD_SDL;
+
+typedef struct
+{
+	struct TNode node;
+
+	TINT winwidth, winheight;
+	TINT winleft, wintop;


More information about the teklib-general mailing list