X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fwm.h;h=df4f860c4b9752e03a2956771658a61446561772;hb=7941d6b368acb0abc17e6a77ffaf7b4c306b67ab;hp=e7b6bee9d8a0ad517baeb9c68cbafdbcd031e48a;hpb=872dbea3900b09c78092d3cdf035513f400bcfe8;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin2_src/WM/wm.h b/Usermode/Applications/axwin2_src/WM/wm.h index e7b6bee9..df4f860c 100644 --- a/Usermode/Applications/axwin2_src/WM/wm.h +++ b/Usermode/Applications/axwin2_src/WM/wm.h @@ -1,34 +1,94 @@ - +/* + * 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 sWindow tWindow; +typedef struct sApplication tApplication; + +struct sAxWin_Element { - struct sElement *NextSibling; + 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; + + uint32_t Flags; - short CachedX; - short CachedY; - short CachedW; - short CachedH; + short FixedWith; //!< Fixed lengthways Size attribute (height) + short FixedCross; //!< Fixed Cross Size attribute (width) - struct sElement *FirstChild; -} tElement; + 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; //!< Per-type data + + // -- Render Cache + short CachedX, CachedY; + short CachedW, CachedH; + + char DebugName[]; +}; -typedef struct sTab +struct sWindow { - char *Name; + int X, Y, W, H; + tImage *Icon; + + tWindow *OrderNext; // Render order - tElement *RootElement; -} tTab; + tElement Element; +}; -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; //!< Windows 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