mirror of https://github.com/bsnes-emu/bsnes.git
108 lines
2.7 KiB
C++
108 lines
2.7 KiB
C++
auto InputManager::appendHotkeys() -> void {
|
|
static int quickStateSlot = 1;
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Toggle Fullscreen";
|
|
hotkey->press = [] {
|
|
presentation->toggleFullScreen();
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Toggle Mouse Capture";
|
|
hotkey->press = [] {
|
|
input->acquired() ? input->release() : input->acquire();
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Save Quick State";
|
|
hotkey->press = [] {
|
|
program->saveState(quickStateSlot);
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Load Quick State";
|
|
hotkey->press = [&] {
|
|
program->loadState(quickStateSlot);
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Decrement Quick State";
|
|
hotkey->press = [&] {
|
|
if(--quickStateSlot < 1) quickStateSlot = 5;
|
|
program->showMessage({"Selected quick state slot ", quickStateSlot});
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Increment Quick State";
|
|
hotkey->press = [&] {
|
|
if(++quickStateSlot > 5) quickStateSlot = 1;
|
|
program->showMessage({"Selected quick state slot ", quickStateSlot});
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Pause Emulation";
|
|
hotkey->press = [] {
|
|
program->pause = !program->pause;
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Fast Forward";
|
|
hotkey->press = [] {
|
|
video->setBlocking(false);
|
|
audio->setBlocking(false);
|
|
};
|
|
hotkey->release = [] {
|
|
video->setBlocking(settings["Video/Synchronize"].boolean());
|
|
audio->setBlocking(settings["Audio/Synchronize"].boolean());
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Power Cycle";
|
|
hotkey->press = [] {
|
|
program->powerCycle();
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
{ auto hotkey = new InputHotkey;
|
|
hotkey->name = "Rotate Display";
|
|
hotkey->press = [] {
|
|
program->rotateDisplay();
|
|
};
|
|
hotkeys.append(hotkey);
|
|
}
|
|
|
|
for(auto& hotkey : hotkeys) {
|
|
hotkey->path = string{"Hotkey/", hotkey->name}.replace(" ", "");
|
|
hotkey->assignment = settings(hotkey->path).text();
|
|
hotkey->bind();
|
|
}
|
|
}
|
|
|
|
auto InputManager::pollHotkeys() -> void {
|
|
if(!program->focused()) return;
|
|
|
|
for(auto& hotkey : hotkeys) {
|
|
int16 state = hotkey->poll();
|
|
if(hotkey->state == 0 && state == 1 && hotkey->press) hotkey->press();
|
|
if(hotkey->state == 1 && state == 0 && hotkey->release) hotkey->release();
|
|
hotkey->state = state;
|
|
}
|
|
}
|