Usermode/AxWin4 - Mouse input in progress
[tpg/acess2.git] / Usermode / Applications / axwin4_src / Server / compositor.cpp
index 9306e41..6f512c8 100644 (file)
@@ -6,8 +6,8 @@
  * - Window compositor
  */
 #include <video.hpp>
-#include <compositor.hpp>
 #include <CCompositor.hpp>
+#include <cassert>
 
 namespace AxWin {
 
@@ -17,13 +17,30 @@ CCompositor::CCompositor(CVideo& video):
        // 
 }
 
-CWindow* CCompositor::CreateWindow(CClient& client)
+CWindow* CCompositor::CreateWindow(CClient& client, const ::std::string& name)
 {
-       return new CWindow(client, "TODO");
+       return new CWindow(*this, client, name);
+}
+
+bool CCompositor::GetScreenDims(unsigned int ScreenID, unsigned int* W, unsigned int* H)
+{
+       assert(W && H);
+       if( ScreenID != 0 )
+       {
+               *W = 0;
+               *H = 0;
+               return false;
+       }
+       else
+       {
+               m_video.GetDims(*W, *H);
+               return true;
+       }
 }
 
 void CCompositor::Redraw()
 {
+       _SysDebug("CCompositor::Redraw");
        // Redraw the screen and clear damage rects
        if( m_damageRects.empty() )
                return ;
@@ -34,6 +51,8 @@ void CCompositor::Redraw()
        // For all windows, check for intersection with damage rects
        for( auto rect : m_damageRects )
        {
+               _SysDebug("rect=(%i,%i) %ix%i", rect.m_x, rect.m_y, rect.m_w, rect.m_h);
+               // window list should be sorted by draw order (lowest first)
                for( auto window : m_windows )
                {
                        if( rect.HasIntersection( window->m_surface.m_rect ) )
@@ -44,13 +63,17 @@ void CCompositor::Redraw()
                                //window->Repaint( rel_rect );
                        }
                }
+               
+               // TODO: Blit from windows to a local surface, then blit from there to screen here
        }
 
        m_damageRects.clear();
+       m_video.Flush();
 }
 
 void CCompositor::DamageArea(const CRect& area)
 {
+       m_damageRects.push_back( area );
        // 1. Locate intersection with any existing damaged areas
        // 2. Append after removing intersections
 }
@@ -68,5 +91,16 @@ void CCompositor::BlitFromSurface(const CSurface& dest, const CRect& src_rect)
        }
 }
 
+void CCompositor::MouseMove(unsigned int Cursor, unsigned int X, unsigned int Y, int dX, int dY)
+{
+       _SysDebug("MouseButton(%i, %i,%i, %+i,%+i)", Cursor, X, Y, dX, dY);
+       m_video.SetCursorPos(X+dX, Y+dY);
+}
+
+void CCompositor::MouseButton(unsigned int Cursor, unsigned int X, unsigned int Y, eMouseButton Button, bool Press)
+{
+       _SysDebug("MouseButton(%i, %i,%i, %i=%i)", Cursor, X, Y, Button, Press);
+}
+
 }      // namespace AxWin
 

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