CCompositor::CCompositor(CVideo& video):
// TODO: Support multiple screens
m_video(video),
+ m_focussed_window(nullptr),
m_windowIDBuffer(video.width(), video.height())
{
//
{
// Redraw the screen and clear damage rects
if( m_damageRects.empty() ) {
- _SysDebug("- No damaged regions");
+ //_SysDebug("- No damaged regions");
return ;
}
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);
+ //_SysDebug("MouseButton(%i, %i,%i, %+i,%+i)", Cursor, X, Y, dX, dY);
m_video.SetCursorPos(X+dX, Y+dY);
CWindow *dstwin = getWindowForCoord(X, Y);
if( dstwin )
{
- // TODO: Pass event on to window
+ // Pass event on to window
+ dstwin->MouseMove(X, Y);
}
}
{
_SysDebug("MouseButton(%i, %i,%i, %i=%i)", Cursor, X, Y, Button, Press);
CWindow *dstwin = getWindowForCoord(X, Y);
+ _SysDebug("- dstwin = %p", dstwin);
if( dstwin )
{
// 1. Give focus and bring to front
// 2. Send event
- // TODO: Pass event on to window
+ dstwin->MouseButton(Button, X, Y, Press);
}
}
void CCompositor::KeyState(unsigned int KeyboardID, uint32_t KeySym, bool Press, uint32_t Codepoint)
{
_SysDebug("KeyState(%i, 0x%x, %b, 0x%x)", KeyboardID, KeySym, Press, Codepoint);
+ if( m_focussed_window )
+ {
+ m_focussed_window->KeyEvent(KeySym, "", Press);
+ }
}
CWindow* CCompositor::getWindowForCoord(unsigned int X, unsigned int Y)
.Client = win->client().id(),
.Window = win->id(),
};
-
+ for( unsigned int row = 0; row < H; row ++ )
+ {
+ TWindowID* dst = &m_buf[ (Y+row) * m_w ];
+ for( unsigned int col = 0; col < W; col ++ )
+ dst[col] = ent;
+ }
}
CWindow* CWindowIDBuffer::get(unsigned int X, unsigned int Y)
{
if( pos >= m_buf.size() )
return nullptr;
auto id = m_buf[pos];
+ //_SysDebug("CWindowIDBuffer::get id = {%i,%i}", id.Client, id.Window);
auto client = ::AxWin::IPC::GetClientByID(id.Client);
- if( client == nullptr )
+ if( client == nullptr ) {
+ //_SysDebug("CWindowIDBuffer::get client=%p", client);
return nullptr;
+ }
return client->GetWindow(id.Window);
}