1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-29 23:29:41 +02:00

Add "offset" to SliderTextCtrl widget

This parameter adds an offset to the value before calculating the
logarithm to tweak the scaling of the slider.

Signed-off-by: Max Maisel <max.maisel@posteo.de>
This commit is contained in:
Max Maisel 2021-02-12 14:25:37 +01:00
parent fd4276e3f2
commit dec7e72abc
4 changed files with 14 additions and 10 deletions

View File

@ -618,7 +618,7 @@ wxSlider * ShuttleGuiBase::AddSlider(
SliderTextCtrl* ShuttleGuiBase::AddSliderTextCtrl(
const TranslatableString &Prompt, double pos, double Max, double Min,
int precision, double* value, double scale)
int precision, double* value, double scale, double offset)
{
HandleOptionality( Prompt );
AddPrompt( Prompt );
@ -627,7 +627,7 @@ SliderTextCtrl* ShuttleGuiBase::AddSliderTextCtrl(
return wxDynamicCast(wxWindow::FindWindowById( miId, mpDlg), SliderTextCtrl);
SliderTextCtrl * pSlider;
mpWind = pSlider = safenew SliderTextCtrl(GetParent(), miId,
pos, Min, Max, precision, scale, wxDefaultPosition, wxDefaultSize,
pos, Min, Max, precision, scale, offset, wxDefaultPosition, wxDefaultSize,
GetStyle( SliderTextCtrl::HORIZONTAL ),
value
);

View File

@ -267,7 +267,7 @@ public:
SliderTextCtrl* AddSliderTextCtrl(
const TranslatableString &Prompt, double pos, double Max, double Min = 0,
int precision = 2, double* value = NULL, double scale = 0);
int precision = 2, double* value = NULL, double scale = 0, double offset = 0);
// Pass the same initValue to the sequence of calls to AddRadioButton and
// AddRadioButtonToGroup.

View File

@ -29,7 +29,8 @@ wxDEFINE_EVENT(cEVT_SLIDERTEXT, wxCommandEvent);
SliderTextCtrl::SliderTextCtrl(wxWindow *parent, wxWindowID winid,
double value, double min, double max, int precision, double scale,
const wxPoint& pos, const wxSize& size, long style, double* varValue)
double offset, const wxPoint& pos, const wxSize& size, long style,
double* varValue)
: wxPanelWrapper(parent, winid, pos, size, wxWS_EX_VALIDATE_RECURSIVELY)
{
m_log = style & LOG;
@ -38,6 +39,7 @@ SliderTextCtrl::SliderTextCtrl(wxWindow *parent, wxWindowID winid,
m_min = min;
m_max = max;
m_zero = -std::numeric_limits<double>::infinity();
m_offset = offset;
if(m_int)
{
@ -62,13 +64,13 @@ SliderTextCtrl::SliderTextCtrl(wxWindow *parent, wxWindowID winid,
min = m_zero;
}
else
min = log10(min);
min = log10(min + m_offset);
if(value <= 0.0)
value = m_zero;
else
value = log10(value);
max = log10(max);
value = log10(value + m_offset);
max = log10(max + m_offset);
}
m_sizer = safenew wxBoxSizer(
@ -118,7 +120,7 @@ void SliderTextCtrl::OnTextChange(wxCommandEvent& event)
if(m_value == 0.0)
value = m_zero;
else
value = log10(m_value);
value = log10(m_value + m_offset);
}
m_slider->SetValue(round(value * m_scale));
event.SetEventType(cEVT_SLIDERTEXT);
@ -134,7 +136,7 @@ void SliderTextCtrl::OnSlider(wxCommandEvent& event)
m_value = 0.0;
else
{
m_value = pow(10.0, m_value);
m_value = pow(10.0, m_value) - m_offset;
m_value = std::max(m_min, m_value);
m_value = std::min(m_max, m_value);
}

View File

@ -37,7 +37,8 @@ class SliderTextCtrl : public wxPanelWrapper
SliderTextCtrl(wxWindow *parent, wxWindowID winid,
double value, double min, double max, int precision = 2,
double scale = 0, const wxPoint& pos = wxDefaultPosition,
double scale = 0, double offset = 0,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = HORIZONTAL,
double* varValue = NULL);
@ -69,6 +70,7 @@ class SliderTextCtrl : public wxPanelWrapper
double m_min;
double m_max;
double m_zero;
double m_offset;
wxString m_format;
DECLARE_EVENT_TABLE()