mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-19 23:29:05 +00:00
Allows machines to declare a preference for logical input.
It's only a preference, and the Apple II does prefer it.
This commit is contained in:
parent
a4ab5b0b49
commit
79ef026b93
@ -808,6 +808,10 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
|
|||||||
open_apple_is_pressed_ = closed_apple_is_pressed_ = key_is_down_ = false;
|
open_apple_is_pressed_ = closed_apple_is_pressed_ = key_is_down_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool prefers_logical_input() final {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool set_key_pressed(Key key, char value, bool is_pressed) final {
|
bool set_key_pressed(Key key, char value, bool is_pressed) final {
|
||||||
// If no ASCII value is supplied, look for a few special cases.
|
// If no ASCII value is supplied, look for a few special cases.
|
||||||
switch(key) {
|
switch(key) {
|
||||||
|
@ -32,6 +32,11 @@ struct KeyActions {
|
|||||||
Instructs that all keys should now be treated as released.
|
Instructs that all keys should now be treated as released.
|
||||||
*/
|
*/
|
||||||
virtual void clear_all_keys() {}
|
virtual void clear_all_keys() {}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Indicates whether a machine most naturally accepts logical rather than physical input.
|
||||||
|
*/
|
||||||
|
virtual bool prefers_logical_input() { return false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -783,8 +783,10 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether a 'logical' keyboard has been requested.
|
// Check whether a 'logical' keyboard has been requested, or the machine would prefer one anyway.
|
||||||
const bool logical_keyboard = arguments.selections.find("logical-keyboard") != arguments.selections.end();
|
const bool logical_keyboard =
|
||||||
|
(arguments.selections.find("logical-keyboard") != arguments.selections.end()) ||
|
||||||
|
(machine->keyboard_machine() && machine->keyboard_machine()->prefers_logical_input());
|
||||||
if(logical_keyboard) {
|
if(logical_keyboard) {
|
||||||
SDL_StartTextInput();
|
SDL_StartTextInput();
|
||||||
}
|
}
|
||||||
@ -1162,13 +1164,8 @@ int main(int argc, char *argv[]) {
|
|||||||
} else {
|
} else {
|
||||||
// This is a slightly terrible way of obtaining a symbol for the key, e.g. for letters it will always return
|
// This is a slightly terrible way of obtaining a symbol for the key, e.g. for letters it will always return
|
||||||
// the capital letter version, at least empirically. But it'll have to do for now.
|
// the capital letter version, at least empirically. But it'll have to do for now.
|
||||||
//
|
|
||||||
// TODO: ideally have a keyboard machine declare whether it wants either key events or text input? But that
|
|
||||||
// doesn't match machines like the IIe that, to some extent, expose both. So then eliding as attempted above,
|
|
||||||
// and keeping ephemeral track of which symbols have been tied to which keys for the benefit of future key up
|
|
||||||
// events is probably the way forward?
|
|
||||||
const char *key_name = SDL_GetKeyName(keypress.keycode);
|
const char *key_name = SDL_GetKeyName(keypress.keycode);
|
||||||
if(keyboard_machine->get_keyboard().set_key_pressed(key, key_name[0], keypress.is_down)) {
|
if(keyboard_machine->get_keyboard().set_key_pressed(key, (strlen(key_name) == 1) ? key_name[0] : 0, keypress.is_down)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user