// === GLOBALS ===
tWMRenderer *gpWM_Renderers;
+// - Render order list (gpWM_FirstWindow is rendered first)
+tWindow *gpWM_RootWindow;
// === CODE ===
+void WM_Initialise(void)
+{
+ WM_CreateWindow(NULL, 0x8888FF, "Background");
+}
+
void WM_RegisterRenderer(tWMRenderer *Renderer)
{
// TODO: Catch out duplicates
// - Call create window function
ret = renderer->CreateWindow(RendererArg);
-
+ ret->Parent = Parent;
+
+ if(!Parent)
+ Parent = gpWM_RootWindow;
+
+ // Append to parent
+ if(Parent)
+ {
+ if(Parent->LastChild)
+ Parent->LastChild->NextSibling = ret;
+ else
+ Parent->FirstChild = ret;
+ ret->PrevSibling = Parent->LastChild;
+ Parent->LastChild = ret;
+ }
+ else
+ {
+ gpWM_RootWindow = ret;
+ }
+
// - Return!
return ret;
}
return calloc( sizeof(tWindow) + ExtraSize, 1 );
}
+void WM_int_UpdateWindow(tWindow *Window)
+{
+ tWindow *child;
+
+ // Ignore hidden windows
+ if( !(Window->Flags & WINFLAG_SHOW) )
+ return ;
+ // Ignore unchanged windows
+ if( Window->Flags & WINFLAG_CLEAN )
+ return;
+
+ // Render
+ Window->Renderer->Redraw(Window);
+
+ // Process children
+ for( child = Window->FirstChild; child; child = child->NextSibling )
+ {
+ WM_int_UpdateWindow(child);
+ }
+
+ Window->Flags |= WINFLAG_CLEAN;
+}
+
void WM_Update(void)
{
// - Iterate through visible windows, updating them as needed