mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-13 22:32:03 +00:00
Adds a third keyboard input mode, which maps to posting things as a typer.
This commit is contained in:
parent
8a5c4e384a
commit
4572c86f0f
@ -532,7 +532,7 @@ class MachineDocument:
|
|||||||
|
|
||||||
// MARK: Joystick-via-the-keyboard selection
|
// MARK: Joystick-via-the-keyboard selection
|
||||||
@IBAction func useKeyboardAsKeyboard(_ sender: NSMenuItem?) {
|
@IBAction func useKeyboardAsKeyboard(_ sender: NSMenuItem?) {
|
||||||
machine.inputMode = .keyboard
|
machine.inputMode = .keyboardPhysical
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func useKeyboardAsJoystick(_ sender: NSMenuItem?) {
|
@IBAction func useKeyboardAsJoystick(_ sender: NSMenuItem?) {
|
||||||
@ -551,7 +551,7 @@ class MachineDocument:
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
menuItem.state = machine.inputMode == .keyboard ? .on : .off
|
menuItem.state = machine.inputMode == .keyboardPhysical ? .on : .off
|
||||||
return true
|
return true
|
||||||
|
|
||||||
case #selector(self.useKeyboardAsJoystick):
|
case #selector(self.useKeyboardAsJoystick):
|
||||||
|
@ -28,8 +28,9 @@ typedef NS_ENUM(NSInteger, CSMachineVideoSignal) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, CSMachineKeyboardInputMode) {
|
typedef NS_ENUM(NSInteger, CSMachineKeyboardInputMode) {
|
||||||
CSMachineKeyboardInputModeKeyboard,
|
CSMachineKeyboardInputModeKeyboardPhysical,
|
||||||
CSMachineKeyboardInputModeJoystick
|
CSMachineKeyboardInputModeKeyboardLogical,
|
||||||
|
CSMachineKeyboardInputModeJoystick,
|
||||||
};
|
};
|
||||||
|
|
||||||
@interface CSMissingROM: NSObject
|
@interface CSMissingROM: NSObject
|
||||||
|
@ -201,9 +201,10 @@ struct ActivityObserver: public Activity::Observer {
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use the keyboard as a joystick if the machine has no keyboard, or if it has a 'non-exclusive' keyboard.
|
||||||
_inputMode =
|
_inputMode =
|
||||||
(_machine->keyboard_machine() && _machine->keyboard_machine()->get_keyboard().is_exclusive())
|
(_machine->keyboard_machine() && _machine->keyboard_machine()->get_keyboard().is_exclusive())
|
||||||
? CSMachineKeyboardInputModeKeyboard : CSMachineKeyboardInputModeJoystick;
|
? CSMachineKeyboardInputModeKeyboardPhysical : CSMachineKeyboardInputModeJoystick;
|
||||||
|
|
||||||
_leds = [[NSMutableArray alloc] init];
|
_leds = [[NSMutableArray alloc] init];
|
||||||
Activity::Source *const activity_source = _machine->activity_source();
|
Activity::Source *const activity_source = _machine->activity_source();
|
||||||
@ -429,7 +430,7 @@ struct ActivityObserver: public Activity::Observer {
|
|||||||
|
|
||||||
- (void)setKey:(uint16_t)key characters:(NSString *)characters isPressed:(BOOL)isPressed {
|
- (void)setKey:(uint16_t)key characters:(NSString *)characters isPressed:(BOOL)isPressed {
|
||||||
auto keyboard_machine = _machine->keyboard_machine();
|
auto keyboard_machine = _machine->keyboard_machine();
|
||||||
if(keyboard_machine && (self.inputMode == CSMachineKeyboardInputModeKeyboard || !keyboard_machine->get_keyboard().is_exclusive())) {
|
if(keyboard_machine && (self.inputMode != CSMachineKeyboardInputModeJoystick || !keyboard_machine->get_keyboard().is_exclusive())) {
|
||||||
Inputs::Keyboard::Key mapped_key = Inputs::Keyboard::Key::Help; // Make an innocuous default guess.
|
Inputs::Keyboard::Key mapped_key = Inputs::Keyboard::Key::Help; // Make an innocuous default guess.
|
||||||
#define BIND(source, dest) case source: mapped_key = Inputs::Keyboard::Key::dest; break;
|
#define BIND(source, dest) case source: mapped_key = Inputs::Keyboard::Key::dest; break;
|
||||||
// Connect the Carbon-era Mac keyboard scancodes to Clock Signal's 'universal' enumeration in order
|
// Connect the Carbon-era Mac keyboard scancodes to Clock Signal's 'universal' enumeration in order
|
||||||
@ -503,9 +504,19 @@ struct ActivityObserver: public Activity::Observer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@synchronized(self) {
|
if(self.inputMode == CSMachineKeyboardInputModeKeyboardLogical) {
|
||||||
keyboard.set_key_pressed(mapped_key, pressedKey, isPressed);
|
if(isPressed) {
|
||||||
|
@synchronized(self) {
|
||||||
|
char string[2] = { pressedKey, 0 };
|
||||||
|
keyboard_machine->type_string(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
@synchronized(self) {
|
||||||
|
keyboard.set_key_pressed(mapped_key, pressedKey, isPressed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user