-
+/*
+ * 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;
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