X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fwm.h;h=5977fd689a3459b6834c58350955d7a1b5c3d31e;hb=e02f66c7125bf18f77c6c53587238cbd49da2c89;hp=28372513065a3e93b5067e6b213844a04f578e55;hpb=3117b20bcbfbed588ede9b29a7f90eafc762b138;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin2_src/WM/wm.h b/Usermode/Applications/axwin2_src/WM/wm.h index 28372513..5977fd68 100644 --- a/Usermode/Applications/axwin2_src/WM/wm.h +++ b/Usermode/Applications/axwin2_src/WM/wm.h @@ -7,18 +7,31 @@ #include #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 sTab tTab; +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; @@ -27,16 +40,16 @@ struct sAxWin_Element uint32_t Flags; - short FixedWith; // Fixed Long Size attribute (height) - short FixedCross; // Fixed Cross Size attribute (width) + 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; + short MinWith; //!< Minimum long size + short MinCross; //!< Minimum cross size + void *Data; //!< Per-type data // -- Render Cache short CachedX, CachedY; @@ -45,16 +58,52 @@ struct sAxWin_Element char DebugName[]; }; +struct sMenuItem +{ + tMenuItem *Next; + int Flags; + int ID; //!< ID number sent to application + const char *Label; + const char *Right; + tMenuItem *FirstChild; +}; + +struct sWindow +{ + int X, Y, W, H; + void *Icon; + + tApplication *App; + + tWindow *OrderNext; // Render order + + tMenuItem *Menus; + + tElement RootElement; +}; + struct sApplication { tApplication *Next; - void *Ident; - tMessages_Handle_Callback *SendMessage; + tIPC_Type *IPCType; + void *Ident; //!< Client Identifier - char *Name; - tElement MetaElement; - + char *Name; //!< Application name + + int MaxElementIndex; //!< Number of entries in \a EleIndex + tElement **EleIndex; //!< Array of pointers to elements owned by this application + + 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