#define _RENDERER_WIDGET_H_
#include <wm_renderer.h>
+#include <axwin3/widget.h>
-enum
-{
- MSG_WIDGET_CREATE,
- MSG_WIDGET_DELETE,
- MSG_WIDGET_SETTEXT
-};
+#include <widget_messages.h>
+
+// === TYPES ===
+typedef struct sWidgetWin tWidgetWin;
+typedef struct sAxWin_Element tElement;
-enum eElementTypes
+// === STRUCTURES ===
+struct sAxWin_Element
{
- ELETYPE_NONE,
+ enum eElementTypes Type;
- ELETYPE_WINDOW, //!< Window root element
+ tWindow *Window;
+ uint32_t ID; //!< Application provided ID number
+ tElement *ListNext; //!< Next element in bucket
- ELETYPE_BOX, //!< Content box (invisible in itself)
- ELETYPE_TABBAR, //!< Tab Bar
- ELETYPE_TOOLBAR, //!< Tool Bar
+ // Element Tree
+ tElement *Parent;
+ tElement *FirstChild;
+ tElement *LastChild;
+ tElement *NextSibling;
- ELETYPE_BUTTON, //!< Push Button
+ // User modifiable attributes
+ short PaddingL, PaddingR;
+ short PaddingT, PaddingB;
+ short GapSize;
- ELETYPE_TEXT, //!< Text
- ELETYPE_IMAGE, //!< Image
+ uint32_t Flags;
- ELETYPE_SPACER, //!< Visual Spacer (horizontal / vertical rule)
+ short FixedWith; //!< Fixed lengthways Size attribute (height)
+ short FixedCross; //!< Fixed Cross Size attribute (width)
- MAX_ELETYPES = 0x100
-};
+ tColour BackgroundColour;
-typedef struct
+ char *Text;
+
+ // -- Attributes maitained by the element code
+ // Not touched by the user
+ short MinW; //!< Minimum long size
+ short MinH; //!< Minimum cross size
+ void *Data; //!< Per-type data
+
+ // -- Render Cache
+ short CachedX, CachedY;
+ short CachedW, CachedH;
+};
+struct sWidgetWin
{
- uint32_t Parent;
- uint32_t NewID;
- char DebugName[];
-} tWidgetMsg_Create;
+ tElement RootElement;
+
+ tElement *FocusedElement;
+
+ int TableSize; //!< Number of entries, anything over will wrap
+ tElement *ElementTable[]; //!< Hash table essentially
+};
#endif