summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp
diff options
context:
space:
mode:
authorJules Blok <jules.blok@gmail.com>2015-06-10 00:00:12 +0200
committerJules Blok <jules.blok@gmail.com>2015-06-10 00:00:12 +0200
commit7dfced21a2e5aac7195e0e1ad76468e30306766b (patch)
treebd671b639d3d911460b767caabad8fc8a759a6bf /Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp
parentc25be031fc1031d795157d8344b87b7841145197 (diff)
parent7b0a65e295c784f9d573f2ef52d4e2a7b9bb2889 (diff)
Merge branch 'master' into stable
Diffstat (limited to 'Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp')
-rw-r--r--Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp b/Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp
new file mode 100644
index 0000000000..ebdb87a00e
--- /dev/null
+++ b/Source/Core/DolphinWX/Config/AdvancedConfigPane.cpp
@@ -0,0 +1,94 @@
+// Copyright 2015 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include <cmath>
+
+#include <wx/checkbox.h>
+#include <wx/sizer.h>
+#include <wx/slider.h>
+#include <wx/stattext.h>
+
+#include "Core/ConfigManager.h"
+#include "DolphinWX/Config/AdvancedConfigPane.h"
+
+AdvancedConfigPane::AdvancedConfigPane(wxWindow* parent, wxWindowID id)
+ : wxPanel(parent, id)
+{
+ InitializeGUI();
+ LoadGUIValues();
+}
+
+void AdvancedConfigPane::InitializeGUI()
+{
+ m_clock_override_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable CPU Clock Override"));
+ m_clock_override_slider = new wxSlider(this, wxID_ANY, 100, 0, 150, wxDefaultPosition, wxSize(200,-1));
+ m_clock_override_text = new wxStaticText(this, wxID_ANY, "");
+
+ m_clock_override_checkbox->Bind(wxEVT_CHECKBOX, &AdvancedConfigPane::OnClockOverrideCheckBoxChanged, this);
+ m_clock_override_slider->Bind(wxEVT_SLIDER, &AdvancedConfigPane::OnClockOverrideSliderChanged, this);
+
+ wxStaticText* const clock_override_description = new wxStaticText(this, wxID_ANY,
+ _("Higher values can make variable-framerate games "
+ "run at a higher framerate, at the expense of CPU. "
+ "Lower values can make variable-framerate games "
+ "run at a lower framerate, saving CPU.\n\n"
+ "WARNING: Changing this from the default (100%) "
+ "can and will break games and cause glitches. "
+ "Do so at your own risk. Please do not report "
+ "bugs that occur with a non-default clock. "));
+ clock_override_description->Wrap(400);
+
+ wxBoxSizer* const clock_override_checkbox_sizer = new wxBoxSizer(wxHORIZONTAL);
+ clock_override_checkbox_sizer->Add(m_clock_override_checkbox);
+
+ wxBoxSizer* const clock_override_slider_sizer = new wxBoxSizer(wxHORIZONTAL);
+ clock_override_slider_sizer->Add(m_clock_override_slider, 1, wxALL, 5);
+ clock_override_slider_sizer->Add(m_clock_override_text, 1, wxALL, 5);
+
+ wxBoxSizer* const clock_override_description_sizer = new wxBoxSizer(wxHORIZONTAL);
+ clock_override_description_sizer->Add(clock_override_description, 1, wxALL, 5);
+
+ wxStaticBoxSizer* const cpu_options_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _("CPU Options"));
+ cpu_options_sizer->Add(clock_override_checkbox_sizer);
+ cpu_options_sizer->Add(clock_override_slider_sizer);
+ cpu_options_sizer->Add(clock_override_description_sizer);
+
+ wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
+ main_sizer->Add(cpu_options_sizer , 0, wxEXPAND | wxALL, 5);
+
+ SetSizer(main_sizer);
+}
+
+void AdvancedConfigPane::LoadGUIValues()
+{
+ int ocFactor = (int)(std::log2f(SConfig::GetInstance().m_OCFactor) * 25.f + 100.f + 0.5f);
+ bool oc_enabled = SConfig::GetInstance().m_OCEnable;
+ m_clock_override_checkbox->SetValue(oc_enabled);
+ m_clock_override_slider ->SetValue(ocFactor);
+ m_clock_override_slider->Enable(oc_enabled);
+ UpdateCPUClock();
+}
+
+void AdvancedConfigPane::OnClockOverrideCheckBoxChanged(wxCommandEvent& event)
+{
+ SConfig::GetInstance().m_OCEnable = m_clock_override_checkbox->IsChecked();
+ m_clock_override_slider->Enable(SConfig::GetInstance().m_OCEnable);
+ UpdateCPUClock();
+}
+
+void AdvancedConfigPane::OnClockOverrideSliderChanged(wxCommandEvent& event)
+{
+ // Vaguely exponential scaling?
+ SConfig::GetInstance().m_OCFactor = std::exp2f((m_clock_override_slider->GetValue() - 100.f) / 25.f);
+ UpdateCPUClock();
+}
+
+void AdvancedConfigPane::UpdateCPUClock()
+{
+ bool wii = SConfig::GetInstance().m_LocalCoreStartupParameter.bWii;
+ int percent = (int)(std::roundf(SConfig::GetInstance().m_OCFactor * 100.f));
+ int clock = (int)(std::roundf(SConfig::GetInstance().m_OCFactor * (wii ? 729.f : 486.f)));
+
+ m_clock_override_text->SetLabel(SConfig::GetInstance().m_OCEnable ? wxString::Format("%d %% (%d mhz)", percent, clock) : "");
+}