}
} // unnamed namespace
-ControlAccessible::ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal)
-: ActorAccessible(self),
- mIsModal(modal)
+ControlAccessible::ControlAccessible(Dali::Actor self)
+: ActorAccessible(self)
{
- auto control = Dali::Toolkit::Control::DownCast(Self());
+ auto control = Toolkit::Control::DownCast(self);
Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control);
Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl);
- if(controlImpl.mAccessibilityRole == Dali::Accessibility::Role::UNKNOWN)
- {
- controlImpl.mAccessibilityRole = role;
- }
- Self().PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) {
+ self.PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) {
if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
{
return;
Dali::Accessibility::States ControlAccessible::CalculateStates()
{
- Dali::Actor self = Self();
- Dali::Accessibility::States state;
- state[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
- state[Dali::Accessibility::State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
-
- if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE)
- {
- state[Dali::Accessibility::State::HIGHLIGHTABLE] = false;
- }
- else
- {
- state[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>();
- }
-
- state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self;
- state[Dali::Accessibility::State::ENABLED] = true;
- state[Dali::Accessibility::State::SENSITIVE] = true;
- state[Dali::Accessibility::State::VISIBLE] = self.GetProperty<bool>(Actor::Property::VISIBLE);
+ using Dali::Accessibility::State;
- if(mIsModal)
- {
- state[Dali::Accessibility::State::MODAL] = true;
- }
- state[Dali::Accessibility::State::SHOWING] = IsShowing();
- state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
- return state;
+ Dali::Actor self = Self();
+ Dali::Accessibility::States states;
+
+ states[State::FOCUSABLE] = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
+ states[State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
+ states[State::HIGHLIGHTABLE] = self.GetProperty<bool>(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
+ states[State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self;
+ states[State::ENABLED] = true;
+ states[State::SENSITIVE] = true;
+ states[State::VISIBLE] = self.GetProperty<bool>(Actor::Property::VISIBLE);
+ states[State::SHOWING] = IsShowing();
+ states[State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
+
+ return states;
}
Dali::Accessibility::States ControlAccessible::GetStates()
/**
* @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
*
- * You can create a derived class (and register it using SetAccessibilityConstructor)
+ * You can create a derived class (and override Control::CreateAccessibleObject)
* in order to customize Accessibility for a given control.
*
- * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
* @see Dali::Accessibility::Accessible
* @see Dali::Accessibility::Component
* @see Dali::Accessibility::Collection
protected:
Vector2 mLastPosition{0.0f, 0.0f};
Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
- bool mIsModal = false;
- bool mIsRoot = false;
void ScrollToSelf();
bool IsShowing();
public:
- ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
+ ControlAccessible(Dali::Actor self);
/**
* @copydoc Dali::Accessibility::Accessible::GetName()
GetControlImplementation(control).mAccessibilityRelations.clear();
}
-void SetAccessibilityConstructor(Dali::Actor control, std::function<std::unique_ptr<Toolkit::DevelControl::ControlAccessible>(Dali::Actor)> constructor)
-{
- GetControlImplementation(Toolkit::Control::DownCast(control)).mAccessibilityConstructor = constructor;
-}
-
void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value)
{
GetControlImplementation(control).AppendAccessibilityAttribute(key, value);
*/
DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse);
-/**
- * The method allows to set specific constructor for creating accessibility structure
- *
- * Thank to this method hierarchy of accessibility objects can be based on internal hierarchy of Actors.
- * It prevents from necessity of keeping two trees synchronized.
- * The method should be called inside OnInitialize method of all classes inheriting from Control.
- *
- * Possible usage can be as follows:
- * @code
- * SetAccessibilityConstructor([](Dali::Actor actor) {
- return std::make_unique<ControlAccessible>(actor, Dali::Accessibility::Role::DIALOG, true));
- });
- * @endcode
- *
- * param constructor callback creating Accessible object
- */
-DALI_TOOLKIT_API void SetAccessibilityConstructor(Dali::Actor control, std::function<std::unique_ptr<Toolkit::DevelControl::ControlAccessible>(Dali::Actor)> constructor);
-
} // namespace DevelControl
} // namespace Toolkit
void Alignment::OnInitialize()
{
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
void Alignment::OnRelayout(const Vector2& size, RelayoutContainer& container)
// bind properties for / set shader constants to defaults
SetupProperties();
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::ANIMATION);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ANIMATION);
}
void BloomView::OnSizeSet(const Vector3& targetSize)
return OnKeyboardEnter();
}
+DevelControl::ControlAccessible* Button::CreateAccessibleObject()
+{
+ return new ButtonAccessible(Self());
+}
+
bool Button::OnTouch(Actor actor, const TouchEvent& touch)
{
if(!IsDisabled() && (actor == touch.GetHitActor(0)))
bool OnAccessibilityActivated() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Toolkit::Control::OnKeyboardEnter()
*/
bool OnKeyboardEnter() override;
{
Button::OnInitialize();
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<CheckBoxButtonAccessible>(actor, Dali::Accessibility::Role::CHECK_BOX);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::CHECK_BOX);
+}
+
+DevelControl::ControlAccessible* CheckBoxButton::CreateAccessibleObject()
+{
+ return new CheckBoxButton::CheckBoxButtonAccessible(Self());
}
Dali::Accessibility::States CheckBoxButton::CheckBoxButtonAccessible::CalculateStates()
*/
void OnInitialize() override;
+ /**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
private:
// Undefined
CheckBoxButton(const CheckBoxButton&);
Actor self = Self();
self.SetProperty(Actor::Property::LEAVE_REQUIRED, true);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<PushButtonAccessible>(actor, Dali::Accessibility::Role::PUSH_BUTTON);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON);
+}
+
+DevelControl::ControlAccessible* PushButton::CreateAccessibleObject()
+{
+ return new PushButtonAccessible(Self());
}
void PushButton::SetIconAlignment(const PushButton::IconAlignment iconAlignment)
*/
void OnInitialize() override;
+ /**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
private:
/**
* @brief Sets the alignment mode to use to align the icon to the label.
{
Button::OnInitialize();
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<RadioButtonAccessible>(actor, Dali::Accessibility::Role::RADIO_BUTTON);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::RADIO_BUTTON);
+}
+
+DevelControl::ControlAccessible* RadioButton::CreateAccessibleObject()
+{
+ return new RadioButtonAccessible(Self());
}
bool RadioButton::OnToggleReleased()
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Toolkit::Internal::Button::OnStateChange
*/
void OnStateChange(State newState) override;
Actor self = Self();
self.SetProperty(Actor::Property::LEAVE_REQUIRED, true);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<ToggleButtonAccessible>(actor, Dali::Accessibility::Role::TOGGLE_BUTTON);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOGGLE_BUTTON);
+}
+
+DevelControl::ControlAccessible* ToggleButton::CreateAccessibleObject()
+{
+ return new ToggleButtonAccessible(Self());
}
void ToggleButton::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value)
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Toolkit::Internal::Button::OnRelayout
*/
void OnRelayout(const Vector2& size, RelayoutContainer& container) override;
// CanvasView can relayout in the OnImageReady, alternative to a signal would be to have a upcall from the Control to CanvasView
Dali::Toolkit::Control handle(GetOwner());
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::IMAGE);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
Adaptor::Get().RegisterProcessor(*this, true);
}
mDispatchKeyEvents(true)
{
Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter);
-
- mAccessibilityConstructor = [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::UNKNOWN);
- };
}
Control::Impl::~Impl()
{
if(!mAccessibleObject)
{
- mAccessibleObject = mAccessibilityConstructor(mControlImpl.Self());
+ mAccessibleObject.reset(mControlImpl.CreateAccessibleObject());
}
return mAccessibleObject.get();
Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
std::map<Dali::Accessibility::RelationType, std::set<Accessibility::Accessible*>> mAccessibilityRelations;
- std::function<std::unique_ptr<Toolkit::DevelControl::ControlAccessible>(Actor)> mAccessibilityConstructor;
std::unique_ptr<Toolkit::DevelControl::ControlAccessible> mAccessibleObject;
// Gesture Detection
mChildrenRoot.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
self.Add(mChildrenRoot);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
void EffectsView::OnSizeSet(const Vector3& targetSize)
self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
SetAsKeyboardFocusGroup(true);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
} // namespace Internal
mInternalRoot.Add(mVertBlurActor);
mInternalRoot.Add(mRenderDownsampledCamera);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
void GaussianBlurView::OnSizeSet(const Vector3& targetSize)
Dali::Toolkit::Control handle(GetOwner());
handle.ResourceReadySignal().Connect(this, &ImageView::OnResourceReady);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::IMAGE);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
}
void ImageView::SetImage(const Property::Map& map)
constraint.AddSource(Source(self, Actor::Property::WORLD_SCALE));
constraint.Apply();
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
Magnifier::~Magnifier()
Shader shader = Shader::New(SHADER_MODEL3D_VIEW_SIMPLE_SHADER_VERT, SHADER_MODEL3D_VIEW_SIMPLE_SHADER_FRAG);
mRenderer = Renderer::New(mesh, shader);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::IMAGE);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
}
void Model3dView::LoadGeometry()
void NavigationView::OnInitialize()
{
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
void NavigationView::OnSceneConnection(int depth)
// enable the pan gesture which is attached to the control
EnableGestureDetection(GestureType::Value(GestureType::PAN));
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::PAGE_TAB_LIST);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PAGE_TAB_LIST);
}
Shader PageTurnView::CreateShader(const Property::Map& shaderMap)
DevelControl::AppendAccessibilityAttribute(Toolkit::Control::DownCast(self), "sub-role", "Alert");
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<PopupAccessible>(actor, Dali::Accessibility::Role::DIALOG, true);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG);
+}
+
+DevelControl::ControlAccessible* Popup::CreateAccessibleObject()
+{
+ return new PopupAccessible(Self());
}
Popup::~Popup()
auto displayState = popup.GetProperty<std::string>(Toolkit::Popup::Property::DISPLAY_STATE);
states[Dali::Accessibility::State::SHOWING] = (displayState == "SHOWN" || displayState == "SHOWING");
+ states[Dali::Accessibility::State::MODAL] = true;
return states;
}
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* Called whenever the popup layout is re-set up.
* Normally due to a change in contents.
* Note: This is only done when the popup is shown.
void ProgressBar::OnInitialize()
{
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<ProgressBarAccessible>(actor, Dali::Accessibility::Role::PROGRESS_BAR);
- });
- //Enable highightability
- Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ // Accessibility
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PROGRESS_BAR);
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+}
+
+DevelControl::ControlAccessible* ProgressBar::CreateAccessibleObject()
+{
+ return new ProgressBarAccessible(Self());
}
void ProgressBar::OnRelayout(const Vector2& size, RelayoutContainer& container)
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* Get the range of the valid values the ProgressBar handle can move between
*
* @param[in] currentSize The current size of the ProgressBar
void ScrollBar::OnInitialize()
{
+ auto self = Self();
+
CreateDefaultIndicatorActor();
- Self().SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
+ self.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
+
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_BAR);
+}
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<ScrollBarAccessible>(actor, Dali::Accessibility::Role::SCROLL_BAR);
- });
+DevelControl::ControlAccessible* ScrollBar::CreateAccessibleObject()
+{
+ return new ScrollBarAccessible(Self());
}
void ScrollBar::SetScrollPropertySource(Handle handle, Property::Index propertyScrollPosition, Property::Index propertyMinScrollPosition, Property::Index propertyMaxScrollPosition, Property::Index propertyScrollContentSize)
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Toolkit::Control::OnPan
*/
void OnPan(const PanGesture& gesture) override;
// Connect wheel event
self.WheelEventSignal().Connect(this, &ItemView::OnWheelEvent);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<ItemViewAccessible>(actor, Dali::Accessibility::Role::SCROLL_PANE);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE);
+}
+
+DevelControl::ControlAccessible* ItemView::CreateAccessibleObject()
+{
+ return new ItemViewAccessible(Self());
}
ItemView::~ItemView()
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Toolkit::Control::OnAccessibilityPan()
*/
bool OnAccessibilityPan(PanGesture gesture) override;
// Connect wheel event
self.WheelEventSignal().Connect(this, &ScrollView::OnWheelEvent);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<ScrollViewAccessible>(actor, Dali::Accessibility::Role::SCROLL_PANE);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE);
+}
+
+DevelControl::ControlAccessible* ScrollView::CreateAccessibleObject()
+{
+ return new ScrollViewAccessible(Self());
}
void ScrollView::OnSceneConnection(int depth)
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc CustomActorImpl::OnSceneConnection()
*/
void OnSceneConnection(int depth) override;
void Scrollable::OnInitialize()
{
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<ScrollableAccessible>(actor, Dali::Accessibility::Role::SCROLL_PANE);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE);
+}
+
+DevelControl::ControlAccessible* Scrollable::CreateAccessibleObject()
+{
+ return new ScrollableAccessible(Self());
}
bool Scrollable::IsOvershootEnabled() const
*/
virtual void OnInitialize() override;
+ /**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
private:
/**
* Temporary function to override EnableScrollOvershoot functionality for overshoot
blurStrengthConstraint.AddSource(Source(self, mBlurStrengthPropertyIndex));
blurStrengthConstraint.Apply();
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
void ShadowView::OnChildAdd(Actor& child)
// 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::make_unique<SliderAccessible>(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)
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* Hit region touch
*
* @param[in] actor The actor the event is raised for
mBlurStrengthPropertyIndex = self.RegisterUniqueProperty("blurStrength", 0.f);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
void SuperBlurView::SetTexture(Texture texture)
self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
SetAsKeyboardFocusGroup(true);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::TABLE);
- });
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TABLE);
}
void TableView::ResizeContainers(unsigned int rows, unsigned int columns)
{
Actor self = Self();
- // Enable highlightability
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ // Accessibility
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LINK);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+}
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<TextAnchorAccessible>(actor, Dali::Accessibility::Role::LINK);
- });
+DevelControl::ControlAccessible* TextAnchor::CreateAccessibleObject()
+{
+ return new TextAnchorAccessible(Self());
}
TextAnchor::TextAnchor()
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Control::OnPropertySet()
*/
// void OnPropertySet(Property::Index index, const Property::Value& propertyValue) override;
self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT);
self.OnSceneSignal().Connect(this, &TextEditor::OnSceneConnect);
- //Enable highightability
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
DevelControl::SetInputMethodContext(*this, mInputMethodContext);
// Creates an extra control to be used as stencil buffer.
self.Add(mStencil);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<TextEditorAccessible>(actor, Dali::Accessibility::Role::ENTRY);
- });
+ // Accessibility
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
Accessibility::Bridge::EnabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged);
Accessibility::Bridge::DisabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged);
}
+DevelControl::ControlAccessible* TextEditor::CreateAccessibleObject()
+{
+ return new TextEditorAccessible(Self());
+}
+
void TextEditor::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
{
DALI_LOG_INFO(gTextEditorLogFilter, Debug::Verbose, "TextEditor::OnStyleChange\n");
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Control::OnStyleChange()
*/
void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override;
self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT);
self.OnSceneSignal().Connect(this, &TextField::OnSceneConnect);
- //Enable highightability
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
DevelControl::SetInputMethodContext(*this, mInputMethodContext);
if(Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy)
EnableClipping();
}
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<TextFieldAccessible>(actor, Dali::Accessibility::Role::ENTRY);
- });
+ // Accessibility
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
Accessibility::Bridge::EnabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged);
Accessibility::Bridge::DisabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged);
}
+DevelControl::ControlAccessible* TextField::CreateAccessibleObject()
+{
+ return new TextFieldAccessible(Self());
+}
+
void TextField::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
{
DALI_LOG_INFO(gTextFieldLogFilter, Debug::Verbose, "TextField::OnStyleChange\n");
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Control::OnStyleChange()
*/
void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override;
self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH);
self.SetResizePolicy(ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT);
- // Enable highlightability
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
// Enable the text ellipsis.
mController->SetTextElideEnabled(true); // If false then text larger than control will overflow
Layout::Engine& engine = mController->GetLayoutEngine();
engine.SetCursorWidth(0u); // Do not layout space for the cursor.
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<TextLabelAccessible>(actor, Dali::Accessibility::Role::LABEL);
- });
+ // Accessibility
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LABEL);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
Accessibility::Bridge::EnabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged);
Accessibility::Bridge::DisabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged);
}
+DevelControl::ControlAccessible* TextLabel::CreateAccessibleObject()
+{
+ return new TextLabelAccessible(Self());
+}
+
void TextLabel::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
{
DALI_LOG_INFO(gLogFilter, Debug::Verbose, "TextLabel::OnStyleChange\n");
void OnInitialize() override;
/**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+ /**
* @copydoc Control::OnStyleChange()
*/
void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override;
self.SetResizePolicy(ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS);
self.SetProperty(Actor::Property::COLOR_ALPHA, 0.0f);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::DIALOG, true);
- });
-
- //Enable highightability
+ // Accessibility
self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG);
+}
+
+DevelControl::ControlAccessible* TextSelectionPopup::CreateAccessibleObject()
+{
+ return new TextSelectionPopupAccessible(Self());
+}
+
+Dali::Accessibility::States TextSelectionPopup::TextSelectionPopupAccessible::CalculateStates()
+{
+ auto states = ControlAccessible::CalculateStates();
+
+ states[Dali::Accessibility::State::MODAL] = true;
+
+ return states;
}
void TextSelectionPopup::HideAnimationFinished(Animation& animation)
#include <string>
// INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/controls/control-devel.h>
#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
#include <dali-toolkit/devel-api/controls/text-controls/text-selection-popup.h>
#include <dali-toolkit/devel-api/controls/text-controls/text-selection-toolbar.h>
*/
void OnInitialize() override;
+ /**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
private: // Implementation
void HideAnimationFinished(Animation& animation);
*/
virtual ~TextSelectionPopup();
+protected:
+ class TextSelectionPopupAccessible : public DevelControl::ControlAccessible
+ {
+ public:
+ using DevelControl::ControlAccessible::ControlAccessible;
+
+ /**
+ * @copydoc DevelControl::ControlAccessible::CalculateStates()
+ */
+ Dali::Accessibility::States CalculateStates() override;
+ };
+
private:
// Undefined copy constructor and assignment operators
TextSelectionPopup(const TextSelectionPopup&);
{
SetUp();
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::TOOL_BAR);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOOL_BAR);
}
void TextSelectionToolbar::OnRelayout(const Vector2& size, RelayoutContainer& container)
mLayout.SetRelativeWidth(0, mLeftRelativeSpace);
mLayout.SetRelativeWidth(1, mRightRelativeSpace);
- DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::TOOL_BAR);
- });
+ Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOOL_BAR);
}
void ToolBar::OnChildAdd(Actor& child)
Actor self = Self();
mVideoPlayer.FinishedSignal().Connect(this, &VideoView::EmitSignalFinish);
- DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
- return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::VIDEO);
- });
-
- //Enable highightability
- Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ // Accessibility
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::VIDEO);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
//update self property
self.RegisterProperty(IS_VIDEO_VIEW_PROPERTY_NAME, true, Property::READ_WRITE);
return false; // Accessibility zoom action is not handled by default
}
+DevelControl::ControlAccessible* Control::CreateAccessibleObject()
+{
+ return new DevelControl::ControlAccessible(Self());
+}
+
Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled)
{
return Actor();
/**
* @brief Gets the Accessible object that represents this control.
*
- * This method creates the Accessible object if necessary, so a non-null return is expected.
+ * This method calls CreateAccessibleObject() if necessary, so a non-null return is expected.
*
* @return The Accessible object
+ *
+ * @see CreateAccessibleObject()
*/
Toolkit::DevelControl::ControlAccessible* GetAccessibleObject();
*/
virtual bool OnAccessibilityZoom();
+ /**
+ * @brief This method should be overriden by deriving classes when they wish to be
+ * represented by a custom Accessible object implementation.
+ *
+ * The AT-SPI infrastructure is responsible for destroying the returned object.
+ *
+ * Currently, this method is called at most once in a given Control's lifetime, when
+ * GetAccessibleObject() is called for the first time. A future version of the
+ * AT-SPI infrastructure, however, may delete the Accessible object and request a new
+ * one to be created (by calling this method) multiple times, for example during
+ * scene connection and disconnection.
+ *
+ * @return The newly created Accessible object
+ *
+ * @see GetAccessibleObject()
+ */
+ virtual DevelControl::ControlAccessible* CreateAccessibleObject();
+
// Keyboard focus
/**