Usermode/AxWin3 - Implementing window creation
[tpg/acess2.git] / Usermode / Applications / axwin3_src / WM / wm.c
1 /*
2  * Acess2 Window Manager v3
3  * - By John Hodge (thePowersGang)
4  *
5  * wm.c
6  * - Window manager core
7  */
8 #include <common.h>
9 #include <wm_renderer.h>
10 #include <stdlib.h>
11 #include <string.h>
12
13 // === GLOBALS ===
14 tWMRenderer     *gpWM_Renderers;
15
16 // === CODE ===
17 void WM_RegisterRenderer(tWMRenderer *Renderer)
18 {
19         // TODO: Catch out duplicates
20         Renderer->Next = gpWM_Renderers;
21         gpWM_Renderers = Renderer;
22 }
23
24 tWindow *WM_CreateWindow(tWindow *Parent, int Flags, const char *RendererName)
25 {
26         tWMRenderer     *renderer;
27         tWindow *ret;
28         
29         // - Get Renderer
30         for( renderer = gpWM_Renderers; renderer; renderer = renderer->Next )
31         {
32                 if(strcmp(RendererName, renderer->Name) == 0)
33                         break;
34         }
35         if(renderer == NULL)
36                 return NULL;
37
38         // - Call create window function
39         ret = renderer->CreateWindow(Flags);
40         
41         // - Fill common fields on that
42         ret->Flags = Flags;
43         
44         // - Return!
45         return ret;
46 }
47
48 tWindow *WM_CreateWindowStruct(size_t ExtraSize)
49 {
50         return calloc( sizeof(tWindow) + ExtraSize, 1 );
51 }
52
53 void WM_Update(void)
54 {
55         // - Iterate through visible windows, updating them as needed
56         
57         // - Draw windows from back to front to the render buffer
58         
59         // - Blit the buffer to the screen
60 }
61
62 void WM_Render_FilledRect(tWindow *Window, tColour Colour, int X, int Y, int W, int H)
63 {
64         // Clip to window dimensions
65         if(X < 0) { W += X; X = 0; }
66         if(Y < 0) { H += Y; Y = 0; }
67         if(X >= Window->W)      return;
68         if(Y >= Window->H)      return;
69         if(X + W > Window->W)   W = Window->W - X;
70         if(Y + H > Window->H)   H = Window->H - Y;
71
72         // Render to buffer
73         // Create if needed?
74
75         UNIMPLEMENTED();
76 }
77

UCC git Repository :: git.ucc.asn.au