remove graph_win32 graph_gtk

This commit is contained in:
houzh 2023-09-08 09:52:43 +08:00
parent dd5fa60e3f
commit 9aecd895f9
7 changed files with 592 additions and 863 deletions

View File

@ -81,7 +81,7 @@ configure_file(cdroid.pc.in cdroid.pc @ONLY)
install(TARGETS cdroid DESTINATION lib)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cdroid.pc
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
install(FILES ${CDROID_DEPLIBS} DESTINATION lib)
install(FILES ${CDROID_DEPLIBS} DESTINATION lib OPTIONAL)
install (DIRECTORY ${PROJECT_SOURCE_DIR} DESTINATION include/ FILES_MATCHING PATTERN "*.h"
PATTERN "view" EXCLUDE
PATTERN "core" EXCLUDE)

View File

@ -15,6 +15,6 @@ if( NOT(${CDROID_CHIPSET} MATCHES "x64") )
endif()
file(GLOB HAL_HEADERS ${PROJECT_SOURCE_DIR}/include/*.h)
install(FILES ${HAL_HEADERS} common/shared_queue.h DESTINATION include/porting)
file(COPY ${HAL_HEADERS} common/shared_queue.h DESTINATION ${CMAKE_BINARY_DIR}/include/porting)
file(COPY ${KEYCMAPS} ${KEYMAP} DESTINATION ${CMAKE_BINARY_DIR} PATTERN "*.k*")

View File

@ -25,634 +25,584 @@ type FULL
### Basic QWERTY keys ###
key A {
label: 'A'
base: 'a'
shift, capslock: 'A'
label: 'A'
base: 'a'
shift, capslock: 'A'
}
key B {
label: 'B'
base: 'b'
shift, capslock: 'B'
label: 'B'
base: 'b'
shift, capslock: 'B'
}
key C {
label: 'C'
base: 'c'
shift, capslock: 'C'
alt: '\u00e7'
shift+alt: '\u00c7'
label: 'C'
base: 'c'
shift, capslock: 'C'
alt: '\u00e7'
shift+alt: '\u00c7'
}
key D {
label: 'D'
base: 'd'
shift, capslock: 'D'
label: 'D'
base: 'd'
shift, capslock: 'D'
}
key E {
label: 'E'
base: 'e'
shift, capslock: 'E'
alt: '\u0301'
label: 'E'
base: 'e'
shift, capslock: 'E'
alt: '\u0301'
}
key F {
label: 'F'
base: 'f'
shift, capslock: 'F'
label: 'F'
base: 'f'
shift, capslock: 'F'
}
key G {
label: 'G'
base: 'g'
shift, capslock: 'G'
label: 'G'
base: 'g'
shift, capslock: 'G'
}
key H {
label: 'H'
base: 'h'
shift, capslock: 'H'
label: 'H'
base: 'h'
shift, capslock: 'H'
}
key I {
label: 'I'
base: 'i'
shift, capslock: 'I'
alt: '\u0302'
label: 'I'
base: 'i'
shift, capslock: 'I'
alt: '\u0302'
}
key J {
label: 'J'
base: 'j'
shift, capslock: 'J'
label: 'J'
base: 'j'
shift, capslock: 'J'
}
key K {
label: 'K'
base: 'k'
shift, capslock: 'K'
label: 'K'
base: 'k'
shift, capslock: 'K'
}
key L {
label: 'L'
base: 'l'
shift, capslock: 'L'
label: 'L'
base: 'l'
shift, capslock: 'L'
}
key M {
label: 'M'
base: 'm'
shift, capslock: 'M'
label: 'M'
base: 'm'
shift, capslock: 'M'
}
key N {
label: 'N'
base: 'n'
shift, capslock: 'N'
alt: '\u0303'
label: 'N'
base: 'n'
shift, capslock: 'N'
alt: '\u0303'
}
key O {
label: 'O'
base: 'o'
shift, capslock: 'O'
label: 'O'
base: 'o'
shift, capslock: 'O'
}
key P {
label: 'P'
base: 'p'
shift, capslock: 'P'
label: 'P'
base: 'p'
shift, capslock: 'P'
}
key Q {
label: 'Q'
base: 'q'
shift, capslock: 'Q'
label: 'Q'
base: 'q'
shift, capslock: 'Q'
}
key R {
label: 'R'
base: 'r'
shift, capslock: 'R'
label: 'R'
base: 'r'
shift, capslock: 'R'
}
key S {
label: 'S'
base: 's'
shift, capslock: 'S'
alt: '\u00df'
label: 'S'
base: 's'
shift, capslock: 'S'
alt: '\u00df'
}
key T {
label: 'T'
base: 't'
shift, capslock: 'T'
label: 'T'
base: 't'
shift, capslock: 'T'
}
key U {
label: 'U'
base: 'u'
shift, capslock: 'U'
alt: '\u0308'
label: 'U'
base: 'u'
shift, capslock: 'U'
alt: '\u0308'
}
key V {
label: 'V'
base: 'v'
shift, capslock: 'V'
label: 'V'
base: 'v'
shift, capslock: 'V'
}
key W {
label: 'W'
base: 'w'
shift, capslock: 'W'
label: 'W'
base: 'w'
shift, capslock: 'W'
}
key X {
label: 'X'
base: 'x'
shift, capslock: 'X'
label: 'X'
base: 'x'
shift, capslock: 'X'
}
key Y {
label: 'Y'
base: 'y'
shift, capslock: 'Y'
label: 'Y'
base: 'y'
shift, capslock: 'Y'
}
key Z {
label: 'Z'
base: 'z'
shift, capslock: 'Z'
label: 'Z'
base: 'z'
shift, capslock: 'Z'
}
key 0 {
label: '0'
base: '0'
shift: ')'
label: '0'
base: '0'
shift: ')'
}
key 1 {
label: '1'
base: '1'
shift: '!'
label: '1'
base: '1'
shift: '!'
}
key 2 {
label: '2'
base: '2'
shift: '@'
label: '2'
base: '2'
shift: '@'
}
key 3 {
label: '3'
base: '3'
shift: '#'
label: '3'
base: '3'
shift: '#'
}
key 4 {
label: '4'
base: '4'
shift: '$'
label: '4'
base: '4'
shift: '$'
}
key 5 {
label: '5'
base: '5'
shift: '%'
label: '5'
base: '5'
shift: '%'
}
key 6 {
label: '6'
base: '6'
shift: '^'
alt+shift: '\u0302'
label: '6'
base: '6'
shift: '^'
alt+shift: '\u0302'
}
key 7 {
label: '7'
base: '7'
shift: '&'
label: '7'
base: '7'
shift: '&'
}
key 8 {
label: '8'
base: '8'
shift: '*'
label: '8'
base: '8'
shift: '*'
}
key 9 {
label: '9'
base: '9'
shift: '('
label: '9'
base: '9'
shift: '('
}
key SPACE {
label: ' '
base: ' '
alt, meta:
fallback SEARCH
ctrl:
fallback LANGUAGE_SWITCH
label: ' '
base: ' '
alt, meta: fallback SEARCH
ctrl: fallback LANGUAGE_SWITCH
}
key ENTER {
label: '\n'
base: '\n'
label: '\n'
base: '\n'
}
key TAB {
label: '\t'
base: '\t'
label: '\t'
base: '\t'
}
key COMMA {
label: ','
base: ','
shift: '<'
label: ','
base: ','
shift: '<'
}
key PERIOD {
label: '.'
base: '.'
shift: '>'
label: '.'
base: '.'
shift: '>'
}
key SLASH {
label: '/'
base: '/'
shift: '?'
label: '/'
base: '/'
shift: '?'
}
key GRAVE {
label: '`'
base: '`'
shift: '~'
alt: '\u0300'
alt+shift: '\u0303'
label: '`'
base: '`'
shift: '~'
alt: '\u0300'
alt+shift: '\u0303'
}
key MINUS {
label: '-'
base: '-'
shift: '_'
label: '-'
base: '-'
shift: '_'
}
key EQUALS {
label: '='
base: '='
shift: '+'
label: '='
base: '='
shift: '+'
}
key LEFTBRACE {
label: '['
base: '['
shift: '{'
label: '['
base: '['
shift: '{'
}
key RIGHTBRACE {
label: ']'
base: ']'
shift: '}'
label: ']'
base: ']'
shift: '}'
}
key BACKSLASH {
label: '\\'
base: '\\'
shift: '|'
label: '\\'
base: '\\'
shift: '|'
}
key SEMICOLON {
label: ';'
base: ';'
shift: ':'
label: ';'
base: ';'
shift: ':'
}
key APOSTROPHE {
label: '\''
base: '\''
shift: '"'
label: '\''
base: '\''
shift: '"'
}
### Numeric keypad ###
key NUMPAD_0 {
label: '0'
base:
fallback INSERT
numlock: '0'
label: '0'
base: fallback INSERT
numlock: '0'
}
key NUMPAD_1 {
label: '1'
base:
fallback MOVE_END
numlock: '1'
label: '1'
base: fallback MOVE_END
numlock: '1'
}
key NUMPAD_2 {
label: '2'
base:
fallback DPAD_DOWN
numlock: '2'
label: '2'
base: fallback DPAD_DOWN
numlock: '2'
}
key NUMPAD_3 {
label: '3'
base:
fallback PAGE_DOWN
numlock: '3'
label: '3'
base: fallback PAGE_DOWN
numlock: '3'
}
key NUMPAD_4 {
label: '4'
base:
fallback DPAD_LEFT
numlock: '4'
label: '4'
base: fallback DPAD_LEFT
numlock: '4'
}
key NUMPAD_5 {
label: '5'
base:
fallback DPAD_CENTER
numlock: '5'
label: '5'
base: fallback DPAD_CENTER
numlock: '5'
}
key NUMPAD_6 {
label: '6'
base:
fallback DPAD_RIGHT
numlock: '6'
label: '6'
base: fallback DPAD_RIGHT
numlock: '6'
}
key NUMPAD_7 {
label: '7'
base:
fallback MOVE_HOME
numlock: '7'
label: '7'
base: fallback MOVE_HOME
numlock: '7'
}
key NUMPAD_8 {
label: '8'
base:
fallback DPAD_UP
numlock: '8'
label: '8'
base: fallback DPAD_UP
numlock: '8'
}
key NUMPAD_9 {
label: '9'
base:
fallback PAGE_UP
numlock: '9'
label: '9'
base: fallback PAGE_UP
numlock: '9'
}
key NUMPAD_LEFT_PAREN {
label: '('
base: '('
label: '('
base: '('
}
key NUMPAD_RIGHT_PAREN {
label: ')'
base: ')'
label: ')'
base: ')'
}
key NUMPAD_DIVIDE {
label: '/'
base: '/'
label: '/'
base: '/'
}
key NUMPAD_MULTIPLY {
label: '*'
base: '*'
label: '*'
base: '*'
}
key NUMPAD_SUBTRACT {
label: '-'
base: '-'
label: '-'
base: '-'
}
key NUMPAD_ADD {
label: '+'
base: '+'
label: '+'
base: '+'
}
key NUMPAD_DOT {
label: '.'
base:
fallback FORWARD_DEL
numlock: '.'
label: '.'
base: fallback FORWARD_DEL
numlock: '.'
}
key NUMPAD_COMMA {
label: ','
base: ','
label: ','
base: ','
}
key NUMPAD_EQUALS {
label: '='
base: '='
label: '='
base: '='
}
key NUMPAD_ENTER {
label: '\n'
base: '\n'
fallback ENTER
ctrl, alt, meta:
none fallback ENTER
label: '\n'
base: '\n' fallback ENTER
ctrl, alt, meta: none fallback ENTER
}
### Special keys on phones ###
key AT {
label: '@'
base: '@'
label: '@'
base: '@'
}
key STAR {
label: '*'
base: '*'
label: '*'
base: '*'
}
key POUND {
label: '#'
base: '#'
label: '#'
base: '#'
}
key PLUS {
label: '+'
base: '+'
label: '+'
base: '+'
}
### Non-printing keys ###
key ESCAPE {
base:
none
alt, meta:
fallback HOME
ctrl:
fallback MENU
base: none
alt, meta: fallback HOME
ctrl: fallback MENU
}
key DEL {
ctrl+alt:
fallback BACK
ctrl+alt: fallback BACK
}
### Gamepad buttons ###
key BUTTON_A {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_B {
base:
fallback BACK
base: fallback BACK
}
key BUTTON_C {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_X {
base:
fallback DEL
base: fallback DEL
}
key BUTTON_Y {
base:
fallback SPACE
base: fallback SPACE
}
key BUTTON_Z {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_L1 {
base:
none
base: none
}
key BUTTON_R1 {
base:
none
base: none
}
key BUTTON_L2 {
base:
none
base: none
}
key BUTTON_R2 {
base:
none
base: none
}
key BUTTON_THUMBL {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_THUMBR {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_START {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_SELECT {
base:
fallback MENU
base: fallback MENU
}
key BUTTON_MODE {
base:
fallback MENU
base: fallback MENU
}
key BUTTON_1 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_2 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_3 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_4 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_5 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_6 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_7 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_8 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_9 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_10 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_11 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_12 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_13 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_14 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_15 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}
key BUTTON_16 {
base:
fallback DPAD_CENTER
base: fallback DPAD_CENTER
}

View File

@ -1,26 +1,19 @@
prefix=@PREFIX@
exec_prefix=$ {prefix}
libdir=$ {prefix}/lib
sharedlibdir=$ {prefix}/lib
includedir=$ {prefix}/include
exec_prefix=${prefix}
libdir=${prefix}/lib
sharedlibdir=${prefix}/lib
includedir=${prefix}/include
Name:
tvhal
Description:
cdroid porting layer
Version: 1.0.0
Name: tvhal
Description: cdroid porting layer
Version: 1.0.0
#Requires Requires.private libs that supported by pkgconfig
Requires:
@PKGCONFIG_LIBS@
Requires.private:
@PKGCONFIG_LIBS_PRIVATE@
Requires: @PKGCONFIG_LIBS@
Requires.private: @PKGCONFIG_LIBS_PRIVATE@
#Libs& Libs.private libs that pkg-config cant support
Libs:
@NONPKG_LIBS@
Libs.private:
@NONPKG_LIBS_PRIVATE@
Libs: @NONPKG_LIBS@
Libs.private: @NONPKG_LIBS_PRIVATE@
Cflags:
-I"${includedir}/porting"
Cflags: -I"${includedir}/porting"

View File

@ -1,140 +0,0 @@
#include <cdtypes.h>
#include <ngl_os.h>
#include <cdgraph.h>
#include <cdlog.h>
#include <X11/Xlib.h>
#include <gtk/gtk.h>
#include <pthread.h>
NGL_MODULE(GRAPH);
GtkWidget *gtk_window=NULL;
GtkWidget *gtk_area = NULL;//gtk_gl_area_new();
GdkPixbuf *gtk_pixbuf;
static gboolean on_expose_event (GtkWidget * widget, GdkEventExpose *event, gpointer data) {
gdk_draw_rectangle();
}
static void GTKProc(void*param) {
gtk_init(0,NULL);
gtk_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(gtk_window), GTK_WIN_POS_CENTER); // 中央位置显示
gtk_widget_set_size_request(gtk_window, 1280, 720); // 窗口最小大小
gtk_window_set_resizable(GTK_WINDOW(gtk_window), FALSE);
gtk_area = gtk_gl_area_new();
gtk_container_add(GTK_CONTAINER(gtk_window), GTK_WIDGET(gtk_area));
gtk_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, 0, 8,1280, 720);
//gdk_window_set_back_pixmap(gtk_window,gtk_pixbuf,FALSE);
gtk_widget_show_all(gtk_window);
gtk_main();
}
DWORD nglGraphInit() {
pthread_t tid;
if(gtk_window)return E_OK;
pthread_create(&tid,NULL,GTKProc,NULL);
return E_OK;
}
DWORD nglGetScreenSize(UINT*width,UINT*height) {
*width=1280;//dispCfg.width;
*height=720;//dispCfg.height;
return E_OK;
}
DWORD nglLockSurface(HANDLE surface,void**buffer,UINT*pitch) {
GdkPixbuf*pb=(GdkPixbuf*)surface;
*buffer= gdk_pixbuf_get_pixels(pb);
*pitch = gdk_pixbuf_get_rowstride(pb);
return 0;
}
DWORD nglGetSurfaceInfo(HANDLE surface,UINT*width,UINT*height,INT *format) {
GdkPixbuf*pb=(GdkPixbuf*)surface;
*width = gdk_pixbuf_get_width(pb);;
*height= gdk_pixbuf_get_height(pb);
if(format)*format=GPF_ARGB;
return E_OK;
}
DWORD nglUnlockSurface(HANDLE surface) {
return 0;
}
DWORD nglSurfaceSetOpacity(HANDLE surface,BYTE alpha) {
return 0;//dispLayer->SetOpacity(dispLayer,alpha);
}
DWORD nglFillRect(HANDLE surface,const NGLRect*rect,UINT color) {
GdkPixbuf*nsrc=(GdkPixbuf*)surface;
NGLRect rec= {0,0,0,0};
rec.w = gdk_pixbuf_get_width(nsrc);
rec.h = gdk_pixbuf_get_height(nsrc);
if(rect)rec=*rect;
UINT*fb=(UINT*)(gdk_pixbuf_get_pixels(nsrc)+gdk_pixbuf_get_rowstride(nsrc)*rec.y+rec.x*4);
for(int y=0; y<rec.h; y++) {
for(int x=0; x<rec.w; x++)
fb[x]=color;
fb += (gdk_pixbuf_get_rowstride(nsrc)>>2);
}
if(surface==gtk_pixbuf)
gtk_widget_queue_draw(GTK_WINDOW(gtk_area));
return E_OK;
}
DWORD nglFlip(HANDLE surface) {
if(surface==gtk_pixbuf) {
gtk_widget_queue_draw(GTK_WIDGET(gtk_window));
}
return 0;
}
DWORD nglCreateSurface(HANDLE*surface,UINT width,UINT height,INT format,BOOL hwsurface) {
GdkPixbuf*pixbuf= gdk_pixbuf_new(GDK_COLORSPACE_RGB, 0, 8,width,height);
if(hwsurface)
gtk_pixbuf=pixbuf;
*surface=pixbuf;
LOGD("surface=%x pixbuf=%p",surface,pixbuf);
return E_OK;
}
DWORD nglBlit(HANDLE dstsurface,int dx,int dy,HANDLE srcsurface,const NGLRect*srcrect) {
unsigned int x,y,sw,sh,dw,dh;
GdkPixbuf*ndst=(GdkPixbuf*)dstsurface;
GdkPixbuf*nsrc=(GdkPixbuf*)srcsurface;
NGLRect rs= {0,0};
rs.w=dw=gdk_pixbuf_get_width(nsrc);
rs.h=dh=gdk_pixbuf_get_height(nsrc);
if(srcrect)rs=*srcrect;
if(((int)rs.w+dx<=0)||((int)rs.h+dy<=0)||(dx>=dw)||(dy>=dh)||(rs.x<0)||(rs.y<0)) {
LOGV("dx=%d,dy=%d rs=(%d,%d-%d,%d)",dx,dy,rs.x,rs.y,rs.w,rs.h);
return E_INVALID_PARA;
}
LOGV("Blit %p[%dx%d] %d,%d-%d,%d -> %p[%dx%d] %d,%d",nsrc,gdk_pixbuf_get_width(nsrc),gdk_pixbuf_get_height(nsrc),
rs.x,rs.y,rs.w,rs.h,ndst,dw,dh,dx,dy);
if(dx<0) {
rs.x-=dx;
rs.w=(int)rs.w+dx;
dx=0;
}
if(dy<0) {
rs.y-=dy;
rs.h=(int)rs.h+dy;
dy=0;
}
if(dx+rs.w>dw) rs.w = dw - dx;
if(dy+rs.h>dh) rs.h = dh - dy;
LOGV("Blit %p %d,%d-%d,%d -> %p %d,%d ",nsrc,rs.x,rs.y,rs.w,rs.h,ndst,dx,dy);
gdk_pixbuf_copy_area(ndst,dx,dy,rs.w,rs.h,nsrc,rs.x,rs.y);
if(gtk_pixbuf==ndst) {
gtk_widget_queue_draw(GTK_WIDGET(gtk_area));
}
return 0;
}
DWORD nglDestroySurface(HANDLE surface) {
g_object_unref((GdkPixbuf*)surface);
return 0;
}

View File

@ -1,66 +0,0 @@
#include <cdtypes.h>
#include <ngl_os.h>
#include <ngl_graph.h>
#include <cdlog.h>
#include <window.h>
NGL_MODULE(GRAPH);
HINSTANCE hInstance;
HWND hwndOSD=NULL;
DWORD nglGraphInit() {
MSG msg;
hInstance=GetModuleHandle(NULL);
hwndOSD=CreateWindowEx(WS_EX_TOOLWINDOW,_T("#32770"),(LPTSTR)NULL,WS_VISIBLE|WS_POPUP |WS_BORDER|WS_EX_CLIENTEDGE,
100,100,400,200,NULL,(HMENU)0,hInstance,NULL);
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return E_OK;
}
DWORD nglGetScreenSize(UINT*width,UINT*height) {
*width=1280;//dispCfg.width;
*height=720;//dispCfg.height;
return E_OK;
}
DWORD nglLockSurface(DWORD surface,void**buffer,UINT*pitch) {
return 0;
}
DWORD nglGetSurfaceInfo(DWORD surface,UINT*width,UINT*height,INT *format) {
return E_OK;
}
DWORD nglUnlockSurface(DWORD surface) {
return 0;
}
DWORD nglSurfaceSetOpacity(DWORD surface,BYTE alpha) {
return 0;//dispLayer->SetOpacity(dispLayer,alpha);
}
DWORD nglFillRect(DWORD surface,const NGLRect*rec,UINT color) {
return E_OK;
}
DWORD nglFlip(DWORD surface) {
return 0;
}
DWORD nglCreateSurface(DWORD*surface,INT width,INT height,INT format,BOOL hwsurface) {
return E_OK;
}
DWORD nglBlit(DWORD dstsurface,DWORD srcsurface,const NGLRect*srcrect,const NGLRect* dstrect) {
return 0;
}
DWORD nglDestroySurface(DWORD surface) {
return 0;
}

View File

@ -22,495 +22,487 @@
type ALPHA
key A {
label: 'A'
number: '2'
base: 'a'
shift, capslock: 'A'
alt: '#'
shift+alt, capslock+alt:
none
label: 'A'
number: '2'
base: 'a'
shift, capslock: 'A'
alt: '#'
shift+alt, capslock+alt: none
}
key B {
label: 'B'
number: '2'
base: 'b'
shift, capslock: 'B'
alt: '<'
shift+alt, capslock+alt:
none
label: 'B'
number: '2'
base: 'b'
shift, capslock: 'B'
alt: '<'
shift+alt, capslock+alt: none
}
key C {
label: 'C'
number: '2'
base: 'c'
shift, capslock: 'C'
alt: '9'
shift+alt, capslock+alt: '\u00e7'
label: 'C'
number: '2'
base: 'c'
shift, capslock: 'C'
alt: '9'
shift+alt, capslock+alt: '\u00e7'
}
key D {
label: 'D'
number: '3'
base: 'd'
shift, capslock: 'D'
alt: '5'
shift+alt, capslock+alt:
none
label: 'D'
number: '3'
base: 'd'
shift, capslock: 'D'
alt: '5'
shift+alt, capslock+alt: none
}
key E {
label: 'E'
number: '3'
base: 'e'
shift, capslock: 'E'
alt: '2'
shift+alt, capslock+alt: '\u0301'
label: 'E'
number: '3'
base: 'e'
shift, capslock: 'E'
alt: '2'
shift+alt, capslock+alt: '\u0301'
}
key F {
label: 'F'
number: '3'
base: 'f'
shift, capslock: 'F'
alt: '6'
shift+alt, capslock+alt: '\u00a5'
label: 'F'
number: '3'
base: 'f'
shift, capslock: 'F'
alt: '6'
shift+alt, capslock+alt: '\u00a5'
}
key G {
label: 'G'
number: '4'
base: 'g'
shift, capslock: 'G'
alt: '-'
shift+alt, capslock+alt: '_'
label: 'G'
number: '4'
base: 'g'
shift, capslock: 'G'
alt: '-'
shift+alt, capslock+alt: '_'
}
key H {
label: 'H'
number: '4'
base: 'h'
shift, capslock: 'H'
alt: '['
shift+alt, capslock+alt: '{'
label: 'H'
number: '4'
base: 'h'
shift, capslock: 'H'
alt: '['
shift+alt, capslock+alt: '{'
}
key I {
label: 'I'
number: '4'
base: 'i'
shift, capslock: 'I'
alt: '$'
shift+alt, capslock+alt: '\u0302'
label: 'I'
number: '4'
base: 'i'
shift, capslock: 'I'
alt: '$'
shift+alt, capslock+alt: '\u0302'
}
key J {
label: 'J'
number: '5'
base: 'j'
shift, capslock: 'J'
alt: ']'
shift+alt, capslock+alt: '}'
label: 'J'
number: '5'
base: 'j'
shift, capslock: 'J'
alt: ']'
shift+alt, capslock+alt: '}'
}
key K {
label: 'K'
number: '5'
base: 'k'
shift, capslock: 'K'
alt: '"'
shift+alt, capslock+alt: '~'
label: 'K'
number: '5'
base: 'k'
shift, capslock: 'K'
alt: '"'
shift+alt, capslock+alt: '~'
}
key L {
label: 'L'
number: '5'
base: 'l'
shift, capslock: 'L'
alt: '\''
shift+alt, capslock+alt: '`'
label: 'L'
number: '5'
base: 'l'
shift, capslock: 'L'
alt: '\''
shift+alt, capslock+alt: '`'
}
key M {
label: 'M'
number: '6'
base: 'm'
shift, capslock: 'M'
alt: '!'
shift+alt, capslock+alt:
none
label: 'M'
number: '6'
base: 'm'
shift, capslock: 'M'
alt: '!'
shift+alt, capslock+alt: none
}
key N {
label: 'N'
number: '6'
base: 'n'
shift, capslock: 'N'
alt: '>'
shift+alt, capslock+alt: '\u0303'
label: 'N'
number: '6'
base: 'n'
shift, capslock: 'N'
alt: '>'
shift+alt, capslock+alt: '\u0303'
}
key O {
label: 'O'
number: '6'
base: 'o'
shift, capslock: 'O'
alt: '('
shift+alt, capslock+alt:
none
label: 'O'
number: '6'
base: 'o'
shift, capslock: 'O'
alt: '('
shift+alt, capslock+alt: none
}
key P {
label: 'P'
number: '7'
base: 'p'
shift, capslock: 'P'
alt: ')'
shift+alt, capslock+alt:
none
label: 'P'
number: '7'
base: 'p'
shift, capslock: 'P'
alt: ')'
shift+alt, capslock+alt: none
}
key Q {
label: 'Q'
number: '7'
base: 'q'
shift, capslock: 'Q'
alt: '*'
shift+alt, capslock+alt: '\u0300'
label: 'Q'
number: '7'
base: 'q'
shift, capslock: 'Q'
alt: '*'
shift+alt, capslock+alt: '\u0300'
}
key R {
label: 'R'
number: '7'
base: 'r'
shift, capslock: 'R'
alt: '3'
shift+alt, capslock+alt: '\u20ac'
label: 'R'
number: '7'
base: 'r'
shift, capslock: 'R'
alt: '3'
shift+alt, capslock+alt: '\u20ac'
}
key S {
label: 'S'
number: '7'
base: 's'
shift, capslock: 'S'
alt: '4'
shift+alt, capslock+alt: '\u00df'
label: 'S'
number: '7'
base: 's'
shift, capslock: 'S'
alt: '4'
shift+alt, capslock+alt: '\u00df'
}
key T {
label: 'T'
number: '8'
base: 't'
shift, capslock: 'T'
alt: '+'
shift+alt, capslock+alt: '\u00a3'
label: 'T'
number: '8'
base: 't'
shift, capslock: 'T'
alt: '+'
shift+alt, capslock+alt: '\u00a3'
}
key U {
label: 'U'
number: '8'
base: 'u'
shift, capslock: 'U'
alt: '&'
shift+alt, capslock+alt: '\u0308'
label: 'U'
number: '8'
base: 'u'
shift, capslock: 'U'
alt: '&'
shift+alt, capslock+alt: '\u0308'
}
key V {
label: 'V'
number: '8'
base: 'v'
shift, capslock: 'V'
alt: '='
shift+alt, capslock+alt: '^'
label: 'V'
number: '8'
base: 'v'
shift, capslock: 'V'
alt: '='
shift+alt, capslock+alt: '^'
}
key W {
label: 'W'
number: '9'
base: 'w'
shift, capslock: 'W'
alt: '1'
shift+alt, capslock+alt:
none
label: 'W'
number: '9'
base: 'w'
shift, capslock: 'W'
alt: '1'
shift+alt, capslock+alt: none
}
key X {
label: 'X'
number: '9'
base: 'x'
shift, capslock: 'X'
alt: '8'
shift+alt, capslock+alt: '\uef00'
label: 'X'
number: '9'
base: 'x'
shift, capslock: 'X'
alt: '8'
shift+alt, capslock+alt: '\uef00'
}
key Y {
label: 'Y'
number: '9'
base: 'y'
shift, capslock: 'Y'
alt: '%'
shift+alt, capslock+alt: '\u00a1'
label: 'Y'
number: '9'
base: 'y'
shift, capslock: 'Y'
alt: '%'
shift+alt, capslock+alt: '\u00a1'
}
key Z {
label: 'Z'
number: '9'
base: 'z'
shift, capslock: 'Z'
alt: '7'
shift+alt, capslock+alt:
none
label: 'Z'
number: '9'
base: 'z'
shift, capslock: 'Z'
alt: '7'
shift+alt, capslock+alt: none
}
key COMMA {
label: ','
number: ','
base: ','
shift: ';'
alt: ';'
shift+alt: '|'
label: ','
number: ','
base: ','
shift: ';'
alt: ';'
shift+alt: '|'
}
key PERIOD {
label: '.'
number: '.'
base: '.'
shift: ':'
alt: ':'
shift+alt: '\u2026'
label: '.'
number: '.'
base: '.'
shift: ':'
alt: ':'
shift+alt: '\u2026'
}
key AT {
label: '@'
number: '0'
base: '@'
shift: '0'
alt: '0'
shift+alt: '\u2022'
label: '@'
number: '0'
base: '@'
shift: '0'
alt: '0'
shift+alt: '\u2022'
}
key SLASH {
label: '/'
number: '/'
base: '/'
shift: '?'
alt: '?'
shift+alt: '\\'
label: '/'
number: '/'
base: '/'
shift: '?'
alt: '?'
shift+alt: '\\'
}
key SPACE {
label: ' '
number: ' '
base: ' '
shift: ' '
alt: '\uef01'
shift+alt: '\uef01'
label: ' '
number: ' '
base: ' '
shift: ' '
alt: '\uef01'
shift+alt: '\uef01'
}
key ENTER {
label: '\n'
number: '\n'
base: '\n'
shift: '\n'
alt: '\n'
shift+alt: '\n'
label: '\n'
number: '\n'
base: '\n'
shift: '\n'
alt: '\n'
shift+alt: '\n'
}
key TAB {
label: '\t'
number: '\t'
base: '\t'
shift: '\t'
alt: '\t'
shift+alt: '\t'
label: '\t'
number: '\t'
base: '\t'
shift: '\t'
alt: '\t'
shift+alt: '\t'
}
key 0 {
label: '0'
number: '0'
base: '0'
shift: ')'
alt: ')'
shift+alt: ')'
label: '0'
number: '0'
base: '0'
shift: ')'
alt: ')'
shift+alt: ')'
}
key 1 {
label: '1'
number: '1'
base: '1'
shift: '!'
alt: '!'
shift+alt: '!'
label: '1'
number: '1'
base: '1'
shift: '!'
alt: '!'
shift+alt: '!'
}
key 2 {
label: '2'
number: '2'
base: '2'
shift: '@'
alt: '@'
shift+alt: '@'
label: '2'
number: '2'
base: '2'
shift: '@'
alt: '@'
shift+alt: '@'
}
key 3 {
label: '3'
number: '3'
base: '3'
shift: '#'
alt: '#'
shift+alt: '#'
label: '3'
number: '3'
base: '3'
shift: '#'
alt: '#'
shift+alt: '#'
}
key 4 {
label: '4'
number: '4'
base: '4'
shift: '$'
alt: '$'
shift+alt: '$'
label: '4'
number: '4'
base: '4'
shift: '$'
alt: '$'
shift+alt: '$'
}
key 5 {
label: '5'
number: '5'
base: '5'
shift: '%'
alt: '%'
shift+alt: '%'
label: '5'
number: '5'
base: '5'
shift: '%'
alt: '%'
shift+alt: '%'
}
key 6 {
label: '6'
number: '6'
base: '6'
shift: '^'
alt: '^'
shift+alt: '^'
label: '6'
number: '6'
base: '6'
shift: '^'
alt: '^'
shift+alt: '^'
}
key 7 {
label: '7'
number: '7'
base: '7'
shift: '&'
alt: '&'
shift+alt: '&'
label: '7'
number: '7'
base: '7'
shift: '&'
alt: '&'
shift+alt: '&'
}
key 8 {
label: '8'
number: '8'
base: '8'
shift: '*'
alt: '*'
shift+alt: '*'
label: '8'
number: '8'
base: '8'
shift: '*'
alt: '*'
shift+alt: '*'
}
key 9 {
label: '9'
number: '9'
base: '9'
shift: '('
alt: '('
shift+alt: '('
label: '9'
number: '9'
base: '9'
shift: '('
alt: '('
shift+alt: '('
}
key GRAVE {
label: '`'
number: '`'
base: '`'
shift: '~'
alt: '`'
shift+alt: '~'
label: '`'
number: '`'
base: '`'
shift: '~'
alt: '`'
shift+alt: '~'
}
key MINUS {
label: '-'
number: '-'
base: '-'
shift: '_'
alt: '-'
shift+alt: '_'
label: '-'
number: '-'
base: '-'
shift: '_'
alt: '-'
shift+alt: '_'
}
key EQUALS {
label: '='
number: '='
base: '='
shift: '+'
alt: '='
shift+alt: '+'
label: '='
number: '='
base: '='
shift: '+'
alt: '='
shift+alt: '+'
}
key LEFTBRACE {
label: '['
number: '['
base: '['
shift: '{'
alt: '['
shift+alt: '{'
label: '['
number: '['
base: '['
shift: '{'
alt: '['
shift+alt: '{'
}
key RIGHTBRACE {
label: ']'
number: ']'
base: ']'
shift: '}'
alt: ']'
shift+alt: '}'
label: ']'
number: ']'
base: ']'
shift: '}'
alt: ']'
shift+alt: '}'
}
key BACKSLASH {
label: '\\'
number: '\\'
base: '\\'
shift: '|'
alt: '\\'
shift+alt: '|'
label: '\\'
number: '\\'
base: '\\'
shift: '|'
alt: '\\'
shift+alt: '|'
}
key SEMICOLON {
label: ';'
number: ';'
base: ';'
shift: ':'
alt: ';'
shift+alt: ':'
label: ';'
number: ';'
base: ';'
shift: ':'
alt: ';'
shift+alt: ':'
}
key APOSTROPHE {
label: '\''
number: '\''
base: '\''
shift: '"'
alt: '\''
shift+alt: '"'
label: '\''
number: '\''
base: '\''
shift: '"'
alt: '\''
shift+alt: '"'
}
key STAR {
label: '*'
number: '*'
base: '*'
shift: '*'
alt: '*'
shift+alt: '*'
label: '*'
number: '*'
base: '*'
shift: '*'
alt: '*'
shift+alt: '*'
}
key POUND {
label: '#'
number: '#'
base: '#'
shift: '#'
alt: '#'
shift+alt: '#'
label: '#'
number: '#'
base: '#'
shift: '#'
alt: '#'
shift+alt: '#'
}
key PLUS {
label: '+'
number: '+'
base: '+'
shift: '+'
alt: '+'
shift+alt: '+'
label: '+'
number: '+'
base: '+'
shift: '+'
alt: '+'
shift+alt: '+'
}