X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin2_src%2FWM%2Fcommon.h;h=2d92cb5835fd865f8517a2a1f763ffb1baa17981;hb=7941d6b368acb0abc17e6a77ffaf7b4c306b67ab;hp=7ec792ab305e7b28c0f430e069ffb213f459e26b;hpb=d55488f17f9fbd25d9126853720e2fd78bd8540f;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin2_src/WM/common.h b/Usermode/Applications/axwin2_src/WM/common.h index 7ec792ab..2d92cb58 100644 --- a/Usermode/Applications/axwin2_src/WM/common.h +++ b/Usermode/Applications/axwin2_src/WM/common.h @@ -8,12 +8,64 @@ #include #include #include +#include // _SysDebug + +// === TYPES === +typedef struct sIPC_Type tIPC_Type; +typedef struct sFont tFont; + +struct sIPC_Type +{ + int (*GetIdentSize)(void *Ident); + int (*CompareIdent)(void *Ident1, void *Ident2); + void (*SendMessage)(void *Ident, size_t, void *Data); +}; #include "wm.h" +#include "image.h" +//#include "font.h" + +// === MACROS === +static inline uint32_t Video_AlphaBlend(uint32_t _orig, uint32_t _new, uint8_t _alpha) +{ + uint16_t ao,ro,go,bo; + uint16_t an,rn,gn,bn; + if( _alpha == 0 ) return _orig; + if( _alpha == 255 ) return _new; + + ao = (_orig >> 24) & 0xFF; + ro = (_orig >> 16) & 0xFF; + go = (_orig >> 8) & 0xFF; + bo = (_orig >> 0) & 0xFF; + + an = (_new >> 24) & 0xFF; + rn = (_new >> 16) & 0xFF; + gn = (_new >> 8) & 0xFF; + bn = (_new >> 0) & 0xFF; + + if( _alpha == 0x80 ) { + ao = (ao + an) / 2; + ro = (ro + rn) / 2; + go = (go + gn) / 2; + bo = (bo + bn) / 2; + } + else { + ao = ao*(255-_alpha) + an*_alpha; + ro = ro*(255-_alpha) + rn*_alpha; + go = go*(255-_alpha) + gn*_alpha; + bo = bo*(255-_alpha) + bn*_alpha; + ao /= 255*2; + ro /= 255*2; + go /= 255*2; + bo /= 255*2; + } + + return (ao << 24) | (ro << 16) | (go << 8) | bo; +} // === GLOBALS === -extern char *gsTerminalDevice; -extern char *gsMouseDevice; +extern const char *gsTerminalDevice; +extern const char *gsMouseDevice; extern int giScreenWidth; extern int giScreenHeight; @@ -24,7 +76,32 @@ extern int giMouseFD; // === Functions === extern void memset32(void *ptr, uint32_t val, size_t count); -extern void Video_FillRect(short X, short Y, short W, short H, uint32_t Color); +// --- Initialisation --- +extern void ParseCommandline(int argc, char *argv[]); +// --- Messages / IPC --- +extern void IPC_Init(void); +extern void IPC_FillSelect(int *nfds, fd_set *set); +extern void IPC_HandleSelect(fd_set *set); +// --- Input --- +extern void Input_FillSelect(int *nfds, fd_set *set); +extern void Input_HandleSelect(fd_set *set); +// --- Local WM --- +extern tApplication *AxWin_RegisterClient(tIPC_Type *Method, void *Ident, const char *Name); +extern void AxWin_DeregisterClient(tApplication *App); +extern tApplication *AxWin_GetClient(tIPC_Type *Method, void *Ident); +extern tElement *AxWin_CreateAppWindow(tApplication *App, const char *Name); +// --- Video --- +extern void Video_Setup(void); extern void Video_Update(void); +extern void Video_FillRect(short X, short Y, short W, short H, uint32_t Color); +extern void Video_DrawRect(short X, short Y, short W, short H, uint32_t Color); +extern int Video_DrawText(short X, short Y, short W, short H, tFont *Font, uint32_t Color, char *Text); +extern void Video_DrawImage(short X, short Y, short W, short H, tImage *Image); +// --- Interface --- +extern void Interface_Init(void); +extern void Interface_Update(void); +extern void Interface_Render(void); +// --- Decorator --- +extern void Decorator_RenderWidget(tElement *Element); #endif