Ver código fonte

Add insert/overwrite/reset to x11 backends

Robert Winkler 8 meses atrás
pai
commit
b4c29958b2

+ 7 - 3
demo/x11/nuklear_xlib.h

@@ -717,6 +717,7 @@ NK_API int
 nk_xlib_handle_event(Display *dpy, int screen, Window win, XEvent *evt)
 {
     struct nk_context *ctx = &xlib.ctx;
+    static int insert_toggle = 0;
 
     NK_UNUSED(screen);
 
@@ -776,11 +777,14 @@ nk_xlib_handle_event(Display *dpy, int screen, Window win, XEvent *evt)
                 nk_input_key(ctx, NK_KEY_TEXT_LINE_END, down);
             else if (*code == 'a' && (evt->xkey.state & ControlMask))
                 nk_input_key(ctx,NK_KEY_TEXT_SELECT_ALL, down);
-            else {
-                if (*code == 'i')
+            else if (*code == XK_Insert) {
+                if (down) insert_toggle = !insert_toggle;
+                if (insert_toggle) {
                     nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, down);
-                else if (*code == 'r')
+                } else {
                     nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, down);
+                }
+            } else {
                 if (down) {
                     char buf[32];
                     KeySym keysym = 0;

+ 8 - 4
demo/x11_opengl2/nuklear_xlib_gl2.h

@@ -240,6 +240,7 @@ NK_API int
 nk_x11_handle_event(XEvent *evt)
 {
     struct nk_context *ctx = &x11.ctx;
+    static int insert_toggle = 0;
 
     /* optional grabbing behavior */
     if (ctx->input.mouse.grab) {
@@ -267,7 +268,7 @@ nk_x11_handle_event(XEvent *evt)
         else if (*code == XK_Up)      nk_input_key(ctx, NK_KEY_UP, down);
         else if (*code == XK_Down)     nk_input_key(ctx, NK_KEY_DOWN, down);
         else if (*code == XK_BackSpace) nk_input_key(ctx, NK_KEY_BACKSPACE, down);
-        else if (*code == XK_space && !down) nk_input_char(ctx, ' ');
+        else if (*code == XK_Escape)    nk_input_key(ctx, NK_KEY_TEXT_RESET_MODE, down);
         else if (*code == XK_Page_Up)   nk_input_key(ctx, NK_KEY_SCROLL_UP, down);
         else if (*code == XK_Page_Down) nk_input_key(ctx, NK_KEY_SCROLL_DOWN, down);
         else if (*code == XK_Home) {
@@ -295,11 +296,14 @@ nk_x11_handle_event(XEvent *evt)
                 nk_input_key(ctx, NK_KEY_TEXT_LINE_START, down);
             else if (*code == 'e' && (evt->xkey.state & ControlMask))
                 nk_input_key(ctx, NK_KEY_TEXT_LINE_END, down);
-            else {
-                if (*code == 'i')
+            else if (*code == XK_Insert) {
+                if (down) insert_toggle = !insert_toggle;
+                if (insert_toggle) {
                     nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, down);
-                else if (*code == 'r')
+                } else {
                     nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, down);
+                }
+            } else {
                 if (down) {
                     char buf[32];
                     KeySym keysym = 0;

+ 8 - 4
demo/x11_opengl3/nuklear_xlib_gl3.h

@@ -607,6 +607,7 @@ NK_API int
 nk_x11_handle_event(XEvent *evt)
 {
     struct nk_context *ctx = &x11.ctx;
+    static int insert_toggle = 0;
 
     /* optional grabbing behavior */
     if (ctx->input.mouse.grab) {
@@ -634,7 +635,7 @@ nk_x11_handle_event(XEvent *evt)
         else if (*code == XK_Up)        nk_input_key(ctx, NK_KEY_UP, down);
         else if (*code == XK_Down)      nk_input_key(ctx, NK_KEY_DOWN, down);
         else if (*code == XK_BackSpace) nk_input_key(ctx, NK_KEY_BACKSPACE, down);
-        else if (*code == XK_space && !down) nk_input_char(ctx, ' ');
+        else if (*code == XK_Escape)    nk_input_key(ctx, NK_KEY_TEXT_RESET_MODE, down);
         else if (*code == XK_Page_Up)   nk_input_key(ctx, NK_KEY_SCROLL_UP, down);
         else if (*code == XK_Page_Down) nk_input_key(ctx, NK_KEY_SCROLL_DOWN, down);
         else if (*code == XK_Home) {
@@ -662,11 +663,14 @@ nk_x11_handle_event(XEvent *evt)
                 nk_input_key(ctx, NK_KEY_TEXT_LINE_START, down);
             else if (*code == 'e' && (evt->xkey.state & ControlMask))
                 nk_input_key(ctx, NK_KEY_TEXT_LINE_END, down);
-            else {
-                if (*code == 'i')
+            else if (*code == XK_Insert) {
+                if (down) insert_toggle = !insert_toggle;
+                if (insert_toggle) {
                     nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, down);
-                else if (*code == 'r')
+                } else {
                     nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, down);
+                }
+            } else {
                 if (down) {
                     char buf[32];
                     KeySym keysym = 0;

+ 7 - 3
demo/x11_xft/nuklear_xlib.h

@@ -802,6 +802,7 @@ NK_API int
 nk_xlib_handle_event(Display *dpy, int screen, Window win, XEvent *evt)
 {
     struct nk_context *ctx = &xlib.ctx;
+    static int insert_toggle = 0;
 
     NK_UNUSED(screen);
 
@@ -861,11 +862,14 @@ nk_xlib_handle_event(Display *dpy, int screen, Window win, XEvent *evt)
                 nk_input_key(ctx, NK_KEY_TEXT_LINE_END, down);
             else if (*code == 'a' && (evt->xkey.state & ControlMask))
                 nk_input_key(ctx,NK_KEY_TEXT_SELECT_ALL, down);
-            else {
-                if (*code == 'i')
+            else if (*code == XK_Insert) {
+                if (down) insert_toggle = !insert_toggle;
+                if (insert_toggle) {
                     nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, down);
-                else if (*code == 'r')
+                } else {
                     nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, down);
+                }
+            } else {
                 if (down) {
                     char buf[32];
                     KeySym keysym = 0;

+ 9 - 2
demo/xcb_cairo/nuklear_xcb.h

@@ -240,6 +240,7 @@ NK_API int nk_xcb_handle_event(struct nk_xcb_context *xcb_ctx, struct nk_context
 {
     int events = 0;
     xcb_generic_event_t *event;
+    static int insert_toggle = 0;
 
 #ifdef NK_XCB_MIN_FRAME_TIME
     struct timespec tp;
@@ -298,8 +299,14 @@ NK_API int nk_xcb_handle_event(struct nk_xcb_context *xcb_ctx, struct nk_context
                 case XK_Right:
                     nk_input_key(nk_ctx, NK_KEY_RIGHT, press);
                     break;
-                /* NK_KEY_TEXT_INSERT_MODE, */
-                /* NK_KEY_TEXT_REPLACE_MODE, */
+                case XK_Insert:
+                    if (press) insert_toggle = !insert_toggle;
+                    if (insert_toggle) {
+                        nk_input_key(nk_ctx, NK_KEY_TEXT_INSERT_MODE, press);
+                    } else {
+                        nk_input_key(nk_ctx, NK_KEY_TEXT_REPLACE_MODE, press);
+                    }
+                    break;
                 case XK_Escape:
                     nk_input_key(nk_ctx, NK_KEY_TEXT_RESET_MODE, press);
                     break;