Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / Usermode / Applications / axwin4_src / Server / include / CCompositor.hpp
diff --git a/Usermode/Applications/axwin4_src/Server/include/CCompositor.hpp b/Usermode/Applications/axwin4_src/Server/include/CCompositor.hpp
new file mode 100644 (file)
index 0000000..fe24303
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Acess2 GUI v4
+ * - By John Hodge (thePowersGang) 
+ *
+ * CCompositor.hpp
+ * - Window Compositor
+ */
+#ifndef _CCOMPOSITOR_H_
+#define _CCOMPOSITOR_H_
+
+#include <string>
+#include <list>
+#include <vector>
+#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<TWindowID>        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<CRect>      m_damageRects;
+       ::std::list<CWindow*>   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
+

UCC git Repository :: git.ucc.asn.au