X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibaxwin4.so_src%2Fwindow_drawing.cpp;h=40f55a006580776c745940fcf625ac026f3102cc;hb=5a4260f6d0d66675b888c6179b08a8e7765a9e07;hp=6f2f898bdd8a9e5522b747d7ded7f8a372f7dcd3;hpb=d87b9f934993d643b193880603523dead2a63547;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libaxwin4.so_src/window_drawing.cpp b/Usermode/Libraries/libaxwin4.so_src/window_drawing.cpp index 6f2f898b..40f55a00 100644 --- a/Usermode/Libraries/libaxwin4.so_src/window_drawing.cpp +++ b/Usermode/Libraries/libaxwin4.so_src/window_drawing.cpp @@ -12,40 +12,66 @@ namespace AxWin { +void _push_data(tAxWin4_Window *Window, int X, int Y, unsigned int W, unsigned int H, const void *Data) +{ + CSerialiser message; + //_SysDebug("_push_data - (%i,%i), %ix%i %p", X, Y, W, H, Data); + message.WriteU8(IPCMSG_PUSHDATA); + message.WriteU16(Window->m_id); + message.WriteU16(X); + message.WriteU16(Y); + message.WriteU16(W); + message.WriteU16(H); + message.WriteBuffer(H*W*4, Data); + ::AxWin::SendMessage(message); +} + extern "C" void AxWin4_DrawBitmap(tAxWin4_Window *Window, int X, int Y, unsigned int W, unsigned int H, void *Data) { // TODO: Split message up into blocks such that it can be dispatched if( W > 128 ) { const uint32_t* data32 = static_cast(Data); - const unsigned int rows_per_message = 2048 / W; + const unsigned int rows_per_message = 1; // 2048 / W; for( unsigned int row = 0; row < H; row += rows_per_message ) { - CSerialiser message; - message.WriteU8(IPCMSG_PUSHDATA); - message.WriteU16(Window->m_id); - message.WriteU16(X); - message.WriteU16(Y+row); - message.WriteU16(W); - message.WriteU16( ::std::min(rows_per_message,H-row) ); - message.WriteBuffer(W*4, data32); - ::AxWin::SendMessage(message); + _push_data(Window, X, Y+row, W, ::std::min(rows_per_message,H-row), data32); data32 += W*rows_per_message; } } else { - CSerialiser message; - message.WriteU8(IPCMSG_PUSHDATA); - message.WriteU16(Window->m_id); - message.WriteU16(X); - message.WriteU16(Y); - message.WriteU16(W); - message.WriteU16(H); - message.WriteBuffer(W*H*4, Data); - ::AxWin::SendMessage(message); + _push_data(Window, X, Y, W, H, Data); } } +extern "C" void AxWin4_DrawControl(tAxWin4_Window *Window, int X, int Y, unsigned int W, unsigned int H, uint16_t ID, unsigned int Frame) +{ + CSerialiser message; + message.WriteU8(IPCMSG_DRAWCTL); + message.WriteU16(Window->m_id); + message.WriteU16(X); + message.WriteU16(Y); + message.WriteU16(W); + message.WriteU16(H); + message.WriteU16(ID); + message.WriteU16(Frame); + ::AxWin::SendMessage(message); +} + +extern "C" void AxWin4_DrawText(tAxWin4_Window *Window, int X, int Y, unsigned int W, unsigned int H, uint16_t FontID, const char *String) +{ + CSerialiser message; + message.WriteU8(IPCMSG_DRAWTEXT); + message.WriteU16(Window->m_id); + message.WriteU16(X); + message.WriteU16(Y); + message.WriteU16(W); + message.WriteU16(H); + message.WriteU16(FontID); + message.WriteString(String); + ::AxWin::SendMessage(message); +} + }; // namespace AxWin