From 72a7d5143f19c05bdc9207a2c1f840135df5fe83 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Tue, 14 Jul 2020 01:48:41 +0200 Subject: [PATCH] Implemented Refresh rate slider --- src/custom.cpp | 5 ----- src/osdep/gui/Navigation.cpp | 1 + src/osdep/gui/PanelDisplay.cpp | 22 +++++++++++++++++++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/custom.cpp b/src/custom.cpp index 32566e94..b1e98d49 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -7659,11 +7659,6 @@ static void fpscounter (bool frameok) if (bogusframe || int(last) < 0) return; -#ifdef AMIBERRY // frameskip - if (currprefs.gfx_framerate == 2) - idletime >>= 1; -#endif - mavg (&fps_mavg, last / 10, FPSCOUNTER_MAVG_SIZE); mavg (&idle_mavg, idletime / 10, FPSCOUNTER_MAVG_SIZE); idletime = 0; diff --git a/src/osdep/gui/Navigation.cpp b/src/osdep/gui/Navigation.cpp index 9ff58ecf..40778214 100644 --- a/src/osdep/gui/Navigation.cpp +++ b/src/osdep/gui/Navigation.cpp @@ -218,6 +218,7 @@ static NavigationMap navMap[] = { "CorrectAR", "Display", "Display", "Linear (smooth)", "chkFlickerFixer" }, { "chkFlickerFixer", "Display", "Display", "CorrectAR", "chkFrameskip" }, { "chkFrameskip", "Display", "Display", "chkFlickerFixer", "sldWidth" }, + { "sldRefresh", "", "", "chkFlickerFixer", "sldWidth" }, { "Vertical", "", "", "Horizontal", "Single" }, { "Horizontal", "chkAutoHeight", "", "", "Vertical" }, diff --git a/src/osdep/gui/PanelDisplay.cpp b/src/osdep/gui/PanelDisplay.cpp index 00a29d53..728bda2d 100644 --- a/src/osdep/gui/PanelDisplay.cpp +++ b/src/osdep/gui/PanelDisplay.cpp @@ -67,6 +67,7 @@ static gcn::Slider* sldAmigaHeight; static gcn::CheckBox* chkAutoHeight; static gcn::CheckBox* chkFrameskip; +static gcn::Slider* sldRefresh; static gcn::CheckBox* chkAspect; static gcn::Label* lblScreenmode; @@ -96,8 +97,15 @@ public: changed_prefs.gfx_auto_height = chkAutoHeight->isSelected(); else if (actionEvent.getSource() == chkFrameskip) + { changed_prefs.gfx_framerate = chkFrameskip->isSelected() ? 2 : 1; + sldRefresh->setEnabled(chkFrameskip->isSelected()); + sldRefresh->setValue(changed_prefs.gfx_framerate); + } + else if (actionEvent.getSource() == sldRefresh) + changed_prefs.gfx_framerate = static_cast(sldRefresh->getValue()); + else if (actionEvent.getSource() == chkAspect) changed_prefs.gfx_correct_aspect = chkAspect->isSelected(); @@ -230,6 +238,14 @@ void InitPanelDisplay(const struct _ConfigCategory& category) chkFrameskip->setId("chkFrameskip"); chkFrameskip->addActionListener(amigaScreenActionListener); + sldRefresh = new gcn::Slider(1, 10); + sldRefresh->setSize(100, SLIDER_HEIGHT); + sldRefresh->setBaseColor(gui_baseCol); + sldRefresh->setMarkerLength(20); + sldRefresh->setStepLength(1); + sldRefresh->setId("sldRefresh"); + sldRefresh->addActionListener(amigaScreenActionListener); + lblScreenmode = new gcn::Label("Screen mode:"); lblScreenmode->setAlignment(gcn::Graphics::RIGHT); cboScreenmode = new gcn::DropDown(&fullscreen_modes_list); @@ -337,6 +353,7 @@ void InitPanelDisplay(const struct _ConfigCategory& category) category.panel->add(chkFlickerFixer, DISTANCE_BORDER, posY); posY += chkFlickerFixer->getHeight() + DISTANCE_NEXT_Y; category.panel->add(chkFrameskip, DISTANCE_BORDER, posY); + category.panel->add(sldRefresh, chkFrameskip->getX() + chkFrameskip->getWidth() + DISTANCE_NEXT_X, posY); RefreshPanelDisplay(); } @@ -345,6 +362,7 @@ void InitPanelDisplay(const struct _ConfigCategory& category) void ExitPanelDisplay() { delete chkFrameskip; + delete sldRefresh; delete amigaScreenActionListener; delete lblAmigaWidth; delete sldAmigaWidth; @@ -380,7 +398,9 @@ void ExitPanelDisplay() void RefreshPanelDisplay() { chkFrameskip->setSelected(changed_prefs.gfx_framerate > 1); - + sldRefresh->setEnabled(chkFrameskip->isSelected()); + sldRefresh->setValue(changed_prefs.gfx_framerate); + int i; char tmp[32];