mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-25 02:04:23 +00:00
Accessibility: Send value change notifications from SliderAccessibilityHandler
This commit is contained in:
parent
f5eee033ba
commit
945a7f4477
1 changed files with 75 additions and 61 deletions
|
|
@ -1351,6 +1351,80 @@ public:
|
|||
std::unique_ptr<PopupDisplayComponent> popupDisplay;
|
||||
Component* parentForPopupDisplay = nullptr;
|
||||
|
||||
//==============================================================================
|
||||
class SliderAccessibilityHandler : public AccessibilityHandler
|
||||
{
|
||||
public:
|
||||
explicit SliderAccessibilityHandler (Slider& sliderToWrap)
|
||||
: AccessibilityHandler (sliderToWrap,
|
||||
AccessibilityRole::slider,
|
||||
AccessibilityActions{},
|
||||
AccessibilityHandler::Interfaces { std::make_unique<ValueInterface> (sliderToWrap) }),
|
||||
slider (sliderToWrap)
|
||||
{
|
||||
}
|
||||
|
||||
String getHelp() const override { return slider.getTooltip(); }
|
||||
|
||||
private:
|
||||
class ValueInterface : public AccessibilityValueInterface
|
||||
{
|
||||
public:
|
||||
explicit ValueInterface (Slider& sliderToWrap)
|
||||
: slider (sliderToWrap),
|
||||
useMaxValue (slider.isTwoValue())
|
||||
{
|
||||
}
|
||||
|
||||
bool isReadOnly() const override { return false; }
|
||||
|
||||
double getCurrentValue() const override
|
||||
{
|
||||
return useMaxValue ? slider.getMaximum()
|
||||
: slider.getValue();
|
||||
}
|
||||
|
||||
void setValue (double newValue) override
|
||||
{
|
||||
DragInProgress drag (*slider.pimpl);
|
||||
|
||||
if (useMaxValue)
|
||||
slider.setMaxValue (newValue, sendNotificationSync);
|
||||
else
|
||||
slider.setValue (newValue, sendNotificationSync);
|
||||
}
|
||||
|
||||
String getCurrentValueAsString() const override { return slider.getTextFromValue (getCurrentValue()); }
|
||||
void setValueAsString (const String& newValue) override { setValue (slider.getValueFromText (newValue)); }
|
||||
|
||||
AccessibleValueRange getRange() const override
|
||||
{
|
||||
return { { slider.getMinimum(), slider.getMaximum() },
|
||||
getStepSize() };
|
||||
}
|
||||
|
||||
private:
|
||||
double getStepSize() const
|
||||
{
|
||||
auto interval = slider.getInterval();
|
||||
|
||||
return interval != 0.0 ? interval
|
||||
: slider.getRange().getLength() * 0.01;
|
||||
}
|
||||
|
||||
Slider& slider;
|
||||
const bool useMaxValue;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueInterface)
|
||||
};
|
||||
|
||||
Slider& slider;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SliderAccessibilityHandler)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
static double smallestAngleBetween (double a1, double a2) noexcept
|
||||
{
|
||||
|
|
@ -1680,69 +1754,9 @@ void Slider::mouseWheelMove (const MouseEvent& e, const MouseWheelDetails& wheel
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
class SliderAccessibilityHandler : public AccessibilityHandler
|
||||
{
|
||||
public:
|
||||
explicit SliderAccessibilityHandler (Slider& sliderToWrap)
|
||||
: AccessibilityHandler (sliderToWrap,
|
||||
AccessibilityRole::slider,
|
||||
AccessibilityActions{},
|
||||
AccessibilityHandler::Interfaces { std::make_unique<ValueInterface> (sliderToWrap) }),
|
||||
slider (sliderToWrap)
|
||||
{
|
||||
}
|
||||
|
||||
String getHelp() const override { return slider.getTooltip(); }
|
||||
|
||||
private:
|
||||
class ValueInterface : public AccessibilityValueInterface
|
||||
{
|
||||
public:
|
||||
explicit ValueInterface (Slider& sliderToWrap)
|
||||
: slider (sliderToWrap),
|
||||
valueToControl (slider.isTwoValue() ? slider.getMaxValueObject() : slider.getValueObject())
|
||||
{
|
||||
}
|
||||
|
||||
bool isReadOnly() const override { return false; }
|
||||
|
||||
double getCurrentValue() const override { return valueToControl.getValue(); }
|
||||
void setValue (double newValue) override { valueToControl = newValue; }
|
||||
|
||||
String getCurrentValueAsString() const override { return slider.getTextFromValue (getCurrentValue()); }
|
||||
void setValueAsString (const String& newValue) override { setValue (slider.getValueFromText (newValue)); }
|
||||
|
||||
AccessibleValueRange getRange() const override
|
||||
{
|
||||
return { { slider.getMinimum(), slider.getMaximum() },
|
||||
getStepSize() };
|
||||
}
|
||||
|
||||
private:
|
||||
double getStepSize() const
|
||||
{
|
||||
auto interval = slider.getInterval();
|
||||
|
||||
return interval != 0.0 ? interval
|
||||
: slider.getRange().getLength() * 0.01;
|
||||
}
|
||||
|
||||
Slider& slider;
|
||||
Value valueToControl;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueInterface)
|
||||
};
|
||||
|
||||
Slider& slider;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SliderAccessibilityHandler)
|
||||
};
|
||||
|
||||
std::unique_ptr<AccessibilityHandler> Slider::createAccessibilityHandler()
|
||||
{
|
||||
return std::make_unique<SliderAccessibilityHandler> (*this);
|
||||
return std::make_unique<Pimpl::SliderAccessibilityHandler> (*this);
|
||||
}
|
||||
|
||||
} // namespace juce
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue