int FillSelect(fd_set& rfds)
{
int ret = 0;
- for( auto channel : glChannels )
+ for( const auto channel : glChannels )
{
- _SysDebug("IPC::FillSelect - channel=%p", channel);
+ assert(channel);
ret = ::std::max(ret, channel->FillSelect(rfds));
}
return ret;
void HandleSelect(const fd_set& rfds)
{
- for( auto channel : glChannels )
+ for( const auto channel : glChannels )
{
+ assert(channel);
channel->HandleSelect(rfds);
}
}
void SendNotify_Dims(CClient& client, unsigned int NewW, unsigned int NewH)
{
- assert(!"TODO: CClient::SendNotify_Dims");
+ _SysDebug("TODO: CClient::SendNotify_Dims");
}
reply.WriteU16( (w <= UINT16_MAX ? w : UINT16_MAX) );
reply.WriteU16( (h <= UINT16_MAX ? h : UINT16_MAX) );
break; }
+ case IPC_GLOBATTR_MAXAREA:
+ assert(!"TODO: IPC_GLOBATTR_MAXAREA");
+ break;
default:
throw IPC::CClientFailure("Bad global attribute ID");
}
int16_t new_y = message.ReadS16();
win->Move(new_x, new_y);
break; }
+ case IPC_WINATTR_SHOW:
+ win->Show( message.ReadU8() != 0 );
+ break;
+ case IPC_WINATTR_FLAGS:
+ _SysDebug("TODO: IPC_WINATTR_FLAGS");
+ break;
+ case IPC_WINATTR_TITLE:
+ assert(!"TODO: IPC_WINATTR_TITLE");
+ break;
default:
_SysDebug("HandleMessage_SetWindowAttr - Bad attr %u", attr_id);
throw IPC::CClientFailure("Bad window attr");
void HandleMessage_PushData(CClient& client, CDeserialiser& message)
{
- assert(!"TODO HandleMessage_PushData");
+ uint16_t win_id = message.ReadU16();
+ uint16_t x = message.ReadU16();
+ uint16_t y = message.ReadU16();
+ uint16_t w = message.ReadU16();
+ uint16_t h = message.ReadU16();
+ _SysDebug("_PushData: (%i, (%i,%i) %ix%i)", win_id, x, y, w, h);
+
+ CWindow* win = client.GetWindow(win_id);
+ if(!win) {
+ throw IPC::CClientFailure("_PushData: Bad window");
+ }
+
+ for( unsigned int row = 0; row < h; row ++ )
+ {
+ const ::std::vector<uint8_t> scanline_data = message.ReadBuffer();
+ if( scanline_data.size() != w * 4 ) {
+ _SysDebug("ERROR _PushData: Scanline buffer size mismatch (%i,%i)",
+ scanline_data.size(), w*4);
+ continue ;
+ }
+ win->DrawScanline(y+row, x, w, scanline_data.data());
+ }
}
void HandleMessage_Blit(CClient& client, CDeserialiser& message)
{
return ;
}
- _SysDebug("IPC::HandleMessage - command=%i", command);
(message_handlers[command])(client, message);
- _SysDebug("IPC::HandleMessage - Completed");
}
CClientFailure::CClientFailure(std::string&& what):