Usermode/AxWin3 - Working on keyboard input
[tpg/acess2.git] / Usermode / Applications / axwin3_src / WM / wm_input.c
index 66088f9..dc8d8ac 100644 (file)
@@ -13,6 +13,7 @@
 
 // === IMPORTS ===
 extern tWindow *gpWM_RootWindow;
+extern tWindow *gpWM_FocusedWindow;
 
 // === GLOBALS ===
 //! Window in which the mouse button was originally pressed
@@ -47,8 +48,8 @@ void WM_Input_MouseMoved(int OldX, int OldY, int NewX, int NewY)
        struct sWndMsg_MouseMove        msg;
        
        win = WM_int_GetWindowAtPos(OldX, OldY);
-       msg.X = NewX - win->X;
-       msg.Y = NewY - win->Y;
+       msg.X = NewX - win->X - win->BorderL;
+       msg.Y = NewY - win->Y - win->BorderT;
        msg.dX = NewX - OldX;
        msg.dY = NewY - OldY;
        WM_SendMessage(NULL, win, WNDMSG_MOUSEMOVE, sizeof(msg), &msg);
@@ -62,8 +63,8 @@ void WM_Input_MouseMoved(int OldX, int OldY, int NewX, int NewY)
        // TODO: Send mouseup to match mousedown if the cursor moves out of a window?
 
        win = newWin;
-       msg.X = NewX - win->X;
-       msg.Y = NewY - win->Y;
+       msg.X = NewX - win->X - win->BorderL;
+       msg.Y = NewY - win->Y - win->BorderT;
        msg.dX = NewX - OldX;
        msg.dY = NewY - OldY;
        WM_SendMessage(NULL, win, WNDMSG_MOUSEMOVE, sizeof(msg), &msg);
@@ -73,8 +74,8 @@ inline void WM_Input_int_SendBtnMsg(tWindow *Win, int X, int Y, int Index, int P
 {
        struct sWndMsg_MouseButton      msg;    
 
-       msg.X = X - Win->X;
-       msg.Y = Y - Win->Y;
+       msg.X = X - Win->X - Win->BorderL;
+       msg.Y = Y - Win->Y - Win->BorderT;
        msg.Button = Index;
        msg.bPressed = !!Pressed;
        
@@ -90,7 +91,7 @@ void WM_Input_MouseButton(int X, int Y, int ButtonIndex, int Pressed)
        // Handle press of primary button to change focus
        if( ButtonIndex == 0 && Pressed == 1 )
        {
-               _SysDebug("Gave focus to %p", win);
+//             _SysDebug("Gave focus to %p", win);
                WM_FocusWindow(win);
                WM_RaiseWindow(win);
        }
@@ -110,3 +111,27 @@ void WM_Input_MouseButton(int X, int Y, int ButtonIndex, int Pressed)
        WM_Input_int_SendBtnMsg(win, X, Y, ButtonIndex, Pressed);
 }
 
+void WM_Input_KeyDown(uint32_t Character, uint32_t Scancode)
+{
+       struct sWndMsg_KeyAction        msg;
+       msg.KeySym = Scancode;
+       msg.UCS32 = Character;
+       WM_SendMessage(NULL, gpWM_FocusedWindow, WNDMSG_KEYDOWN, sizeof(msg), &msg);
+}
+
+void WM_Input_KeyFire(uint32_t Character, uint32_t Scancode)
+{
+       struct sWndMsg_KeyAction        msg;
+       msg.KeySym = Scancode;
+       msg.UCS32 = Character;
+       WM_SendMessage(NULL, gpWM_FocusedWindow, WNDMSG_KEYFIRE, sizeof(msg), &msg);
+}
+
+void WM_Input_KeyUp(uint32_t Character, uint32_t Scancode)
+{
+       struct sWndMsg_KeyAction        msg;
+       msg.KeySym = Scancode;
+       msg.UCS32 = Character;
+       WM_SendMessage(NULL, gpWM_FocusedWindow, WNDMSG_KEYUP, sizeof(msg), &msg);
+}
+

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