@@ -98,28 +98,12 @@ function set_keyboard_callbacks(glwin::GLFW.Window)
9898 )
9999 keyboard_modifier_ranges = 340 : 347 # GLFW.KEY_LEFT_SHIFT:GLFW.KEY_RIGHT_SUPER
100100
101- function get_modifier (key:: GLFW.Key ):: Symbol
102- (key == GLFW. KEY_LEFT_SHIFT || key == GLFW. KEY_RIGHT_SHIFT) && return :shift
103- (key == GLFW. KEY_LEFT_CONTROL || key == GLFW. KEY_RIGHT_CONTROL) && return :ctrl
104- (key == GLFW. KEY_LEFT_ALT || key == GLFW. KEY_RIGHT_ALT) && return :alt
105- (key == GLFW. KEY_LEFT_SUPER || key == GLFW. KEY_RIGHT_SUPER) && return :super
106- throw (DomainError (key))
107- end
108-
109- function conjunction_match (conjunction:: Conjunction ):: Bool
110- if conjunction. shift
111- ! (keyboard_state[GLFW. KEY_LEFT_SHIFT] || keyboard_state[GLFW. KEY_RIGHT_SHIFT]) && return false
112- end
113- if conjunction. ctrl
114- ! (keyboard_state[GLFW. KEY_LEFT_CONTROL] || keyboard_state[GLFW. KEY_RIGHT_CONTROL]) && return false
115- end
116- if conjunction. alt
117- ! (keyboard_state[GLFW. KEY_LEFT_ALT] || keyboard_state[GLFW. KEY_RIGHT_ALT]) && return false
118- end
119- if conjunction. super
120- ! (keyboard_state[GLFW. KEY_LEFT_SUPER] || keyboard_state[GLFW. KEY_RIGHT_SUPER]) && return false
121- end
122- true
101+ function conjunction_from_keyboard_state (key:: Union{Nothing, Key} ):: Conjunction # keyboard_state
102+ shift = keyboard_state[GLFW. KEY_LEFT_SHIFT] || keyboard_state[GLFW. KEY_RIGHT_SHIFT]
103+ ctrl = keyboard_state[GLFW. KEY_LEFT_CONTROL] || keyboard_state[GLFW. KEY_RIGHT_CONTROL]
104+ alt = keyboard_state[GLFW. KEY_LEFT_ALT] || keyboard_state[GLFW. KEY_RIGHT_ALT]
105+ super = keyboard_state[GLFW. KEY_LEFT_SUPER] || keyboard_state[GLFW. KEY_RIGHT_SUPER]
106+ Conjunction (shift, ctrl, alt, super, key)
123107 end
124108
125109 block = function (_, key, scancode, action, mods)
@@ -128,27 +112,23 @@ function set_keyboard_callbacks(glwin::GLFW.Window)
128112 if keyval in keyboard_modifier_ranges
129113 keyboard_state[key] = true
130114 if ! isempty (Shortcuts. pressed_modifier_callbacks)
131- for (conjunction, f) in Shortcuts. pressed_modifier_callbacks
132- getfield (conjunction, get_modifier (key)) && conjunction_match (conjunction) && f ((pressed= conjunction,))
115+ conjunction = conjunction_from_keyboard_state (nothing )
116+ if haskey (Shortcuts. pressed_modifier_callbacks, conjunction)
117+ Shortcuts. pressed_modifier_callbacks[conjunction]((pressed= conjunction,))
133118 end
134119 end
135120 else
136- if (any ∘ values)(keyboard_state)
121+ k = Key (keyval)
122+ conjunction = conjunction_from_keyboard_state (k)
123+ if conjunction. shift || conjunction. ctrl || conjunction. alt || conjunction. super
137124 if ! isempty (Shortcuts. pressed_conjunction_callbacks)
138- for (conjunction, f) in Shortcuts. pressed_conjunction_callbacks
139- nothing === conjunction. key && continue
140- if conjunction_match (conjunction) && keyval == conjunction. key. value
141- f ((pressed= conjunction,))
142- break
143- end
125+ if haskey (Shortcuts. pressed_conjunction_callbacks, conjunction)
126+ Shortcuts. pressed_conjunction_callbacks[conjunction]((pressed= conjunction,))
144127 end
145128 end
146129 elseif ! isempty (Shortcuts. pressed_key_callbacks)
147- for (k, f) in Shortcuts. pressed_key_callbacks
148- if keyval == k. value
149- f ((pressed= k,))
150- break
151- end
130+ if haskey (Shortcuts. pressed_key_callbacks, k)
131+ Shortcuts. pressed_key_callbacks[k]((pressed= k,))
152132 end
153133 end
154134 end
0 commit comments