x11 implementation
This commit is contained in:
		
							parent
							
								
									a514f7e9a2
								
							
						
					
					
						commit
						77f36a1f8e
					
				@ -586,6 +586,11 @@ endif
 | 
				
			|||||||
ifeq ($(API),win32)
 | 
					ifeq ($(API),win32)
 | 
				
			||||||
  APIOBJ = win32screen.o
 | 
					  APIOBJ = win32screen.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					ifeq ($(API),x11)
 | 
				
			||||||
 | 
					  APIOBJ = x11screen.o
 | 
				
			||||||
 | 
					  COPT += -DUSE_X11
 | 
				
			||||||
 | 
					  LOPT += -lX11
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#To enable Joystick emulation of cursor, make USE_JOYSTICK=1 (for input.o)
 | 
					#To enable Joystick emulation of cursor, make USE_JOYSTICK=1 (for input.o)
 | 
				
			||||||
#This can be necessary to test cursor code on a PC, but by default for all
 | 
					#This can be necessary to test cursor code on a PC, but by default for all
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										150
									
								
								src/input.c
									
									
									
									
									
								
							
							
						
						
									
										150
									
								
								src/input.c
									
									
									
									
									
								
							@ -31,6 +31,13 @@
 | 
				
			|||||||
  #include <shellapi.h>
 | 
					  #include <shellapi.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_X11
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <X11/Xlib.h>
 | 
				
			||||||
 | 
					#include <X11/XKBlib.h>
 | 
				
			||||||
 | 
					#include <X11/Xutil.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "global.h"
 | 
					#include "global.h"
 | 
				
			||||||
#include "keyboard.h"
 | 
					#include "keyboard.h"
 | 
				
			||||||
#include "screen.h"
 | 
					#include "screen.h"
 | 
				
			||||||
@ -41,6 +48,9 @@
 | 
				
			|||||||
#include "input.h"
 | 
					#include "input.h"
 | 
				
			||||||
#include "loadsave.h"
 | 
					#include "loadsave.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_X11
 | 
				
			||||||
 | 
					extern Display * X11_display;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(USE_SDL)
 | 
					#if defined(USE_SDL)
 | 
				
			||||||
#define RSUPER_EMULATES_META_MOD
 | 
					#define RSUPER_EMULATES_META_MOD
 | 
				
			||||||
@ -1215,6 +1225,146 @@ int Get_input(int sleep_time)
 | 
				
			|||||||
      WaitMessage();
 | 
					      WaitMessage();
 | 
				
			||||||
      KillTimer(NULL, timerId);
 | 
					      KillTimer(NULL, timerId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#elif defined(USE_X11)
 | 
				
			||||||
 | 
					    int user_feedback_required = 0; // Flag qui indique si on doit arrêter de traiter les évènements ou si on peut enchainer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Color_cycling();
 | 
				
			||||||
 | 
					    // Commit any pending screen update.
 | 
				
			||||||
 | 
					    // This is done in this function because it's called after reading 
 | 
				
			||||||
 | 
					    // some user input.
 | 
				
			||||||
 | 
					    Flush_update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Key_ANSI = 0;
 | 
				
			||||||
 | 
					    Key_UNICODE = 0;
 | 
				
			||||||
 | 
					    Key = 0;
 | 
				
			||||||
 | 
					    Mouse_moved=0;
 | 
				
			||||||
 | 
					    Input_new_mouse_X = Mouse_X;
 | 
				
			||||||
 | 
					    Input_new_mouse_Y = Mouse_Y;
 | 
				
			||||||
 | 
					    Input_new_mouse_K = Mouse_K;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    XFlush(X11_display);
 | 
				
			||||||
 | 
					    while(!user_feedback_required && XPending(X11_display) > 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      word mod = 0;
 | 
				
			||||||
 | 
					      XEvent event;
 | 
				
			||||||
 | 
					      XNextEvent(X11_display, &event);
 | 
				
			||||||
 | 
					      switch(event.type)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        case KeyPress:
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            KeySym sym;
 | 
				
			||||||
 | 
					            //printf("key code = %d state=0x%08x\n", event.xkey.keycode, event.xkey.state);
 | 
				
			||||||
 | 
					            // right/left window 40 Mod4Mask
 | 
				
			||||||
 | 
					            // left alt = 8         Mod1Mask
 | 
				
			||||||
 | 
					            // right alt = 80       Mod5Mask
 | 
				
			||||||
 | 
					            // NumLock = 10         Mod2Mask
 | 
				
			||||||
 | 
					            if (event.xkey.state & ShiftMask)
 | 
				
			||||||
 | 
					              mod |= MOD_SHIFT;
 | 
				
			||||||
 | 
					            if (event.xkey.state & ControlMask)
 | 
				
			||||||
 | 
					              mod |= MOD_CTRL;
 | 
				
			||||||
 | 
					            if (event.xkey.state & (Mod1Mask | Mod5Mask))
 | 
				
			||||||
 | 
					              mod |= MOD_ALT;
 | 
				
			||||||
 | 
					            if (event.xkey.state & Mod3Mask)
 | 
				
			||||||
 | 
					              mod |= MOD_META;
 | 
				
			||||||
 | 
					            //sym = XKeycodeToKeysym(X11_display, event.xkey.keycode, 0);
 | 
				
			||||||
 | 
					            sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, 0);
 | 
				
			||||||
 | 
					            //printf("sym = %04lx %s\t\tmod=%04x\n", sym, XKeysymToString(sym), mod);
 | 
				
			||||||
 | 
					            Key = mod | (sym & 0x0fff);
 | 
				
			||||||
 | 
					            //sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, event.xkey.state);
 | 
				
			||||||
 | 
					            if ((sym & 0xf000) != 0xf000) // test for standard key
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              int count;
 | 
				
			||||||
 | 
					              char buffer[16];
 | 
				
			||||||
 | 
					              static XComposeStatus status;
 | 
				
			||||||
 | 
					              count = XLookupString(&event.xkey, buffer, sizeof(buffer),
 | 
				
			||||||
 | 
					                                    &sym, &status);
 | 
				
			||||||
 | 
					              //printf(" sym = %04lx %s  %d %s\n", sym, XKeysymToString(sym), count, buffer);
 | 
				
			||||||
 | 
					              Key_UNICODE = sym;
 | 
				
			||||||
 | 
					              if (sym < 0x100)
 | 
				
			||||||
 | 
					                Key_ANSI = sym;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            user_feedback_required = 1;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case ButtonPress: // left = 1, middle = 2, right = 3, wheelup = 4, wheeldown = 5
 | 
				
			||||||
 | 
					          //printf("Press button = %d state = 0x%08x\n", event.xbutton.button, event.xbutton.state);
 | 
				
			||||||
 | 
					          if (event.xkey.state & ShiftMask)
 | 
				
			||||||
 | 
					            mod |= MOD_SHIFT;
 | 
				
			||||||
 | 
					          if (event.xkey.state & ControlMask)
 | 
				
			||||||
 | 
					            mod |= MOD_CTRL;
 | 
				
			||||||
 | 
					          if (event.xkey.state & (Mod1Mask | Mod5Mask))
 | 
				
			||||||
 | 
					            mod |= MOD_ALT;
 | 
				
			||||||
 | 
					          if (event.xkey.state & Mod3Mask)
 | 
				
			||||||
 | 
					            mod |= MOD_META;
 | 
				
			||||||
 | 
					          switch(event.xbutton.button)
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            case 1:
 | 
				
			||||||
 | 
					            case 3:
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                byte mask = 1;
 | 
				
			||||||
 | 
					                if(event.xbutton.button == 3)
 | 
				
			||||||
 | 
					                  mask ^= 3;
 | 
				
			||||||
 | 
					                if (Button_inverter)
 | 
				
			||||||
 | 
					                  mask ^= 3;
 | 
				
			||||||
 | 
					                Input_new_mouse_K |= mask;
 | 
				
			||||||
 | 
					                user_feedback_required = Move_cursor_with_constraints();
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					            case 2:
 | 
				
			||||||
 | 
					              Key = KEY_MOUSEMIDDLE | mod;
 | 
				
			||||||
 | 
					              user_feedback_required = 1;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					            case 4:
 | 
				
			||||||
 | 
					              Key = KEY_MOUSEWHEELUP | mod;
 | 
				
			||||||
 | 
					              user_feedback_required = 1;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					            case 5:
 | 
				
			||||||
 | 
					              Key = KEY_MOUSEWHEELDOWN | mod;
 | 
				
			||||||
 | 
					              user_feedback_required = 1;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case ButtonRelease:
 | 
				
			||||||
 | 
					          //printf("Release button = %d\n", event.xbutton.button);
 | 
				
			||||||
 | 
					          if(event.xbutton.button == 1 || event.xbutton.button == 3)
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            byte mask = 1;
 | 
				
			||||||
 | 
					            if(event.xbutton.button == 3)
 | 
				
			||||||
 | 
					              mask ^= 3;
 | 
				
			||||||
 | 
					            if (Button_inverter)
 | 
				
			||||||
 | 
					              mask ^= 3;
 | 
				
			||||||
 | 
					            Input_new_mouse_K &= ~mask;
 | 
				
			||||||
 | 
					            user_feedback_required = Move_cursor_with_constraints();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case MotionNotify:
 | 
				
			||||||
 | 
					          //printf("mouse %dx%d\n", event.xmotion.x, event.xmotion.y);
 | 
				
			||||||
 | 
					          Input_new_mouse_X = (event.xmotion.x < 0) ? 0 : event.xmotion.x/Pixel_width;
 | 
				
			||||||
 | 
					          Input_new_mouse_Y = (event.xmotion.y < 0) ? 0 : event.xmotion.y/Pixel_height;
 | 
				
			||||||
 | 
					          user_feedback_required = Move_cursor_with_constraints();
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case Expose:
 | 
				
			||||||
 | 
					          printf("Expose (%d,%d) (%d,%d)\n", event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height);
 | 
				
			||||||
 | 
					          Update_rect(event.xexpose.x, event.xexpose.y,
 | 
				
			||||||
 | 
					                      event.xexpose.width, event.xexpose.height);
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					          printf("event.type = %d\n", event.type);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // If the cursor was moved since last update,
 | 
				
			||||||
 | 
					    // it was erased, so we need to redraw it (with the preview brush)
 | 
				
			||||||
 | 
					    if (Mouse_moved)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      Compute_paintbrush_coordinates();
 | 
				
			||||||
 | 
					      Display_cursor();
 | 
				
			||||||
 | 
					      return 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (user_feedback_required)
 | 
				
			||||||
 | 
					      return 1;
 | 
				
			||||||
 | 
					    // Nothing significant happened
 | 
				
			||||||
 | 
					    if (sleep_time)
 | 
				
			||||||
 | 
					      usleep(1000 * sleep_time);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -810,12 +810,14 @@ word Key_for_scancode(word scancode)
 | 
				
			|||||||
word Get_Key_modifiers(void)
 | 
					word Get_Key_modifiers(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  word mod = 0;
 | 
					  word mod = 0;
 | 
				
			||||||
 | 
					#if defined(WIN32)
 | 
				
			||||||
  if (GetKeyState(VK_SHIFT) & 0x8000)
 | 
					  if (GetKeyState(VK_SHIFT) & 0x8000)
 | 
				
			||||||
    mod |= MOD_SHIFT;
 | 
					    mod |= MOD_SHIFT;
 | 
				
			||||||
  if (GetKeyState(VK_CONTROL) & 0x8000)
 | 
					  if (GetKeyState(VK_CONTROL) & 0x8000)
 | 
				
			||||||
    mod |= MOD_CTRL;
 | 
					    mod |= MOD_CTRL;
 | 
				
			||||||
  if (GetKeyState(VK_MENU) & 0x8000)
 | 
					  if (GetKeyState(VK_MENU) & 0x8000)
 | 
				
			||||||
    mod |= MOD_ALT;
 | 
					    mod |= MOD_ALT;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
  return mod;
 | 
					  return mod;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										105
									
								
								src/keycodes.h
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								src/keycodes.h
									
									
									
									
									
								
							@ -26,12 +26,16 @@
 | 
				
			|||||||
#include <SDL.h>
 | 
					#include <SDL.h>
 | 
				
			||||||
#elif defined(WIN32)
 | 
					#elif defined(WIN32)
 | 
				
			||||||
#include <windows.h>
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					#elif defined(USE_X11)
 | 
				
			||||||
 | 
					#include <X11/keysym.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(USE_SDL)
 | 
					#if defined(USE_SDL)
 | 
				
			||||||
#define K2K(x) (x)
 | 
					#define K2K(x) (x)
 | 
				
			||||||
#elif defined(USE_SDL2)
 | 
					#elif defined(USE_SDL2)
 | 
				
			||||||
#define K2K(x) ((((x) & 0x40000000) >> 19) | ((x) & 0x1FF))
 | 
					#define K2K(x) ((((x) & 0x40000000) >> 19) | ((x) & 0x1FF))
 | 
				
			||||||
 | 
					#elif defined(USE_X11)
 | 
				
			||||||
 | 
					#define K2K(x) ((x) & 0x0FFF)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* generated lists */
 | 
					/* generated lists */
 | 
				
			||||||
@ -150,6 +154,107 @@
 | 
				
			|||||||
#define KEY_F11          K2K(SDLK_F11)
 | 
					#define KEY_F11          K2K(SDLK_F11)
 | 
				
			||||||
#define KEY_F12          K2K(SDLK_F12)
 | 
					#define KEY_F12          K2K(SDLK_F12)
 | 
				
			||||||
// end of KEY definitions for SDL and SDL2
 | 
					// end of KEY definitions for SDL and SDL2
 | 
				
			||||||
 | 
					#elif defined(USE_X11)
 | 
				
			||||||
 | 
					// KEY definitions for x11
 | 
				
			||||||
 | 
					#define KEY_UNKNOWN      0
 | 
				
			||||||
 | 
					#define KEY_ESCAPE       K2K(XK_Escape)
 | 
				
			||||||
 | 
					#define KEY_RETURN       K2K(XK_Return)
 | 
				
			||||||
 | 
					#define KEY_BACKSPACE    K2K(XK_BackSpace)
 | 
				
			||||||
 | 
					#define KEY_TAB          K2K(XK_Tab)
 | 
				
			||||||
 | 
					#define KEY_UP           K2K(XK_Up)
 | 
				
			||||||
 | 
					#define KEY_DOWN         K2K(XK_Down)
 | 
				
			||||||
 | 
					#define KEY_LEFT         K2K(XK_Left)
 | 
				
			||||||
 | 
					#define KEY_RIGHT        K2K(XK_Right)
 | 
				
			||||||
 | 
					#define KEY_LEFTBRACKET  K2K(XK_bracketleft)
 | 
				
			||||||
 | 
					#define KEY_RIGHTBRACKET K2K(XK_bracketright)
 | 
				
			||||||
 | 
					#define KEY_INSERT       K2K(XK_Insert)
 | 
				
			||||||
 | 
					#define KEY_DELETE       K2K(XK_Delete)
 | 
				
			||||||
 | 
					#define KEY_COMMA        K2K(XK_comma)
 | 
				
			||||||
 | 
					#define KEY_BACKQUOTE    K2K(XK_grave)
 | 
				
			||||||
 | 
					#define KEY_PAGEUP       K2K(XK_Page_Up)
 | 
				
			||||||
 | 
					#define KEY_PAGEDOWN     K2K(XK_Page_Down)
 | 
				
			||||||
 | 
					#define KEY_HOME         K2K(XK_Home)
 | 
				
			||||||
 | 
					#define KEY_END          K2K(XK_End)
 | 
				
			||||||
 | 
					#define KEY_KP_PLUS      K2K(XK_KP_Add)
 | 
				
			||||||
 | 
					#define KEY_KP_MINUS     K2K(XK_KP_Subtract)
 | 
				
			||||||
 | 
					#define KEY_KP_MULTIPLY  K2K(XK_KP_Multiply)
 | 
				
			||||||
 | 
					#define KEY_KP_ENTER     K2K(XK_KP_Enter)
 | 
				
			||||||
 | 
					#define KEY_KP_DIVIDE    K2K(XK_KP_Divide)
 | 
				
			||||||
 | 
					#define KEY_KP_PERIOD    K2K(XK_KP_Decimal)
 | 
				
			||||||
 | 
					#define KEY_KP_EQUALS    K2K(XK_KP_Equal)
 | 
				
			||||||
 | 
					#define KEY_EQUALS       K2K(XK_equal)
 | 
				
			||||||
 | 
					#define KEY_MINUS        K2K(XK_minus)
 | 
				
			||||||
 | 
					#define KEY_PERIOD       K2K(XK_period)
 | 
				
			||||||
 | 
					#define KEY_CAPSLOCK     K2K(XK_Caps_Lock)
 | 
				
			||||||
 | 
					#define KEY_CLEAR        K2K(XK_Clear)
 | 
				
			||||||
 | 
					#define KEY_SPACE        K2K(XK_space)
 | 
				
			||||||
 | 
					#define KEY_PAUSE        K2K(XK_Pause)
 | 
				
			||||||
 | 
					#define KEY_LSHIFT       K2K(XK_Shift_L)
 | 
				
			||||||
 | 
					#define KEY_RSHIFT       K2K(XK_Shift_R)
 | 
				
			||||||
 | 
					#define KEY_LCTRL        K2K(XK_Control_L)
 | 
				
			||||||
 | 
					#define KEY_RCTRL        K2K(XK_Control_R)
 | 
				
			||||||
 | 
					#define KEY_LALT         K2K(XK_Alt_L)
 | 
				
			||||||
 | 
					#define KEY_RALT         K2K(XK_Alt_R)
 | 
				
			||||||
 | 
					#define KEY_0            K2K(XK_0)
 | 
				
			||||||
 | 
					#define KEY_1            K2K(XK_1)
 | 
				
			||||||
 | 
					#define KEY_2            K2K(XK_2)
 | 
				
			||||||
 | 
					#define KEY_3            K2K(XK_3)
 | 
				
			||||||
 | 
					#define KEY_4            K2K(XK_4)
 | 
				
			||||||
 | 
					#define KEY_5            K2K(XK_5)
 | 
				
			||||||
 | 
					#define KEY_6            K2K(XK_6)
 | 
				
			||||||
 | 
					#define KEY_7            K2K(XK_7)
 | 
				
			||||||
 | 
					#define KEY_8            K2K(XK_8)
 | 
				
			||||||
 | 
					#define KEY_9            K2K(XK_9)
 | 
				
			||||||
 | 
					#define KEY_a            K2K(XK_a)
 | 
				
			||||||
 | 
					#define KEY_b            K2K(XK_b)
 | 
				
			||||||
 | 
					#define KEY_c            K2K(XK_c)
 | 
				
			||||||
 | 
					#define KEY_d            K2K(XK_d)
 | 
				
			||||||
 | 
					#define KEY_e            K2K(XK_e)
 | 
				
			||||||
 | 
					#define KEY_f            K2K(XK_f)
 | 
				
			||||||
 | 
					#define KEY_g            K2K(XK_g)
 | 
				
			||||||
 | 
					#define KEY_h            K2K(XK_h)
 | 
				
			||||||
 | 
					#define KEY_i            K2K(XK_i)
 | 
				
			||||||
 | 
					#define KEY_j            K2K(XK_j)
 | 
				
			||||||
 | 
					#define KEY_k            K2K(XK_k)
 | 
				
			||||||
 | 
					#define KEY_l            K2K(XK_l)
 | 
				
			||||||
 | 
					#define KEY_m            K2K(XK_m)
 | 
				
			||||||
 | 
					#define KEY_n            K2K(XK_n)
 | 
				
			||||||
 | 
					#define KEY_o            K2K(XK_o)
 | 
				
			||||||
 | 
					#define KEY_p            K2K(XK_p)
 | 
				
			||||||
 | 
					#define KEY_q            K2K(XK_q)
 | 
				
			||||||
 | 
					#define KEY_r            K2K(XK_r)
 | 
				
			||||||
 | 
					#define KEY_s            K2K(XK_s)
 | 
				
			||||||
 | 
					#define KEY_t            K2K(XK_t)
 | 
				
			||||||
 | 
					#define KEY_u            K2K(XK_u)
 | 
				
			||||||
 | 
					#define KEY_v            K2K(XK_v)
 | 
				
			||||||
 | 
					#define KEY_w            K2K(XK_w)
 | 
				
			||||||
 | 
					#define KEY_x            K2K(XK_x)
 | 
				
			||||||
 | 
					#define KEY_y            K2K(XK_y)
 | 
				
			||||||
 | 
					#define KEY_z            K2K(XK_z)
 | 
				
			||||||
 | 
					#define KEY_KP0          K2K(XK_KP_0)
 | 
				
			||||||
 | 
					#define KEY_KP1          K2K(XK_KP_1)
 | 
				
			||||||
 | 
					#define KEY_KP2          K2K(XK_KP_2)
 | 
				
			||||||
 | 
					#define KEY_KP3          K2K(XK_KP_3)
 | 
				
			||||||
 | 
					#define KEY_KP4          K2K(XK_KP_4)
 | 
				
			||||||
 | 
					#define KEY_KP5          K2K(XK_KP_5)
 | 
				
			||||||
 | 
					#define KEY_KP6          K2K(XK_KP_6)
 | 
				
			||||||
 | 
					#define KEY_KP7          K2K(XK_KP_7)
 | 
				
			||||||
 | 
					#define KEY_KP8          K2K(XK_KP_8)
 | 
				
			||||||
 | 
					#define KEY_KP9          K2K(XK_KP_9)
 | 
				
			||||||
 | 
					#define KEY_SCROLLOCK    K2K(XK_Scroll_Lock)
 | 
				
			||||||
 | 
					#define KEY_F1           K2K(XK_F1)
 | 
				
			||||||
 | 
					#define KEY_F2           K2K(XK_F2)
 | 
				
			||||||
 | 
					#define KEY_F3           K2K(XK_F3)
 | 
				
			||||||
 | 
					#define KEY_F4           K2K(XK_F4)
 | 
				
			||||||
 | 
					#define KEY_F5           K2K(XK_F5)
 | 
				
			||||||
 | 
					#define KEY_F6           K2K(XK_F6)
 | 
				
			||||||
 | 
					#define KEY_F7           K2K(XK_F7)
 | 
				
			||||||
 | 
					#define KEY_F8           K2K(XK_F8)
 | 
				
			||||||
 | 
					#define KEY_F9           K2K(XK_F9)
 | 
				
			||||||
 | 
					#define KEY_F10          K2K(XK_F10)
 | 
				
			||||||
 | 
					#define KEY_F11          K2K(XK_F11)
 | 
				
			||||||
 | 
					#define KEY_F12          K2K(XK_F12)
 | 
				
			||||||
 | 
					// end of KEY definitions for x11
 | 
				
			||||||
#elif defined(WIN32)
 | 
					#elif defined(WIN32)
 | 
				
			||||||
// KEY definitions for win32
 | 
					// KEY definitions for win32
 | 
				
			||||||
#define KEY_UNKNOWN      0
 | 
					#define KEY_UNKNOWN      0
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										256
									
								
								src/x11screen.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								src/x11screen.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,256 @@
 | 
				
			|||||||
 | 
					/* vim:expandtab:ts=2 sw=2:
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					/*  Grafx2 - The Ultimate 256-color bitmap paint program
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Copyright 2018 Thomas Bernard
 | 
				
			||||||
 | 
					    Copyright 2008 Yves Rizoud
 | 
				
			||||||
 | 
					    Copyright 2007 Adrien Destugues
 | 
				
			||||||
 | 
					    Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Grafx2 is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					    modify it under the terms of the GNU General Public License
 | 
				
			||||||
 | 
					    as published by the Free Software Foundation; version 2
 | 
				
			||||||
 | 
					    of the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Grafx2 is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					    GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					    along with Grafx2; if not, see <http://www.gnu.org/licenses/>
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <X11/Xlib.h>
 | 
				
			||||||
 | 
					#include <X11/Xutil.h>
 | 
				
			||||||
 | 
					#include "screen.h"
 | 
				
			||||||
 | 
					#include "gfx2surface.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Display * X11_display = NULL;
 | 
				
			||||||
 | 
					static Window X11_window = 0;
 | 
				
			||||||
 | 
					static XImage * X11_image = NULL;
 | 
				
			||||||
 | 
					static char * image_pixels = NULL;
 | 
				
			||||||
 | 
					static XTextProperty windowName;
 | 
				
			||||||
 | 
					static GC X11_gc = 0;
 | 
				
			||||||
 | 
					static T_GFX2_Surface * screen = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GFX2_Set_mode(int *width, int *height, int fullscreen)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int s;
 | 
				
			||||||
 | 
					  int depth;
 | 
				
			||||||
 | 
					  unsigned long white, black;
 | 
				
			||||||
 | 
					  char * winName[] = { "GrafX2" };
 | 
				
			||||||
 | 
					  Visual * visual;
 | 
				
			||||||
 | 
					  const char blank_data[1] = { 0 };
 | 
				
			||||||
 | 
					  Pixmap blank;
 | 
				
			||||||
 | 
					  Cursor cursor;
 | 
				
			||||||
 | 
					  XColor dummy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (X11_display == NULL)
 | 
				
			||||||
 | 
					    X11_display = XOpenDisplay(NULL);//getenv("DISPLAY")
 | 
				
			||||||
 | 
					  if (X11_display == NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    fprintf(stderr, "X11: cannot open display\n");
 | 
				
			||||||
 | 
					    exit(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  s = DefaultScreen(X11_display);
 | 
				
			||||||
 | 
					  black = BlackPixel(X11_display, s);
 | 
				
			||||||
 | 
					  white = WhitePixel(X11_display, s);
 | 
				
			||||||
 | 
					  visual = DefaultVisual(X11_display, s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					    int count = 0;
 | 
				
			||||||
 | 
					    int * depths = XListDepths(X11_display, s, &count);
 | 
				
			||||||
 | 
					    printf("DefaultDepth = %d, DisplayPlanes = %d\n", DefaultDepth(X11_display, s), DisplayPlanes(X11_display, s));
 | 
				
			||||||
 | 
					    if (depths != NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      for (i = 0; i < count; i++)
 | 
				
			||||||
 | 
					        printf(" %d", depths[i]);
 | 
				
			||||||
 | 
					      printf("\n");
 | 
				
			||||||
 | 
					      XFree(depths);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  depth = DisplayPlanes(X11_display, s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  X11_window = XCreateSimpleWindow(X11_display, RootWindow(X11_display, s),
 | 
				
			||||||
 | 
					                                   0, 0, *width, *height, 0, white, black);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // create blank 1x1 pixmap to make a 1x1 transparent cursor
 | 
				
			||||||
 | 
					  blank = XCreateBitmapFromData(X11_display, X11_window, blank_data, 1, 1);
 | 
				
			||||||
 | 
					  cursor = XCreatePixmapCursor(X11_display, blank, blank, &dummy, &dummy, 0, 0);
 | 
				
			||||||
 | 
					  //cursor = XCreateFontCursor(X11_display, 130 /*XC_tcross*/);
 | 
				
			||||||
 | 
					  XDefineCursor(X11_display, X11_window, cursor);
 | 
				
			||||||
 | 
					  XFreePixmap(X11_display, blank);
 | 
				
			||||||
 | 
					  XFreeCursor(X11_display, cursor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  X11_gc = XCreateGC(X11_display, X11_window, 0, NULL);
 | 
				
			||||||
 | 
					  XSetFunction(X11_display, X11_gc, GXcopy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  XStringListToTextProperty(winName, 1, &windowName);
 | 
				
			||||||
 | 
					  XSetWMName(X11_display, X11_window, &windowName);
 | 
				
			||||||
 | 
					  // TODO : set icon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  screen = New_GFX2_Surface(*width, *height);
 | 
				
			||||||
 | 
					  memset(screen->pixels, 0, *width * *height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  image_pixels = malloc(*height * *width * 4);
 | 
				
			||||||
 | 
					  memset(image_pixels, 64, *height * *width * 4);
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int i;
 | 
				
			||||||
 | 
					for (i= 3*8; i < (*height * *width * 4); i += *width * 4)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					image_pixels[i+0] = 0;  // B
 | 
				
			||||||
 | 
					image_pixels[i+1] = 0;  // G
 | 
				
			||||||
 | 
					image_pixels[i+2] = 0;  // R
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					  X11_image = XCreateImage(X11_display, visual, depth,
 | 
				
			||||||
 | 
					                           ZPixmap, 0, image_pixels, *width, *height,
 | 
				
			||||||
 | 
					                           32, 0/**width * 4*/);
 | 
				
			||||||
 | 
					  if(X11_image == NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    fprintf(stderr, "XCreateImage failed\n");
 | 
				
			||||||
 | 
					    exit(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  XSelectInput(X11_display, X11_window,
 | 
				
			||||||
 | 
					               PointerMotionMask | ButtonPressMask | ButtonReleaseMask | KeyPressMask | ExposureMask | StructureNotifyMask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  XMapWindow(X11_display, X11_window);
 | 
				
			||||||
 | 
					  XFlush(X11_display);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					byte Get_Screen_pixel(int x, int y)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if(screen == NULL) return 0;
 | 
				
			||||||
 | 
					  return screen->pixels[x + y * screen->w];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Set_Screen_pixel(int x, int y, byte value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if(screen == NULL) return;
 | 
				
			||||||
 | 
					  screen->pixels[x + y * screen->w] = value;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					byte* Get_Screen_pixel_ptr(int x, int y)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if(screen == NULL) return NULL;
 | 
				
			||||||
 | 
					  return screen->pixels + x + y * screen->w;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Screen_FillRect(int x, int y, int w, int h, byte color)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i;
 | 
				
			||||||
 | 
					  byte * ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (x < 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    w += x;
 | 
				
			||||||
 | 
					    x = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (y < 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    h += y;
 | 
				
			||||||
 | 
					    y = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (x > screen->w || y > screen->h)
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  if ((x + w) > screen->w)
 | 
				
			||||||
 | 
					    w = screen->w - x;
 | 
				
			||||||
 | 
					  if ((y + h) > screen->h)
 | 
				
			||||||
 | 
					    h = screen->h - y;
 | 
				
			||||||
 | 
					  if (w <= 0 || h <= 0)
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  for (i = 0; i < h; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    ptr = Get_Screen_pixel_ptr(x, y + i);
 | 
				
			||||||
 | 
					    memset(ptr, color, w);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int SetPalette(const T_Components * colors, int firstcolor, int ncolors)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (screen == NULL) return 0;
 | 
				
			||||||
 | 
					  memcpy(screen->palette + firstcolor, colors, ncolors * sizeof(T_Components));
 | 
				
			||||||
 | 
					  return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Update_rect(short x, short y, unsigned short width, unsigned short height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int line, i;
 | 
				
			||||||
 | 
					  if (screen == NULL || X11_image == NULL) return;
 | 
				
			||||||
 | 
					  x *= Pixel_width;
 | 
				
			||||||
 | 
					  width *= Pixel_width;
 | 
				
			||||||
 | 
					  y *= Pixel_height;
 | 
				
			||||||
 | 
					  height *= Pixel_height;
 | 
				
			||||||
 | 
					//printf("Update_rect(%d %d %d %d) %d %d\n", x, y, width, height, screen->w, screen->h);
 | 
				
			||||||
 | 
					  if (y >= screen->h || x >= screen->w) return;
 | 
				
			||||||
 | 
					  if (y + height > screen->h)
 | 
				
			||||||
 | 
					    height = screen->h - y;
 | 
				
			||||||
 | 
					  if (x + width > screen->w)
 | 
				
			||||||
 | 
					    width = screen->w - x;
 | 
				
			||||||
 | 
					  for (line = y; line < y + height; line++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
					    const byte * src = Get_Screen_pixel_ptr(x, line);
 | 
				
			||||||
 | 
					    byte * dest = image_pixels + line * X11_image->bytes_per_line + x * 4,
 | 
				
			||||||
 | 
					    i = width;
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      dest[0] = screen->palette[*src].B;
 | 
				
			||||||
 | 
					      dest[1] = screen->palette[*src].G;
 | 
				
			||||||
 | 
					      dest[2] = screen->palette[*src].R;
 | 
				
			||||||
 | 
					      dest[3] = 0;
 | 
				
			||||||
 | 
					      src++;
 | 
				
			||||||
 | 
					      dest += 4;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    while(--i > 0);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    for (i = 0; i < width; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      byte v = Get_Screen_pixel(x + i, line);
 | 
				
			||||||
 | 
					      XPutPixel(X11_image, x + i, line,
 | 
				
			||||||
 | 
					                (unsigned)screen->palette[v].R << 16 | (unsigned)screen->palette[v].G << 8 | (unsigned)screen->palette[v].B);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  XPutImage(X11_display, X11_window, X11_gc, X11_image,
 | 
				
			||||||
 | 
					            x, y, x, y, width, height);
 | 
				
			||||||
 | 
					  //XPutImage(X11_display, X11_window, X11_gc, X11_image,
 | 
				
			||||||
 | 
					  //          0, 0, 0, 0, X11_image->width, X11_image->height);
 | 
				
			||||||
 | 
					  //XSync(X11_display, False);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Flush_update(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (X11_display != NULL)
 | 
				
			||||||
 | 
					    XFlush(X11_display);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Update_status_line(short char_pos, short width)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  Update_rect((18+char_pos*8)*Menu_factor_X*Pixel_width, Menu_status_Y*Pixel_height,
 | 
				
			||||||
 | 
					              width*8*Menu_factor_X*Pixel_width, 8*Menu_factor_Y*Pixel_height);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Clear_border(byte color)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					(void)color;//TODO
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					volatile int Allow_colorcycling = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Activates or desactivates file drag-dropping in program window.
 | 
				
			||||||
 | 
					void Allow_drag_and_drop(int flag)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					(void)flag;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Define_icon(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -42,6 +42,31 @@ win32vk = {
 | 
				
			|||||||
'RALT': 'RMENU',
 | 
					'RALT': 'RMENU',
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					x11xk = {
 | 
				
			||||||
 | 
					'BACKSPACE': 'BackSpace',
 | 
				
			||||||
 | 
					'CAPSLOCK': 'Caps_Lock',
 | 
				
			||||||
 | 
					'PAGEUP': 'Page_Up',
 | 
				
			||||||
 | 
					'PAGEDOWN': 'Page_Down',
 | 
				
			||||||
 | 
					'BACKQUOTE': 'grave',
 | 
				
			||||||
 | 
					'KP_PLUS': 'KP_Add',
 | 
				
			||||||
 | 
					'KP_MINUS': 'KP_Subtract',
 | 
				
			||||||
 | 
					'KP_EQUALS': 'KP_Equal',
 | 
				
			||||||
 | 
					'KP_PERIOD': 'KP_Decimal',
 | 
				
			||||||
 | 
					'COMMA': 'comma',
 | 
				
			||||||
 | 
					'SPACE': 'space',
 | 
				
			||||||
 | 
					'EQUALS': 'equal',
 | 
				
			||||||
 | 
					'MINUS': 'minus',
 | 
				
			||||||
 | 
					'PERIOD': 'period',
 | 
				
			||||||
 | 
					'LEFTBRACKET': 'bracketleft',
 | 
				
			||||||
 | 
					'RIGHTBRACKET': 'bracketright',
 | 
				
			||||||
 | 
					'LCTRL': 'Control_L',
 | 
				
			||||||
 | 
					'RCTRL': 'Control_R',
 | 
				
			||||||
 | 
					'LALT': 'Alt_L',
 | 
				
			||||||
 | 
					'RALT': 'Alt_R',
 | 
				
			||||||
 | 
					'LSHIFT': 'Shift_L',
 | 
				
			||||||
 | 
					'RSHIFT': 'Shift_R',
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def keycode_def(section, key, index, native_key=None):
 | 
					def keycode_def(section, key, index, native_key=None):
 | 
				
			||||||
	if native_key is None:
 | 
						if native_key is None:
 | 
				
			||||||
		native_key = key
 | 
							native_key = key
 | 
				
			||||||
@ -56,6 +81,13 @@ def keycode_def(section, key, index, native_key=None):
 | 
				
			|||||||
			return '#define KEY_%-12s 0\n' % (key)
 | 
								return '#define KEY_%-12s 0\n' % (key)
 | 
				
			||||||
		else:
 | 
							else:
 | 
				
			||||||
			return '#define KEY_%-12s VK_%s\n' % (key, native_key)
 | 
								return '#define KEY_%-12s VK_%s\n' % (key, native_key)
 | 
				
			||||||
 | 
						elif section == 'x11':
 | 
				
			||||||
 | 
							if native_key[0:3] == 'Kp_':
 | 
				
			||||||
 | 
								native_key = 'KP_' + native_key[3:]
 | 
				
			||||||
 | 
							if key == 'UNKNOWN':
 | 
				
			||||||
 | 
								return '#define KEY_%-12s 0\n' % (key)
 | 
				
			||||||
 | 
							else:
 | 
				
			||||||
 | 
								return '#define KEY_%-12s K2K(XK_%s)\n' % (key, native_key)
 | 
				
			||||||
	else:
 | 
						else:
 | 
				
			||||||
		return '#define KEY_%-12s %d\n' % (key, index)
 | 
							return '#define KEY_%-12s %d\n' % (key, index)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -65,6 +97,11 @@ def add_keycodes_defs(section, lines):
 | 
				
			|||||||
	for key in keys:
 | 
						for key in keys:
 | 
				
			||||||
		if section == 'win32' and key in win32vk:
 | 
							if section == 'win32' and key in win32vk:
 | 
				
			||||||
			lines.append(keycode_def(section, key, i, win32vk[key]))
 | 
								lines.append(keycode_def(section, key, i, win32vk[key]))
 | 
				
			||||||
 | 
							elif section == 'x11':
 | 
				
			||||||
 | 
								if key in x11xk:
 | 
				
			||||||
 | 
									lines.append(keycode_def(section, key, i, x11xk[key]))
 | 
				
			||||||
 | 
								else:
 | 
				
			||||||
 | 
									lines.append(keycode_def(section, key, i, key.title()))
 | 
				
			||||||
		else:
 | 
							else:
 | 
				
			||||||
			lines.append(keycode_def(section, key, i))
 | 
								lines.append(keycode_def(section, key, i))
 | 
				
			||||||
		i = i + 1
 | 
							i = i + 1
 | 
				
			||||||
@ -80,11 +117,15 @@ def add_keycodes_defs(section, lines):
 | 
				
			|||||||
		key = "KP%d" % (j)
 | 
							key = "KP%d" % (j)
 | 
				
			||||||
		if section == 'win32':
 | 
							if section == 'win32':
 | 
				
			||||||
			lines.append(keycode_def(section, key, i, "NUMPAD%d" % (j)))
 | 
								lines.append(keycode_def(section, key, i, "NUMPAD%d" % (j)))
 | 
				
			||||||
 | 
							elif section == 'x11':
 | 
				
			||||||
 | 
								lines.append(keycode_def(section, key, i, "KP_%d" % (j)))
 | 
				
			||||||
		else:
 | 
							else:
 | 
				
			||||||
			lines.append(keycode_def(section, key, i))
 | 
								lines.append(keycode_def(section, key, i))
 | 
				
			||||||
		i = i + 1
 | 
							i = i + 1
 | 
				
			||||||
	if section == 'win32':
 | 
						if section == 'win32':
 | 
				
			||||||
		lines.append(keycode_def(section, 'SCROLLOCK', i, 'SCROLL'))
 | 
							lines.append(keycode_def(section, 'SCROLLOCK', i, 'SCROLL'))
 | 
				
			||||||
 | 
						elif section == 'x11':
 | 
				
			||||||
 | 
							lines.append(keycode_def(section, 'SCROLLOCK', i, 'Scroll_Lock'))
 | 
				
			||||||
	else:
 | 
						else:
 | 
				
			||||||
		lines.append(keycode_def(section, 'SCROLLOCK', i))
 | 
							lines.append(keycode_def(section, 'SCROLLOCK', i))
 | 
				
			||||||
	i = i + 1
 | 
						i = i + 1
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user