Usermode/AxWin3 - Added keysyms (symlink to kernel version)
[tpg/acess2.git] / Usermode / Applications / axwin2_src / WM / wm.h
index 96d488d..5977fd6 100644 (file)
-
+/*
+ * Acess2 Window Manager (AxWin2)
+ */
 #ifndef _WM_H_
 #define _WM_H_
 
-typedef struct sElement
+#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;
        
-       struct sElement *Parent;
-       struct sElement *FirstChild;
-       struct sElement *LastChild;
-       struct sElement *NextSibling;
+       // 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;
        short   CachedW, CachedH;
-}      tElement;
-
-typedef struct sTab
-{
-        int    Type;   // Should be zero, allows a tab to be the parent of an element
        
-       struct sElement *Parent;
-       struct sElement *FirstChild;
-       struct sElement *LastChild;
-       
-       char    *Name;
-       
-       tElement        *RootElement;
-}      tTab;
+       char    DebugName[];
+};
 
-typedef struct sApplication
+struct sMenuItem
 {
-       pid_t   PID;
-       
-        int    nTabs;
-       tTab    *Tabs;
-       
-       char    Name[];
-}      tApplication;
+       tMenuItem       *Next;
+        int    Flags;
+        int    ID;     //!< ID number sent to application
+       const char      *Label;
+       const char      *Right;
+       tMenuItem       *FirstChild;
+};
 
-// === CONSTANTS ===
-enum eElementFlags
+struct sWindow
 {
-       /**
-        * \brief Rendered
-        * 
-        * If set, the element will be ignored in calculating sizes and
-        * rendering.
-        */
-       ELEFLAG_NORENDER    = 0x001,
-       /**
-        * \brief Element visibility
-        * 
-        * If set, the element is not drawn.
-        */
-       ELEFLAG_INVISIBLE   = 0x002,
-       
-       /**
-        * \brief Position an element absulutely
-        */
-       ELEFLAG_ABSOLUTEPOS = 0x004,
+        int    X, Y, W, H;
+       void    *Icon;
        
-       /**
-        * \brief Fixed size element
-        */
-       ELEFLAG_FIXEDSIZE   = 0x008,
+       tApplication    *App;
        
-       /**
-        * \brief Element "orientation"
-        */
-       ELEFLAG_VERTICAL    = 0x010,//  ELEFLAG_HORIZONTAL  = 0x000,
-       /**
-        * \brief Action for text that overflows
-        */
-       ELEFLAG_WRAP        = 0x020,//  ELEFLAG_NOWRAP      = 0x000,
-       /**
-        * \brief Cross size action
-        * 
-        * If this flag is set, the element will only be as large (across
-        * its parent) as is needed to encase the contents of the element.
-        * Otherwise, the element will expand to fill all avaliable space.
-        */
-       ELEFLAG_NOEXPAND    = 0x040,
+       tWindow *OrderNext;     // Render order
        
-       ELEFLAG_NOSTRETCH   = 0x080,
+       tMenuItem       *Menus;
        
-       /**
-        * \brief Center alignment
-        */
-       ELEFLAG_ALIGN_CENTER= 0x100,
-       /**
-        * \brief Right/Bottom alignment
-        */
-       ELEFLAG_ALIGN_END = 0x200
+       tElement        RootElement;
 };
 
-/**
- */
-enum eElementTypes
+struct sApplication
 {
-       ELETYPE_NONE,
-       
-       ELETYPE_BOX,    //!< Content box
-       ELETYPE_TABBAR, //!< Tab Bar
-       ELETYPE_TOOLBAR,        //!< Tool Bar
+       tApplication    *Next;
+
+       tIPC_Type       *IPCType;
+       void    *Ident; //!< Client Identifier
        
-       ELETYPE_BUTTON, //!< Push Button
-       ELETYPE_TEXT,   //!< Text
-       ELETYPE_IMAGE,  //!< Image
+       char    *Name;  //!< Application name
        
-       ELETYPE_SPACER, //!< Visual Spacer
+        int    MaxElementIndex;        //!< Number of entries in \a EleIndex
+       tElement        **EleIndex;     //!< Array of pointers to elements owned by this application
        
-       MAX_ELETYPES    = 0x100
+       tElement        MetaElement;    //!< Tabs child off this
 };
 
 // === FUNCTIONS ===
-/**
- * \brief Create a new element as a child of \a Parent
- */
-extern tElement        *WM_CreateElement(tElement *Parent, int Type, int Flags);
-extern void    WM_SetFlags(tElement *Element, int Flags);
-extern void    WM_SetSize(tElement *Element, int Size);
-extern void    WM_SetText(tElement *Element, char *Text);
+
+// --- 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