Usermode/AxWin3 - Added keysyms (symlink to kernel version)
[tpg/acess2.git] / Usermode / Applications / axwin2_src / WM / wm.h
index 9ce3544..5977fd6 100644 (file)
@@ -1,36 +1,55 @@
-
+/*
+ * Acess2 Window Manager (AxWin2)
+ */
 #ifndef _WM_H_
 #define _WM_H_
 
 #include <axwin2/axwin.h>
+#include "common.h"
+
+/**
+ * \brief Number of elements that can be owned by each application
+ */
+// TODO: Fine tune these values
+#define MAX_ELEMENTS_PER_APP   1024
+#define DEFAULT_ELEMENTS_PER_APP       128
 
 typedef struct sAxWin_Element  tElement;
+typedef struct sMenuItem       tMenuItem;
+typedef struct sWindow tWindow;
+typedef struct sApplication    tApplication;
 
 struct sAxWin_Element
 {
-        int    Type;
+       enum eElementTypes      Type;
        
+       // Element Tree
        tElement        *Parent;
        tElement        *FirstChild;
        tElement        *LastChild;
        tElement        *NextSibling;
        
+       // Application
+       tApplication    *Owner; //!< Owning application
+       uint16_t        ApplicationID;  //!< Index into sApplication::EleIndex
+
+       // User modifiable attributes   
        short   PaddingL, PaddingR;
        short   PaddingT, PaddingB;
        short   GapSize;
        
-       short   FixedWith;      // Fixed Long Size attribute (height)
-       short   FixedCross;     // Fixed Cross Size attribute (width)
+       uint32_t        Flags;
+       
+       short   FixedWith;      //!< Fixed lengthways Size attribute (height)
+       short   FixedCross;     //!< Fixed Cross Size attribute (width)
        
        char    *Text;
        
        // -- Attributes maitained by the element code
        // Not touched by the user
-       short   MinWith;        // Minimum long size
-       short   MinCross;       // Minimum cross size
-       void    *Data;
-       
-       uint32_t        Flags;
+       short   MinWith;        //!< Minimum long size
+       short   MinCross;       //!< Minimum cross size
+       void    *Data;  //!< Per-type data
        
        // -- Render Cache
        short   CachedX, CachedY;
@@ -39,28 +58,52 @@ struct sAxWin_Element
        char    DebugName[];
 };
 
-typedef struct sTab
+struct sMenuItem
+{
+       tMenuItem       *Next;
+        int    Flags;
+        int    ID;     //!< ID number sent to application
+       const char      *Label;
+       const char      *Right;
+       tMenuItem       *FirstChild;
+};
+
+struct sWindow
 {
-        int    Type;   // Should be zero, allows a tab to be the parent of an element
+        int    X, Y, W, H;
+       void    *Icon;
        
-       tElement        *Parent;
-       tElement        *FirstChild;
-       tElement        *LastChild;
-       struct sTab     *NextTab;
+       tApplication    *App;
        
-       char    *Name;
+       tWindow *OrderNext;     // Render order
        
-       tElement        *RootElement;
-}      tTab;
+       tMenuItem       *Menus;
+       
+       tElement        RootElement;
+};
 
-typedef struct sApplication
+struct sApplication
 {
-       pid_t   PID;
+       tApplication    *Next;
+
+       tIPC_Type       *IPCType;
+       void    *Ident; //!< Client Identifier
+       
+       char    *Name;  //!< Application name
        
-        int    nTabs;
-       tTab    *Tabs;
+        int    MaxElementIndex;        //!< Number of entries in \a EleIndex
+       tElement        **EleIndex;     //!< Array of pointers to elements owned by this application
        
-       char    Name[];
-}      tApplication;
+       tElement        MetaElement;    //!< Tabs child off this
+};
+
+// === FUNCTIONS ===
+
+// --- Render
+extern void    WM_UpdateMinDims(tElement *Element);
+extern void    WM_UpdateDimensions(tElement *Element, int Pass);
+extern void    WM_UpdatePosition(tElement *Element);
+extern void    WM_RenderWidget(tElement *Element);
+extern void    WM_Update(void);
 
 #endif

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