Usermode/AxWin3 - resources and bugfixes
[tpg/acess2.git] / Usermode / Applications / axwin3_src / WM / include / renderer_widget.h
index 680fb4f..fd0fa42 100644 (file)
 #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;
 
-enum eElementFlags
-{
-       /**
-        * \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 (but still is used for size calculations)
-        */
-       ELEFLAG_INVISIBLE   = 0x002,
-       
-       /**
-        * \brief Position an element absulutely (ignored in size calcs)
-        */
-       ELEFLAG_ABSOLUTEPOS = 0x004,
+       char    *Text;
        
-       /**
-        * \brief Fixed size element
-        */
-       ELEFLAG_FIXEDSIZE   = 0x008,
+       // -- 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
        
-       /**
-        * \brief Element "orientation"
-        * 
-        * Vertical means that the children of this element are stacked,
-        * otherwise they list horizontally
-        */
-       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,
-       
-       /**
-        * \brief With (length) size action
-        * If this flag is set, the element will only be as large as
-        * is required along it's parent
-        */
-       ELEFLAG_NOSTRETCH   = 0x080,
-       
-       /**
-        * \brief Center alignment
-        */
-       ELEFLAG_ALIGN_CENTER= 0x100,
-       /**
-        * \brief Right/Bottom alignment
-        * 
-        * If set, the element aligns to the end of avaliable space (instead
-        * of the beginning)
-        */
-       ELEFLAG_ALIGN_END       = 0x200
+       // -- Render Cache
+       short   CachedX, CachedY;
+       short   CachedW, CachedH;
 };
-
-typedef struct
+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
 

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