2 * AxWin4 Interface Library
3 * - By John Hodge (thePowersGang)
8 #include <axwin4/axwin.h>
9 #include "include/common.hpp"
10 #include <ipc_proto.hpp>
17 static const int MAX_WINDOW_ID = 16;
18 static ::std::mutex glWindowList;
19 static ::std::vector<tAxWin4_Window*> gWindowList;
21 extern "C" tAxWin4_Window *AxWin4_CreateWindow(const char *Name)
23 // Allocate a window ID
24 ::std::lock_guard<std::mutex> lock(glWindowList);
25 int id = ::std::find(gWindowList.begin(), gWindowList.end(), nullptr) - gWindowList.end();
26 if( id >= MAX_WINDOW_ID ) {
27 throw ::std::runtime_error("AxWin4_CreateWindow - Out of IDs (TODO: Better exception)");
29 if( id == gWindowList.size() )
31 gWindowList.push_back(nullptr);
34 // Create window structure locally
35 tAxWin4_Window *ret = new tAxWin4_Window();
36 gWindowList[id] = ret;
38 // Request creation of window
40 message.WriteU8(IPCMSG_CREATEWIN);
41 message.WriteU16(ret->m_id);
42 message.WriteString(Name);
43 ::AxWin::SendMessage(message);
47 extern "C" void AxWin4_ShowWindow(tAxWin4_Window *Window, bool Show)
50 message.WriteU8(IPCMSG_SETWINATTR);
51 message.WriteU16(Window->m_id);
52 message.WriteU16(IPC_WINATTR_SHOW);
53 message.WriteU8( (Show ? 1 : 0) );
54 ::AxWin::SendMessage(message);
57 extern "C" void AxWin4_SetWindowFlags(tAxWin4_Window *Window, unsigned int Flags)
60 message.WriteU8(IPCMSG_SETWINATTR);
61 message.WriteU16(Window->m_id);
62 message.WriteU16(IPC_WINATTR_FLAGS);
63 message.WriteU8( Flags );
64 ::AxWin::SendMessage(message);
67 extern "C" void AxWin4_MoveWindow(tAxWin4_Window *Window, int X, int Y)
70 message.WriteU8(IPCMSG_SETWINATTR);
71 message.WriteU16(Window->m_id);
72 message.WriteU16(IPC_WINATTR_POSITION);
75 ::AxWin::SendMessage(message);
77 extern "C" void AxWin4_ResizeWindow(tAxWin4_Window *Window, unsigned int W, unsigned int H)
80 message.WriteU8(IPCMSG_SETWINATTR);
81 message.WriteU16(Window->m_id);
82 message.WriteU16(IPC_WINATTR_DIMENSIONS);
85 ::AxWin::SendMessage(message);
88 extern "C" void AxWin4_SetTitle(tAxWin4_Window *Window, const char *Title)
91 message.WriteU8(IPCMSG_SETWINATTR);
92 message.WriteU16(Window->m_id);
93 message.WriteU16(IPC_WINATTR_TITLE);
94 message.WriteString(Title);
95 ::AxWin::SendMessage(message);
98 extern "C" void *AxWin4_GetWindowBuffer(tAxWin4_Window *Window)
100 //if( !Window->m_buffer )
102 // // TODO: Support non-blocking operations
107 }; // namespace AxWin