Usermode/AxWin3 - Cleaning up and adding client widget support
[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 RendererArg, 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(RendererArg);
40         
41         // - Return!
42         return ret;
43 }
44
45 tWindow *WM_CreateWindowStruct(size_t ExtraSize)
46 {
47         return calloc( sizeof(tWindow) + ExtraSize, 1 );
48 }
49
50 void WM_Update(void)
51 {
52         // - Iterate through visible windows, updating them as needed
53         
54         // - Draw windows from back to front to the render buffer
55         
56         // - Blit the buffer to the screen
57 }
58
59 void WM_Render_FilledRect(tWindow *Window, tColour Colour, int X, int Y, int W, int H)
60 {
61         // Clip to window dimensions
62         if(X < 0) { W += X; X = 0; }
63         if(Y < 0) { H += Y; Y = 0; }
64         if(X >= Window->W)      return;
65         if(Y >= Window->H)      return;
66         if(X + W > Window->W)   W = Window->W - X;
67         if(Y + H > Window->H)   H = Window->H - Y;
68
69         // Render to buffer
70         // Create if needed?
71
72         UNIMPLEMENTED();
73 }
74

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