// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/asset-manager/asset-manager.h>
+#include <dali-toolkit/internal/controls/control/control-data-impl.h>
#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali-toolkit/public-api/controls/image-view/image-view.h>
#include <dali-toolkit/public-api/visuals/image-visual-properties.h>
// Size the Slider actor to a default
self.SetProperty(Actor::Property::SIZE, Vector2(DEFAULT_HIT_REGION.x, DEFAULT_HIT_REGION.y));
- // Set the Slider to be highlightable in Screen Reader mode
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
// Connect to the touch signal
self.TouchedSignal().Connect(this, &Slider::OnTouch);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::unique_ptr<Dali::Accessibility::Accessible>(
- new AccessibleImpl(actor, Dali::Accessibility::Role::SLIDER));
- });
+ // Accessibility
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SLIDER);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+}
+
+DevelControl::ControlAccessible* Slider::CreateAccessibleObject()
+{
+ return new SliderAccessible(Self());
}
void Slider::OnRelayout(const Vector2& size, RelayoutContainer& container)
DisplayValue(mValue, true);
if(Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
{
- Control::Impl::GetAccessibilityObject(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
+ GetAccessibleObject()->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
}
}
return value;
}
-double Slider::AccessibleImpl::GetMinimum()
+double Slider::SliderAccessible::GetMinimum() const
{
- auto p = Toolkit::Slider::DownCast(self);
- return p.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get<float>();
+ auto self = Toolkit::Slider::DownCast(Self());
+ return self.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get<float>();
}
-double Slider::AccessibleImpl::GetCurrent()
+double Slider::SliderAccessible::GetCurrent() const
{
- auto p = Toolkit::Slider::DownCast(self);
- return p.GetProperty(Toolkit::Slider::Property::VALUE).Get<float>();
+ auto self = Toolkit::Slider::DownCast(Self());
+ return self.GetProperty(Toolkit::Slider::Property::VALUE).Get<float>();
}
-double Slider::AccessibleImpl::GetMaximum()
+double Slider::SliderAccessible::GetMaximum() const
{
- auto p = Toolkit::Slider::DownCast(self);
- return p.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get<float>();
+ auto self = Toolkit::Slider::DownCast(Self());
+ return self.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get<float>();
}
-bool Slider::AccessibleImpl::SetCurrent(double current)
+bool Slider::SliderAccessible::SetCurrent(double current)
{
if(current < GetMinimum() || current > GetMaximum())
return false;
- auto p = Toolkit::Slider::DownCast(self);
- auto& impl = Toolkit::GetImpl(p);
+ auto self = Toolkit::Slider::DownCast(Self());
+ auto& impl = Toolkit::GetImpl(self);
- const float prev = p.GetProperty<float>(Toolkit::Slider::Property::VALUE);
+ const float prev = self.GetProperty<float>(Toolkit::Slider::Property::VALUE);
float next = static_cast<float>(current);
if(fabsf(next - prev) < Math::MACHINE_EPSILON_0)
{
// do nothing
}
- else if(p.GetProperty<bool>(Toolkit::Slider::Property::SNAP_TO_MARKS))
+ else if(self.GetProperty<bool>(Toolkit::Slider::Property::SNAP_TO_MARKS))
{
- auto marks = p.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS);
+ auto marks = self.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS);
int prevIdx;
if(impl.MarkReached(impl.MapValuePercentage(prev), prevIdx))
nextIdx += (next > prev) ? 1 : -1;
if(nextIdx < 0 || nextIdx >= static_cast<int>(marks.Count()))
+ {
return false;
+ }
next = marks[nextIdx].Get<float>();
}
return true;
}
-double Slider::AccessibleImpl::GetMinimumIncrement()
+double Slider::SliderAccessible::GetMinimumIncrement() const
{
- auto p = Toolkit::Slider::DownCast(self);
+ auto self = Toolkit::Slider::DownCast(Self());
- bool hasMarks = !p.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS).Empty();
- float tolerance = p.GetProperty<float>(Toolkit::Slider::Property::MARK_TOLERANCE);
+ bool hasMarks = !self.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS).Empty();
+ float tolerance = self.GetProperty<float>(Toolkit::Slider::Property::MARK_TOLERANCE);
if(!hasMarks || fabsf(tolerance) < 0.01)
+ {
return 0.0; // let screen-reader choose the increment
+ }
return Math::MACHINE_EPSILON_10000 + tolerance * (GetMaximum() - GetMinimum());
}