Usermode/libaxwin4 - Fix bad message ID for resize, bad return in window create
[tpg/acess2.git] / Usermode / Libraries / libaxwin4.so_src / window_drawing.cpp
1 /*
2  * AxWin4 Interface Library
3  * - By John Hodge (thePowersGang)
4  *
5  * window_drawing.cpp
6  * - Window drawing code
7  */
8 #include <axwin4/axwin.h>
9 #include "include/common.hpp"
10 #include <ipc_proto.hpp>
11 #include <algorithm>    // min
12
13 namespace AxWin {
14
15 extern "C" void AxWin4_DrawBitmap(tAxWin4_Window *Window, int X, int Y, unsigned int W, unsigned int H, void *Data)
16 {
17         // TODO: Split message up into blocks such that it can be dispatched
18         if( W > 128 )
19         {
20                 const uint32_t* data32 = static_cast<uint32_t*>(Data);
21                 const unsigned int rows_per_message = 2048 / W;
22                 for( unsigned int row = 0; row < H; row += rows_per_message )
23                 {
24                         CSerialiser     message;
25                         message.WriteU8(IPCMSG_PUSHDATA);
26                         message.WriteU16(Window->m_id);
27                         message.WriteU16(X);
28                         message.WriteU16(Y+row);
29                         message.WriteU16(W);
30                         message.WriteU16( ::std::min(rows_per_message,H-row) );
31                         message.WriteBuffer(W*4, data32);
32                         ::AxWin::SendMessage(message);
33                         data32 += W*rows_per_message;
34                 }
35         }
36         else
37         {
38                 CSerialiser     message;
39                 message.WriteU8(IPCMSG_PUSHDATA);
40                 message.WriteU16(Window->m_id);
41                 message.WriteU16(X);
42                 message.WriteU16(Y);
43                 message.WriteU16(W);
44                 message.WriteU16(H);
45                 message.WriteBuffer(W*H*4, Data);
46                 ::AxWin::SendMessage(message);
47         }
48 }
49
50 };      // namespace AxWin
51

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