ui.backend.*: new vocab for keysym handling which is the same on x11 and gtk
parent
d752a1947c
commit
4b919b19ce
|
@ -49,6 +49,7 @@ IN: ui.backend.gtk.tests
|
||||||
|
|
||||||
! The Mac build servers doesn't have the gtk libs
|
! The Mac build servers doesn't have the gtk libs
|
||||||
os linux? [
|
os linux? [
|
||||||
|
! key-event>gesture
|
||||||
{
|
{
|
||||||
T{ key-down f f "F2" }
|
T{ key-down f f "F2" }
|
||||||
T{ key-up f f "H" }
|
T{ key-up f f "H" }
|
||||||
|
@ -58,6 +59,11 @@ os linux? [
|
||||||
gdk-key-release-event key-event>gesture
|
gdk-key-release-event key-event>gesture
|
||||||
gdk-space-key-press-event key-event>gesture
|
gdk-space-key-press-event key-event>gesture
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! key-sym
|
||||||
|
{ "F2" t } [
|
||||||
|
GDK_KEY_F2 key-sym
|
||||||
|
] unit-test
|
||||||
] when
|
] when
|
||||||
|
|
||||||
{ 9854 } [
|
{ 9854 } [
|
||||||
|
|
|
@ -7,10 +7,10 @@ gobject-introspection.standard-types gobject.ffi gtk.ffi gtk.gl.ffi
|
||||||
io.encodings.binary io.encodings.utf8 io.files io.pathnames kernel
|
io.encodings.binary io.encodings.utf8 io.files io.pathnames kernel
|
||||||
libc literals locals math math.bitwise math.vectors namespaces
|
libc literals locals math math.bitwise math.vectors namespaces
|
||||||
sequences strings system threads ui ui.backend
|
sequences strings system threads ui ui.backend
|
||||||
ui.backend.gtk.input-methods ui.backend.gtk.io ui.clipboards
|
ui.backend.gtk.input-methods ui.backend.gtk.io ui.backend.x11.keys
|
||||||
ui.event-loop ui.gadgets ui.gadgets.private ui.gadgets.worlds
|
ui.clipboards ui.event-loop ui.gadgets ui.gadgets.private
|
||||||
ui.gestures ui.pixel-formats ui.pixel-formats.private ui.private
|
ui.gadgets.worlds ui.gestures ui.pixel-formats
|
||||||
vocabs.loader ;
|
ui.pixel-formats.private ui.private vocabs.loader ;
|
||||||
IN: ui.backend.gtk
|
IN: ui.backend.gtk
|
||||||
|
|
||||||
SINGLETON: gtk-ui-backend
|
SINGLETON: gtk-ui-backend
|
||||||
|
@ -97,49 +97,6 @@ CONSTANT: events-mask
|
||||||
GDK_FOCUS_CHANGE_MASK
|
GDK_FOCUS_CHANGE_MASK
|
||||||
}
|
}
|
||||||
|
|
||||||
CONSTANT: modifiers
|
|
||||||
{
|
|
||||||
{ S+ $ GDK_SHIFT_MASK }
|
|
||||||
{ C+ $ GDK_CONTROL_MASK }
|
|
||||||
{ A+ $ GDK_MOD1_MASK }
|
|
||||||
}
|
|
||||||
|
|
||||||
CONSTANT: action-key-codes
|
|
||||||
H{
|
|
||||||
{ $ GDK_KEY_BackSpace "BACKSPACE" }
|
|
||||||
{ $ GDK_KEY_Tab "TAB" }
|
|
||||||
{ $ GDK_KEY_ISO_Left_Tab "TAB" }
|
|
||||||
{ $ GDK_KEY_Return "RET" }
|
|
||||||
{ $ GDK_KEY_KP_Enter "ENTER" }
|
|
||||||
{ $ GDK_KEY_Escape "ESC" }
|
|
||||||
{ $ GDK_KEY_Delete "DELETE" }
|
|
||||||
{ $ GDK_KEY_Insert "INSERT" }
|
|
||||||
{ $ GDK_KEY_Home "HOME" }
|
|
||||||
{ $ GDK_KEY_Left "LEFT" }
|
|
||||||
{ $ GDK_KEY_Up "UP" }
|
|
||||||
{ $ GDK_KEY_Right "RIGHT" }
|
|
||||||
{ $ GDK_KEY_Down "DOWN" }
|
|
||||||
{ $ GDK_KEY_Page_Up "PAGE_UP" }
|
|
||||||
{ $ GDK_KEY_Page_Down "PAGE_DOWN" }
|
|
||||||
{ $ GDK_KEY_End "END" }
|
|
||||||
{ $ GDK_KEY_Begin "BEGIN" }
|
|
||||||
{ $ GDK_KEY_F1 "F1" }
|
|
||||||
{ $ GDK_KEY_F2 "F2" }
|
|
||||||
{ $ GDK_KEY_F3 "F3" }
|
|
||||||
{ $ GDK_KEY_F4 "F4" }
|
|
||||||
{ $ GDK_KEY_F5 "F5" }
|
|
||||||
{ $ GDK_KEY_F6 "F6" }
|
|
||||||
{ $ GDK_KEY_F7 "F7" }
|
|
||||||
{ $ GDK_KEY_F8 "F8" }
|
|
||||||
{ $ GDK_KEY_F9 "F9" }
|
|
||||||
{ $ GDK_KEY_F10 "F10" }
|
|
||||||
{ $ GDK_KEY_F11 "F11" }
|
|
||||||
{ $ GDK_KEY_F12 "F12" }
|
|
||||||
}
|
|
||||||
|
|
||||||
: event-modifiers ( event -- seq )
|
|
||||||
state>> modifiers modifier ;
|
|
||||||
|
|
||||||
: event-loc ( event -- loc )
|
: event-loc ( event -- loc )
|
||||||
[ x>> ] [ y>> ] bi [ >fixnum ] bi@ 2array ;
|
[ x>> ] [ y>> ] bi [ >fixnum ] bi@ 2array ;
|
||||||
|
|
||||||
|
@ -197,13 +154,11 @@ CONSTANT: action-key-codes
|
||||||
[ scroll-direction ] [ event-loc ] bi
|
[ scroll-direction ] [ event-loc ] bi
|
||||||
] dip window send-scroll t ;
|
] dip window send-scroll t ;
|
||||||
|
|
||||||
: key-sym ( event -- sym/f action? )
|
: key-sym ( keyval -- string/f action? )
|
||||||
keyval>> dup action-key-codes at [ t ] [
|
code>sym [ dup integer? [ gdk_keyval_to_unicode 1string ] when ] dip ;
|
||||||
gdk_keyval_to_unicode [ f ] [ 1string ] if-zero f
|
|
||||||
] ?if ;
|
|
||||||
|
|
||||||
: key-event>gesture ( event -- key-gesture )
|
: key-event>gesture ( event -- key-gesture )
|
||||||
[ event-modifiers ] [ key-sym ] [
|
[ event-modifiers ] [ keyval>> key-sym ] [
|
||||||
type>> GDK_KEY_PRESS = [ <key-down> ] [ <key-up> ] if
|
type>> GDK_KEY_PRESS = [ <key-down> ] [ <key-up> ] if
|
||||||
] tri ;
|
] tri ;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
USING: tools.test ui.backend.x11.keys x11.keysymdef ;
|
||||||
|
IN: ui.backend.x11.keys.tests
|
||||||
|
|
||||||
|
{
|
||||||
|
65 f
|
||||||
|
"RET" t
|
||||||
|
f f
|
||||||
|
} [
|
||||||
|
65 code>sym
|
||||||
|
XK_Return code>sym
|
||||||
|
XK_Hyper_R code>sym
|
||||||
|
] unit-test
|
|
@ -0,0 +1,71 @@
|
||||||
|
! Copyright (C) 2016 Björn Lindqvist
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors arrays assocs columns kernel literals math sequences
|
||||||
|
sets ui.gestures x11.keysymdef ;
|
||||||
|
IN: ui.backend.x11.keys
|
||||||
|
|
||||||
|
CONSTANT: modifiers
|
||||||
|
{
|
||||||
|
{ S+ 0x1 }
|
||||||
|
{ C+ 0x4 }
|
||||||
|
{ A+ 0x8 }
|
||||||
|
}
|
||||||
|
|
||||||
|
CONSTANT: codes
|
||||||
|
H{
|
||||||
|
{ $ XK_BackSpace "BACKSPACE" }
|
||||||
|
{ $ XK_Tab "TAB" }
|
||||||
|
{ $ XK_ISO_Left_Tab "TAB" }
|
||||||
|
{ $ XK_Return "RET" }
|
||||||
|
{ $ XK_KP_Enter "ENTER" }
|
||||||
|
{ $ XK_Escape "ESC" }
|
||||||
|
{ $ XK_Delete "DELETE" }
|
||||||
|
{ $ XK_Insert "INSERT" }
|
||||||
|
{ $ XK_Home "HOME" }
|
||||||
|
{ $ XK_Left "LEFT" }
|
||||||
|
{ $ XK_Up "UP" }
|
||||||
|
{ $ XK_Right "RIGHT" }
|
||||||
|
{ $ XK_Down "DOWN" }
|
||||||
|
{ $ XK_Page_Up "PAGE_UP" }
|
||||||
|
{ $ XK_Page_Down "PAGE_DOWN" }
|
||||||
|
{ $ XK_End "END" }
|
||||||
|
{ $ XK_Begin "BEGIN" }
|
||||||
|
{ $ XK_F1 "F1" }
|
||||||
|
{ $ XK_F2 "F2" }
|
||||||
|
{ $ XK_F3 "F3" }
|
||||||
|
{ $ XK_F4 "F4" }
|
||||||
|
{ $ XK_F5 "F5" }
|
||||||
|
{ $ XK_F6 "F6" }
|
||||||
|
{ $ XK_F7 "F7" }
|
||||||
|
{ $ XK_F8 "F8" }
|
||||||
|
{ $ XK_F9 "F9" }
|
||||||
|
{ $ XK_F10 "F10" }
|
||||||
|
{ $ XK_F11 "F11" }
|
||||||
|
{ $ XK_F11 "F12" }
|
||||||
|
|
||||||
|
{ $ XK_Shift_L f }
|
||||||
|
{ $ XK_Shift_R f }
|
||||||
|
{ $ XK_Control_L f }
|
||||||
|
{ $ XK_Control_R f }
|
||||||
|
{ $ XK_Caps_Lock f }
|
||||||
|
{ $ XK_Shift_Lock f }
|
||||||
|
|
||||||
|
{ $ XK_Meta_L f }
|
||||||
|
{ $ XK_Meta_R f }
|
||||||
|
{ $ XK_Alt_L f }
|
||||||
|
{ $ XK_Alt_R f }
|
||||||
|
{ $ XK_Super_L f }
|
||||||
|
{ $ XK_Super_R f }
|
||||||
|
{ $ XK_Hyper_L f }
|
||||||
|
{ $ XK_Hyper_R f }
|
||||||
|
}
|
||||||
|
|
||||||
|
: code>sym ( code -- name/code/f action? )
|
||||||
|
dup codes at* [ nip dup t and ] when ;
|
||||||
|
|
||||||
|
: modifier ( mod modifiers -- seq )
|
||||||
|
[ second swap bitand 0 > ] with filter
|
||||||
|
0 <column> members [ f ] [ >array ] if-empty ;
|
||||||
|
|
||||||
|
: event-modifiers ( event -- seq )
|
||||||
|
state>> modifiers modifier ;
|
|
@ -4,10 +4,10 @@ USING: accessors alien.c-types alien.data alien.syntax arrays ascii
|
||||||
assocs classes.struct combinators combinators.short-circuit
|
assocs classes.struct combinators combinators.short-circuit
|
||||||
environment io.encodings.ascii io.encodings.string io.encodings.utf8
|
environment io.encodings.ascii io.encodings.string io.encodings.utf8
|
||||||
kernel literals locals math namespaces sequences specialized-arrays
|
kernel literals locals math namespaces sequences specialized-arrays
|
||||||
strings ui ui.backend ui.clipboards ui.event-loop ui.gadgets
|
strings ui ui.backend ui.backend.x11.keys ui.clipboards ui.event-loop
|
||||||
ui.gadgets.private ui.gadgets.worlds ui.gestures ui.pixel-formats
|
ui.gadgets ui.gadgets.private ui.gadgets.worlds ui.gestures
|
||||||
ui.pixel-formats.private ui.private x11 x11.clipboard x11.constants
|
ui.pixel-formats ui.pixel-formats.private ui.private x11 x11.clipboard
|
||||||
x11.events x11.glx x11.io x11.keysymdef x11.windows x11.xim x11.xlib ;
|
x11.constants x11.events x11.glx x11.io x11.windows x11.xim x11.xlib ;
|
||||||
FROM: libc => system ;
|
FROM: libc => system ;
|
||||||
SPECIALIZED-ARRAYS: uchar ulong ;
|
SPECIALIZED-ARRAYS: uchar ulong ;
|
||||||
IN: ui.backend.x11
|
IN: ui.backend.x11
|
||||||
|
@ -94,63 +94,8 @@ M: x11-ui-backend (pixel-format-attribute)
|
||||||
{ int } [ glXGetConfig drop ] with-out-parameters
|
{ int } [ glXGetConfig drop ] with-out-parameters
|
||||||
] if-empty ;
|
] if-empty ;
|
||||||
|
|
||||||
CONSTANT: modifiers
|
: key-code ( code -- string/f action? )
|
||||||
{
|
code>sym [ dup integer? [ 1string ] when ] dip ;
|
||||||
{ S+ 0x1 }
|
|
||||||
{ C+ 0x4 }
|
|
||||||
{ A+ 0x8 }
|
|
||||||
}
|
|
||||||
|
|
||||||
CONSTANT: key-codes
|
|
||||||
H{
|
|
||||||
{ $ XK_BackSpace "BACKSPACE" }
|
|
||||||
{ $ XK_Tab "TAB" }
|
|
||||||
{ $ XK_ISO_Left_Tab "TAB" }
|
|
||||||
{ $ XK_Return "RET" }
|
|
||||||
{ $ XK_KP_Enter "ENTER" }
|
|
||||||
{ $ XK_Escape "ESC" }
|
|
||||||
{ $ XK_Delete "DELETE" }
|
|
||||||
{ $ XK_Home "HOME" }
|
|
||||||
{ $ XK_Left "LEFT" }
|
|
||||||
{ $ XK_Up "UP" }
|
|
||||||
{ $ XK_Right "RIGHT" }
|
|
||||||
{ $ XK_Down "DOWN" }
|
|
||||||
{ $ XK_Page_Up "PAGE_UP" }
|
|
||||||
{ $ XK_Page_Down "PAGE_DOWN" }
|
|
||||||
{ $ XK_End "END" }
|
|
||||||
{ $ XK_Begin "BEGIN" }
|
|
||||||
{ $ XK_F1 "F1" }
|
|
||||||
{ $ XK_F2 "F2" }
|
|
||||||
{ $ XK_F3 "F3" }
|
|
||||||
{ $ XK_F4 "F4" }
|
|
||||||
{ $ XK_F5 "F5" }
|
|
||||||
{ $ XK_F6 "F6" }
|
|
||||||
{ $ XK_F7 "F7" }
|
|
||||||
{ $ XK_F8 "F8" }
|
|
||||||
{ $ XK_F9 "F9" }
|
|
||||||
|
|
||||||
{ $ XK_Shift_L f }
|
|
||||||
{ $ XK_Shift_R f }
|
|
||||||
{ $ XK_Control_L f }
|
|
||||||
{ $ XK_Control_R f }
|
|
||||||
{ $ XK_Caps_Lock f }
|
|
||||||
{ $ XK_Shift_Lock f }
|
|
||||||
|
|
||||||
{ $ XK_Meta_L f }
|
|
||||||
{ $ XK_Meta_R f }
|
|
||||||
{ $ XK_Alt_L f }
|
|
||||||
{ $ XK_Alt_R f }
|
|
||||||
{ $ XK_Super_L f }
|
|
||||||
{ $ XK_Super_R f }
|
|
||||||
{ $ XK_Hyper_L f }
|
|
||||||
{ $ XK_Hyper_R f }
|
|
||||||
}
|
|
||||||
|
|
||||||
: key-code ( keysym -- keycode action? )
|
|
||||||
dup key-codes at* [ nip dup t and ] [ [ 1string ] dip ] if ;
|
|
||||||
|
|
||||||
: event-modifiers ( event -- seq )
|
|
||||||
state>> modifiers modifier ;
|
|
||||||
|
|
||||||
: valid-input? ( string gesture -- ? )
|
: valid-input? ( string gesture -- ? )
|
||||||
over empty? [ 2drop f ] [
|
over empty? [ 2drop f ] [
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
! Copyright (C) 2005, 2010 Slava Pestov.
|
! Copyright (C) 2005, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays assocs kernel math math.order models
|
USING: accessors arrays ascii assocs boxes calendar classes
|
||||||
namespaces make sequences words strings system hashtables math.parser
|
combinators combinators.short-circuit deques fry kernel make math
|
||||||
math.vectors classes.tuple classes boxes calendar timers combinators
|
math.order math.parser math.vectors namespaces sequences system timers
|
||||||
sets columns fry deques ui.gadgets ui.gadgets.private ascii
|
ui.gadgets ui.gadgets.private words ;
|
||||||
combinators.short-circuit ;
|
|
||||||
IN: ui.gestures
|
IN: ui.gestures
|
||||||
|
|
||||||
: get-gesture-handler ( gesture gadget -- quot )
|
: get-gesture-handler ( gesture gadget -- quot )
|
||||||
|
@ -98,13 +97,13 @@ SINGLETONS:
|
||||||
revert-action close-action ;
|
revert-action close-action ;
|
||||||
|
|
||||||
UNION: action
|
UNION: action
|
||||||
undo-action redo-action
|
undo-action redo-action
|
||||||
cut-action copy-action paste-action
|
cut-action copy-action paste-action
|
||||||
delete-action select-all-action
|
delete-action select-all-action
|
||||||
left-action right-action up-action down-action
|
left-action right-action up-action down-action
|
||||||
zoom-in-action zoom-out-action
|
zoom-in-action zoom-out-action
|
||||||
new-action open-action save-action save-as-action
|
new-action open-action save-action save-as-action
|
||||||
revert-action close-action ;
|
revert-action close-action ;
|
||||||
|
|
||||||
CONSTANT: action-gestures
|
CONSTANT: action-gestures
|
||||||
{
|
{
|
||||||
|
@ -128,7 +127,7 @@ TUPLE: key-gesture mods sym ;
|
||||||
|
|
||||||
TUPLE: key-down < key-gesture ;
|
TUPLE: key-down < key-gesture ;
|
||||||
|
|
||||||
: new-key-gesture ( mods sym action? class -- mods' sym' )
|
: new-key-gesture ( mods sym action? class -- key-gesture )
|
||||||
[ [ [ S+ swap remove f like ] dip ] unless ] dip boa ; inline
|
[ [ [ S+ swap remove f like ] dip ] unless ] dip boa ; inline
|
||||||
|
|
||||||
: <key-down> ( mods sym action? -- key-down )
|
: <key-down> ( mods sym action? -- key-down )
|
||||||
|
@ -234,10 +233,6 @@ SYMBOL: drag-timer
|
||||||
focus<<
|
focus<<
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: modifier ( mod modifiers -- seq )
|
|
||||||
[ second swap bitand 0 > ] with filter
|
|
||||||
0 <column> members [ f ] [ >array ] if-empty ;
|
|
||||||
|
|
||||||
: drag-loc ( -- loc )
|
: drag-loc ( -- loc )
|
||||||
hand-loc get-global hand-click-loc get-global v- ;
|
hand-loc get-global hand-click-loc get-global v- ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue