mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:38:12 +00:00

If the underlying parameter is logarithmic, the slider respects that and switches to a logarithmic display. Currently, the used base is e, and we'll have to see in practice if 2 or 10 might be better. The parameters that make use of this, as can be seen in the previous commit, are all of the time dependent parameters such as the synth envelope parameters, as with these, usually fine-grained control at small time scales and coarser control at large time scales is desired. This was a good opportunity to refactor the slider step count into a constant.
32 lines
856 B
C++
32 lines
856 B
C++
/*
|
|
* Copyright (c) 2021, kleines Filmröllchen <filmroellchen@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "WidgetWithLabel.h"
|
|
#include <LibDSP/ProcessorParameter.h>
|
|
#include <LibGUI/Label.h>
|
|
#include <LibGUI/Slider.h>
|
|
#include <LibGfx/Orientation.h>
|
|
|
|
constexpr int slider_steps = 256;
|
|
|
|
class ProcessorParameterSlider
|
|
: public GUI::Slider
|
|
, public WidgetWithLabel {
|
|
C_OBJECT(ProcessorParameterSlider);
|
|
|
|
public:
|
|
ProcessorParameterSlider(Orientation, LibDSP::ProcessorRangeParameter&, RefPtr<GUI::Label>);
|
|
constexpr bool is_logarithmic() const { return m_parameter.is_logarithmic() == LibDSP::Logarithmic::Yes; }
|
|
|
|
protected:
|
|
LibDSP::ProcessorRangeParameter& m_parameter;
|
|
|
|
private:
|
|
// Converts based on processor parameter boundaries.
|
|
int linear_to_logarithmic(int linear_value);
|
|
};
|