*/}}
Browse Source

Baisc keyboard input should be okay.

YimingWu 1 year ago
parent
commit
003ccc5d6f
3 changed files with 45 additions and 20 deletions
  1. 40 15
      la_kernel.c
  2. 4 4
      la_util.h
  3. 1 1
      resources/la_properties.c

+ 40 - 15
la_kernel.c

@@ -305,7 +305,7 @@ void la_SetupGLEnviornment(laWindow* window, HWND hwnd, int Sync) {
 };
 SYSWINDOW la_CreateWindowWin32(int x, int y, int w, int h, char* title, int SyncToVBlank, SYSGLCONTEXT* r_glc) {
     HINSTANCE* inst = &MAIN.hinstance;
-    HWND hwnd = CreateWindow(LA_GUI_WNDCLASS_NAME, title, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+    HWND hwnd = CreateWindowW(LA_GUI_WNDCLASS_NAME, title, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
         x, y, w, h, 0, 0, *inst, 0);
     if (!hwnd) { int a = GetLastError(); printf("%d", a); return 0; }
 
@@ -624,7 +624,7 @@ int laGetReadyWith(int GLMajor, int GLMinor, int BufferSamples){
     wt.lpszClassName = LA_GUI_WNDCLASS_NAME;
     wt.lpszMenuName = 0;
     wt.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
-    if (!RegisterClassEx(&wt)) return 0;
+    if (!RegisterClassExW(&wt)) return 0;
 
     MAIN.GLMajor = GLMajor; MAIN.GLMinor = GLMinor; MAIN.BufferSamples = BufferSamples;
 
@@ -633,7 +633,7 @@ int laGetReadyWith(int GLMajor, int GLMinor, int BufferSamples){
     GLenum err;
     PIXELFORMATDESCRIPTOR pfd;
     HINSTANCE* hinst = &MAIN.hinstance;
-    HWND hwnd = CreateWindowEx(WS_EX_ACCEPTFILES, LA_GUI_WNDCLASS_NAME,
+    HWND hwnd = CreateWindowExW(WS_EX_ACCEPTFILES, LA_GUI_WNDCLASS_NAME,
         "Temp Window For Accessing GLEW!",
         WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, 0, 100, 100,
         0, 0, *hinst, 0);
@@ -1003,6 +1003,9 @@ void la_MakeSpecialKeyBit(SYSWINDOW hwnd,laWindow*wnd,laEvent *e,int use_last_po
     XQueryPointer(MAIN.dpy, wnd->win, &root_ret,&win_ret,&rrx,&rry,&rx,&ry,&rmask);
     e->SpecialKeyBit = ((rmask&ShiftMask)?LA_KEY_SHIFT:0)|((rmask&ControlMask)?LA_KEY_CTRL:0)|((rmask&Mod1Mask)?LA_KEY_ALT:0);
 #endif
+#ifdef _WIN32
+    e->SpecialKeyBit = ((GetKeyState(VK_SHIFT)&0x8000)?LA_KEY_SHIFT:0)|((GetKeyState(VK_CONTROL)&0x8000)?LA_KEY_CTRL:0)|((GetKeyState(VK_MENU)&0x8000)?LA_KEY_ALT:0);
+#endif
 }
 void la_SaveEvent(SYSWINDOW hwnd, laEvent *e, int use_last_pos){
     laListHandle *wl = &MAIN.Windows;
@@ -1064,6 +1067,21 @@ int la_TranslateSpecialKey(int keysym){
     default:           return keysym;
     }
 #endif
+#ifdef _WIN32
+    switch (keysym) {
+    case VK_RETURN:    return LA_KEY_ENTER;
+    case VK_ESCAPE:    return LA_KEY_ESCAPE;
+    case VK_TAB:       return LA_KEY_TAB;
+    case VK_LEFT:      return LA_KEY_ARRLEFT;
+    case VK_RIGHT:     return LA_KEY_ARRRIGHT;
+    case VK_UP:        return LA_KEY_ARRUP;
+    case VK_DOWN:      return LA_KEY_ARRDOWN;
+    case VK_CONTROL:   return LA_KEY_CTRL;
+    case VK_SHIFT:     return LA_KEY_SHIFT;
+    case VK_MENU:      return LA_KEY_ALT;
+    default:           return keysym;
+    }
+#endif
 }
 void la_SendMouseEvent(SYSWINDOW hwnd, int type, int x, int y){
     //if((type&LA_STATE_DOWN)&&(x!=MAIN.evLastX || y!=MAIN.evLastY)){
@@ -6493,7 +6511,9 @@ static void la_RecordWacomMotions(XIRawEvent *event)
 #ifdef _WIN32
 #define PARAM_2_FROM(p) LOWORD(p),HIWORD(p)
 LRESULT CALLBACK LA_WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) {
-    char buf[4] = { 0 };
+    static uint32_t ch = 0; static int lead = 0;
+    static wchar_t buf[10] = { 0 }; int adv;
+    char mbuf[10] = { 0 }; uint32_t uchar=0;
     short wheelmark = 0;
     int  WheelDir = 0;
     if (!hwnd) return DefWindowProc(hwnd, message, wparam, lparam);
@@ -6546,21 +6566,26 @@ LRESULT CALLBACK LA_WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
     //    if (lparam & 0x40000000) break;
     //    if (la_SendSpecialKey(hwnd, LA_STATE_DOWN, wparam))
     //        break;
-    //case WM_KEYDOWN:
-    //    if (lparam & 0x40000000) break;
-    //    la_SendSpecialKey(hwnd, LA_STATE_DOWN, wparam);
-    //    break;
-    //
+    case WM_KEYDOWN:
+        if (lparam & 0x40000000) break;
+        la_SendKeyboardEvent(hwnd, LA_KEY_DOWN, la_TranslateSpecialKey(wparam));
+        break;
+    case WM_KEYUP:
+        if (lparam & 0x40000000) break;
+        la_SendKeyboardEvent(hwnd, LA_KEY_UP, la_TranslateSpecialKey(wparam));
+        break;
+    
     //case WM_SYSKEYUP:
     //    if (la_SendSpecialKey(hwnd, LA_STATE_UP, wparam));
     //    break;
-    //case WM_KEYUP:
-    //    la_SendSpecialKey(hwnd, LA_STATE_UP, wparam);
-    //    break;
-
+    case WM_UNICHAR:
+        la_SendInputEvent(hwnd, wparam);
+        break;
+    case WM_IME_CHAR:
+        la_SendInputEvent(hwnd, wparam);
+        return 0;
     case WM_CHAR:
-        buf[0] = wparam;
-        //la_SendInputEvent(hwnd, buf);
+        la_SendInputEvent(hwnd, wparam);
         break;
 
     case WM_SHOWWINDOW:

+ 4 - 4
la_util.h

@@ -257,14 +257,14 @@ typedef struct _laStringPart laStringPart;
 struct _laStringPart {
 	laListItem  Item;
 	char *      Content;
-	int        IntValue;
-	real      FloatValue;
-	char       Type;
+	int         IntValue;
+	real        FloatValue;
+	char        Type;
 };
 
 STRUCTURE(laStringLine) {
 	laListItem Item;
-	wchar_t   Buf[1024];//unicode
+	uint32_t   Buf[1024];//unicode
 };
 
 STRUCTURE(laStringEdit) {

+ 1 - 1
resources/la_properties.c

@@ -350,7 +350,7 @@ void laget_LayoutTitle(laLayout *l, char *result){
 }
 void laset_LayoutTitle(laLayout *l, char *content){
     strSafeSet(&l->ID, content);
-    laRenameWindow(MAIN.CurrentWindow, l->ID->Ptr);
+    if(l->ID->Ptr) laRenameWindow(MAIN.CurrentWindow, l->ID->Ptr);
 }
 //void* laget_LayoutPanelFirst(laLayout* l) {
 //	return l->Panels.pFirst;