X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin4_src%2FServer%2Finclude%2FCCompositor.hpp;h=fe24303929c9502981e59b704053d9d25dbec15f;hb=7f2068235fabc311332962711cd3220ce8ee2638;hp=f6f2e7f15719060c94b210628be05a23af631dd1;hpb=12b7fdacb831478b4fdc648f6a146c9d2285b9d6;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin4_src/Server/include/CCompositor.hpp b/Usermode/Applications/axwin4_src/Server/include/CCompositor.hpp index f6f2e7f1..fe243039 100644 --- a/Usermode/Applications/axwin4_src/Server/include/CCompositor.hpp +++ b/Usermode/Applications/axwin4_src/Server/include/CCompositor.hpp @@ -8,7 +8,76 @@ #ifndef _CCOMPOSITOR_H_ #define _CCOMPOSITOR_H_ +#include +#include +#include +#include "CRect.hpp" +#include "CWindow.hpp" +namespace AxWin { + +class CClient; +class CVideo; + + +enum eMouseButton +{ + MOUSEBTN_MAIN, // Left + MOUSEBTN_SECONDARY, // Right + MOUSEBTN_MIDDLE, // Scroll wheel + MOUSEBTN_BTN4, + MOUSEBTN_BTN5, +}; + +class CWindowIDBuffer +{ + struct TWindowID + { + uint16_t Client; + uint16_t Window; + }; + unsigned int m_w; + ::std::vector m_buf; +public: + CWindowIDBuffer(unsigned int W, unsigned int H); + + void set(unsigned int X, unsigned int Y, unsigned int W, unsigned int H, CWindow* win); + CWindow* get(unsigned int X, unsigned int Y); +}; + +class CCompositor +{ + CVideo& m_video; + ::std::list m_damageRects; + ::std::list m_windows; + CWindow* m_focussed_window; + + CWindowIDBuffer m_windowIDBuffer; // One 32-bit value per pixel + +public: + CCompositor(CVideo& video); + + CWindow* CreateWindow(CClient& client, const ::std::string& name); + + void ShowWindow(CWindow* window); + void HideWindow(CWindow* window); + + bool GetScreenDims(unsigned int ScrenID, unsigned int *Width, unsigned int *Height); + + void Redraw(); + void DamageArea(const CRect& rect); + void BlitFromSurface(const CSurface& dest, const CRect& src_rect); + + void MouseMove(unsigned int Cursor, unsigned int X, unsigned int Y, int dX, int dY); + void MouseButton(unsigned int Cursor, unsigned int X, unsigned int Y, eMouseButton Button, bool Press); + + void KeyState(unsigned int KeyboardID, uint32_t KeySym, bool Press, uint32_t Codepoint); +public: + CWindow* getWindowForCoord(unsigned int X, unsigned int Y); +}; + + +}; #endif