X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fwm.h;h=ab2a629c5106e242f5d22fabaa4b5933a464bcbe;hb=fe24894229067f695d5db33c213fc09086740dec;hp=4c25c92535e35ffe07b02c952a2827a6a7b95691;hpb=099719a211c90b88e59e9dc08bcf18ec1a21573d;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin2_src/WM/wm.h b/Usermode/Applications/axwin2_src/WM/wm.h index 4c25c925..ab2a629c 100644 --- a/Usermode/Applications/axwin2_src/WM/wm.h +++ b/Usermode/Applications/axwin2_src/WM/wm.h @@ -1,141 +1,83 @@ - +/* + * Acess2 Window Manager (AxWin2) + */ #ifndef _WM_H_ #define _WM_H_ -typedef struct sElement +#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 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 Long 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; - -typedef struct sApplication -{ - pid_t PID; - - int nTabs; - tTab *Tabs; - - char Name[]; -} tApplication; - -// === CONSTANTS === -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. - */ - ELEFLAG_INVISIBLE = 0x002, - - /** - * \brief Position an element absulutely - */ - ELEFLAG_ABSOLUTEPOS = 0x004, - - /** - * \brief Fixed size element - */ - ELEFLAG_FIXEDSIZE = 0x008, - - /** - * \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, // ELEFLAG_EXPAND = 0x000 - - /** - * \brief Center alignment - */ - ELEFLAG_ALIGN_CENTER= 0x080, - /** - * \brief Right/Bottom alignment - */ - ELEFLAG_ALIGN_END = 0x100 + char DebugName[]; }; -/** - */ -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; //!< Windows 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