Skip to content

Commit

Permalink
Add a full screen hotkey
Browse files Browse the repository at this point in the history
  • Loading branch information
Hydr8gon committed Sep 3, 2023
1 parent 1053bbe commit 11e98fc
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 29 deletions.
7 changes: 5 additions & 2 deletions src/desktop/input_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ enum InputEvent
REMAP_SLEFT,
REMAP_SRIGHT,
REMAP_SMOD,
REMAP_FULLSCREEN,
CLEAR_MAP,
UPDATE_JOY
};
Expand All @@ -65,6 +66,7 @@ EVT_BUTTON(REMAP_SDOWN, InputDialog::remapSDown)
EVT_BUTTON(REMAP_SLEFT, InputDialog::remapSLeft)
EVT_BUTTON(REMAP_SRIGHT, InputDialog::remapSRight)
EVT_BUTTON(REMAP_SMOD, InputDialog::remapSMod)
EVT_BUTTON(REMAP_FULLSCREEN, InputDialog::remapFullScreen)
EVT_BUTTON(CLEAR_MAP, InputDialog::clearMap)
EVT_TIMER(UPDATE_JOY, InputDialog::updateJoystick)
EVT_BUTTON(wxID_OK, InputDialog::confirm)
Expand Down Expand Up @@ -211,7 +213,7 @@ InputDialog::InputDialog(wxJoystick *joystick):
"L Button", "R Button",
"C-Pad Up", "C-Pad Down", "C-Pad Left", "C-Pad Right",
"Stick Up", "Stick Down", "Stick Left", "Stick Right",
"Stick Mod"
"Stick Mod", "Full Screen"
};

// Set up individual buttons for each binding
Expand Down Expand Up @@ -254,7 +256,7 @@ InputDialog::InputDialog(wxJoystick *joystick):
column4->Add(keySizers[5], 1, wxEXPAND | wxALL, scale / 8);
column4->Add(keySizers[6], 1, wxEXPAND | wxALL, scale / 8);
column4->Add(keySizers[7], 1, wxEXPAND | wxALL, scale / 8);
column4->Add(new wxStaticText(this, wxID_ANY, ""), 1, wxEXPAND | wxALL, scale / 8);
column4->Add(keySizers[19], 1, wxEXPAND | wxALL, scale / 8);

// Combine the button tab contents and add a final border around it
wxBoxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL);
Expand Down Expand Up @@ -338,6 +340,7 @@ REMAP_FUNC(remapSDown, 15)
REMAP_FUNC(remapSLeft, 16)
REMAP_FUNC(remapSRight, 17)
REMAP_FUNC(remapSMod, 18)
REMAP_FUNC(remapFullScreen, 19)

void InputDialog::clearMap(wxCommandEvent &event)
{
Expand Down
1 change: 1 addition & 0 deletions src/desktop/input_dialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class InputDialog: public wxDialog
void remapSLeft(wxCommandEvent &event);
void remapSRight(wxCommandEvent &event);
void remapSMod(wxCommandEvent &event);
void remapFullScreen(wxCommandEvent &event);

void clearMap(wxCommandEvent &event);
void updateJoystick(wxTimerEvent &event);
Expand Down
37 changes: 16 additions & 21 deletions src/desktop/ry_app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,31 +40,26 @@ int ryApp::keyBinds[] =
WXK_UP, WXK_DOWN, WXK_LEFT, WXK_RIGHT, // D-pad
'Q', 'P', // L, R
'8', 'I', 'U', 'O', // C-buttons
'W', 'S', 'A', 'D', WXK_SHIFT // Joystick
'W', 'S', 'A', 'D', WXK_SHIFT, // Joystick
WXK_ESCAPE // Full screen
};

bool ryApp::OnInit()
{
// Define the input binding settings
Settings::add("keyA", &keyBinds[0], false);
Settings::add("keyB", &keyBinds[1], false);
Settings::add("keyZ", &keyBinds[2], false);
Settings::add("keyStart", &keyBinds[3], false);
Settings::add("keyDUp", &keyBinds[4], false);
Settings::add("keyDDown", &keyBinds[5], false);
Settings::add("keyDLeft", &keyBinds[6], false);
Settings::add("keyDRight", &keyBinds[7], false);
Settings::add("keyL", &keyBinds[8], false);
Settings::add("keyR", &keyBinds[9], false);
Settings::add("keyCUp", &keyBinds[10], false);
Settings::add("keyCDown", &keyBinds[11], false);
Settings::add("keyCLeft", &keyBinds[12], false);
Settings::add("keyCRight", &keyBinds[13], false);
Settings::add("keySUp", &keyBinds[14], false);
Settings::add("keySDown", &keyBinds[15], false);
Settings::add("keySLeft", &keyBinds[16], false);
Settings::add("keySRight", &keyBinds[17], false);
Settings::add("keySMod", &keyBinds[18], false);
// Define the input binding setting names
static const char *names[MAX_KEYS] =
{
"keyA", "keyB", "keyZ", "keyStart",
"keyDUp", "keyDDown", "keyDLeft", "keyDRight",
"keyL", "keyR",
"keyCUp", "keyCDown", "keyCLeft", "keyCRight",
"keySUp", "keySDown", "keySLeft", "keySRight",
"keySMod", "keyFullScreen"
};

// Register the input binding settings
for (int i = 0; i < MAX_KEYS; i++)
Settings::add(names[i], &keyBinds[i], false);

// Try to load settings from the current directory first
if (!Settings::load())
Expand Down
2 changes: 1 addition & 1 deletion src/desktop/ry_app.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

#include "ry_frame.h"

#define MAX_KEYS 19
#define MAX_KEYS 20

class ryApp: public wxApp
{
Expand Down
15 changes: 13 additions & 2 deletions src/desktop/ry_canvas.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,13 @@ void ryCanvas::draw(wxPaintEvent &event)

void ryCanvas::resize(wxSizeEvent &event)
{
SetCurrent(*context);
// Full screen breaks the minimum frame size, but changing to a different value fixes it
// As a workaround, clear the minimum size on full screen and reset it shortly after
frame->SetMinClientSize(sizeReset ? wxSize(0, 0) : MIN_SIZE);
sizeReset -= (bool)sizeReset;

// Update the canvas dimensions
SetCurrent(*context);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
wxSize size = GetSize();
Expand All @@ -153,11 +157,18 @@ void ryCanvas::resize(wxSizeEvent &event)
void ryCanvas::pressKey(wxKeyEvent &event)
{
// Trigger a key press if a mapped key was pressed
for (int i = 0; i < MAX_KEYS; i++)
for (int i = 0; i < 19; i++)
{
if (event.GetKeyCode() == ryApp::keyBinds[i])
return frame->pressKey(i);
}

// Toggle full screen if the hotkey was pressed
if (event.GetKeyCode() == ryApp::keyBinds[19])
{
frame->ShowFullScreen(fullScreen = !fullScreen);
sizeReset = 2;
}
}

void ryCanvas::releaseKey(wxKeyEvent &event)
Expand Down
5 changes: 4 additions & 1 deletion src/desktop/ry_canvas.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,15 @@ class ryCanvas: public wxGLCanvas
int refreshRate = 0;
std::chrono::steady_clock::time_point lastRateTime;

bool finished = false;
uint32_t width = 0;
uint32_t height = 0;
uint32_t x = 0;
uint32_t y = 0;

uint8_t sizeReset = 0;
bool fullScreen = false;
bool finished = false;

void draw(wxPaintEvent &event);
void resize(wxSizeEvent &event);
void pressKey(wxKeyEvent &event);
Expand Down
4 changes: 2 additions & 2 deletions src/desktop/ry_frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ ryFrame::ryFrame(std::string path): wxFrame(nullptr, wxID_ANY, "rokuyon")

// Set up and show the window
DragAcceptFiles(true);
SetClientSize(wxSize(480, 360));
SetMinClientSize(wxSize(480, 360));
SetClientSize(MIN_SIZE);
SetMinClientSize(MIN_SIZE);
Centre();
Show(true);

Expand Down
2 changes: 2 additions & 0 deletions src/desktop/ry_frame.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#include <wx/wx.h>
#include <wx/joystick.h>

#define MIN_SIZE wxSize(480, 360)

class ryCanvas;

class ryFrame: public wxFrame
Expand Down

0 comments on commit 11e98fc

Please sign in to comment.