From: JIYUN YANG Date: Thu, 11 Mar 2021 05:25:43 +0000 (+0000) Subject: Merge "Add APIs of webview settings." into devel/master X-Git-Tag: dali_2.0.17~1 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=b0115c8f21708cab60e853767d353e35c8b59ebd;hp=4102db00b3c605c8b6cafd1cf266f6910bb06054 Merge "Add APIs of webview settings." into devel/master --- diff --git a/dali-toolkit/devel-api/controls/accessible-impl.cpp b/dali-toolkit/devel-api/controls/accessible-impl.cpp new file mode 100644 index 0000000..f986bd4 --- /dev/null +++ b/dali-toolkit/devel-api/controls/accessible-impl.cpp @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// CLASS HEADER +#include "accessible-impl.h" + +// EXTERNAL INCLUDES +#include + +// INTERNAL INCLUDES +#include +#include +#include +#include +#include +#include + +namespace Dali::Toolkit::DevelControl { + +AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal) +: self(self), + modal(modal) +{ + auto control = Dali::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) { + if(this->self != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) + { + return; + } + + if(index == DevelControl::Property::ACCESSIBILITY_NAME || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet)) + { + if(controlImpl.mAccessibilityGetNameSignal.Empty()) + { + Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME); + } + } + + if(index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet)) + { + if(controlImpl.mAccessibilityGetDescriptionSignal.Empty()) + { + Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); + } + } + }); +} + +std::string AccessibleImpl::GetName() +{ + auto control = Dali::Toolkit::Control::DownCast(self); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + if(!controlImpl.mAccessibilityGetNameSignal.Empty()) + { + std::string ret; + controlImpl.mAccessibilityGetNameSignal.Emit(ret); + return ret; + } + + if(controlImpl.mAccessibilityNameSet) + return controlImpl.mAccessibilityName; + + if(auto raw = GetNameRaw(); !raw.empty()) + return raw; + + return self.GetProperty(Actor::Property::NAME); +} + +std::string AccessibleImpl::GetNameRaw() +{ + return {}; +} + +std::string AccessibleImpl::GetDescription() +{ + auto control = Dali::Toolkit::Control::DownCast(self); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty()) + { + std::string ret; + controlImpl.mAccessibilityGetDescriptionSignal.Emit(ret); + return ret; + } + + if(controlImpl.mAccessibilityDescriptionSet) + return controlImpl.mAccessibilityDescription; + + return GetDescriptionRaw(); +} + +std::string AccessibleImpl::GetDescriptionRaw() +{ + return ""; +} + +Dali::Accessibility::Accessible* AccessibleImpl::GetParent() +{ + return Dali::Accessibility::Accessible::Get(self.GetParent()); +} + +size_t AccessibleImpl::GetChildCount() +{ + return self.GetChildCount(); +} + +Dali::Accessibility::Accessible* AccessibleImpl::GetChildAtIndex(size_t index) +{ + return Dali::Accessibility::Accessible::Get(self.GetChildAt(static_cast(index))); +} + +size_t AccessibleImpl::GetIndexInParent() +{ + auto s = self; + auto parent = s.GetParent(); + DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent"); + auto count = parent.GetChildCount(); + for(auto i = 0u; i < count; ++i) + { + auto c = parent.GetChildAt(i); + if(c == s) + return i; + } + DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent"); + return static_cast(-1); +} + +Dali::Accessibility::Role AccessibleImpl::GetRole() +{ + return self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE); +} + +Dali::Accessibility::States AccessibleImpl::CalculateStates() +{ + Dali::Accessibility::States s; + s[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE); + s[Dali::Accessibility::State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self; + if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE) + s[Dali::Accessibility::State::HIGHLIGHTABLE] = false; + else + s[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get(); + s[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; + s[Dali::Accessibility::State::ENABLED] = true; + s[Dali::Accessibility::State::SENSITIVE] = true; + s[Dali::Accessibility::State::ANIMATED] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED).Get(); + s[Dali::Accessibility::State::VISIBLE] = true; + if(modal) + { + s[Dali::Accessibility::State::MODAL] = true; + } + s[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get() && self.GetCurrentProperty(Actor::Property::VISIBLE); + + s[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); + return s; +} + +Dali::Accessibility::States AccessibleImpl::GetStates() +{ + return CalculateStates(); +} + +Dali::Accessibility::Attributes AccessibleImpl::GetAttributes() +{ + std::unordered_map attribute_map; + auto q = Dali::Toolkit::Control::DownCast(self); + auto w = + q.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES); + auto z = w.GetMap(); + + if(z) + { + auto map_size = z->Count(); + + for(unsigned int i = 0; i < map_size; i++) + { + auto map_key = z->GetKeyAt(i); + if(map_key.type == Dali::Property::Key::STRING) + { + std::string map_value; + if(z->GetValue(i).Get(map_value)) + { + attribute_map.emplace(std::move(map_key.stringKey), + std::move(map_value)); + } + } + } + } + + return attribute_map; +} + +Dali::Accessibility::ComponentLayer AccessibleImpl::GetLayer() +{ + return Dali::Accessibility::ComponentLayer::WINDOW; +} + +Dali::Rect<> AccessibleImpl::GetExtents(Dali::Accessibility::CoordType ctype) +{ + Vector2 screenPosition = + self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION) + .Get(); + auto size = self.GetCurrentProperty(Actor::Property::SIZE) * self.GetCurrentProperty(Actor::Property::WORLD_SCALE); + bool positionUsesAnchorPoint = + self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT) + .Get(); + Vector3 anchorPointOffSet = + size * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) + : AnchorPoint::TOP_LEFT); + Vector2 position = Vector2(screenPosition.x - anchorPointOffSet.x, + screenPosition.y - anchorPointOffSet.y); + + return {position.x, position.y, size.x, size.y}; +} + +int16_t AccessibleImpl::GetMdiZOrder() +{ + return 0; +} +double AccessibleImpl::GetAlpha() +{ + return 0; +} + +bool AccessibleImpl::GrabFocus() +{ + return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(self); +} + +static Dali::Actor CreateHighlightIndicatorActor() +{ + std::string focusBorderImagePath(AssetManager::GetDaliImagePath()); + focusBorderImagePath += "/keyboard_focus.9.png"; + // Create the default if it hasn't been set and one that's shared by all the + // keyboard focusable actors + auto actor = Toolkit::ImageView::New(focusBorderImagePath); + actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + DevelControl::AppendAccessibilityAttribute(actor, "highlight", ""); + actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED, true); + actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); + + return actor; +} + +bool AccessibleImpl::GrabHighlight() +{ + auto old = GetCurrentlyHighlightedActor(); + + if(!Dali::Accessibility::IsUp()) + return false; + if(self == old) + return true; + if(old) + { + auto c = dynamic_cast(Internal::Control::Impl::GetAccessibilityObject(old)); + if(c) + c->ClearHighlight(); + } + auto highlight = GetHighlightActor(); + if(!highlight) + { + highlight = CreateHighlightIndicatorActor(); + SetHighlightActor(highlight); + } + highlight.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f); + highlight.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f)); + + EnsureSelfVisible(); + self.Add(highlight); + SetCurrentlyHighlightedActor(self); + EmitHighlighted(true); + + return true; +} + +bool AccessibleImpl::ClearHighlight() +{ + if(!Dali::Accessibility::IsUp()) + return false; + if(GetCurrentlyHighlightedActor() == self) + { + self.Remove(GetHighlightActor()); + SetCurrentlyHighlightedActor({}); + EmitHighlighted(false); + return true; + } + return false; +} + +std::string AccessibleImpl::GetActionName(size_t index) +{ + if(index >= GetActionCount()) return ""; + Dali::TypeInfo type; + self.GetTypeInfo(type); + DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); + return type.GetActionName(index); +} + +std::string AccessibleImpl::GetLocalizedActionName(size_t index) +{ + // TODO: add localization + return GetActionName(index); +} + +std::string AccessibleImpl::GetActionDescription(size_t index) +{ + return ""; +} + +size_t AccessibleImpl::GetActionCount() +{ + Dali::TypeInfo type; + self.GetTypeInfo(type); + DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); + return type.GetActionCount(); +} + +std::string AccessibleImpl::GetActionKeyBinding(size_t index) +{ + return ""; +} + +bool AccessibleImpl::DoAction(size_t index) +{ + std::string actionName = GetActionName(index); + return self.DoAction(actionName, {}); +} + +bool AccessibleImpl::DoAction(const std::string& name) +{ + return self.DoAction(name, {}); +} + +bool AccessibleImpl::DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) +{ + auto control = Dali::Toolkit::Control::DownCast(self); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + if(!controlImpl.mAccessibilityDoGestureSignal.Empty()) + { + auto ret = std::make_pair(gestureInfo, false); + controlImpl.mAccessibilityDoGestureSignal.Emit(ret); + return ret.second; + } + + return false; +} + +std::vector AccessibleImpl::GetRelationSet() +{ + auto control = Dali::Toolkit::Control::DownCast(self); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + std::vector ret; + + auto& v = controlImpl.mAccessibilityRelations; + for(auto i = 0u; i < v.size(); ++i) + { + if(v[i].empty()) + continue; + + ret.emplace_back(Accessibility::Relation{static_cast(i), v[i]}); + } + + return ret; +} + +void AccessibleImpl::EnsureChildVisible(Actor child) +{ +} + +void AccessibleImpl::EnsureSelfVisible() +{ + auto parent = dynamic_cast(GetParent()); + if(parent) + { + parent->EnsureChildVisible(self); + } +} + +Dali::Property::Index AccessibleImpl::GetNamePropertyIndex() +{ + return Actor::Property::NAME; +} + +Dali::Property::Index AccessibleImpl::GetDescriptionPropertyIndex() +{ + return Dali::Property::INVALID_INDEX; +} + +} // namespace Dali::Toolkit::DevelControl diff --git a/dali-toolkit/devel-api/controls/accessible-impl.h b/dali-toolkit/devel-api/controls/accessible-impl.h new file mode 100644 index 0000000..feffe75 --- /dev/null +++ b/dali-toolkit/devel-api/controls/accessible-impl.h @@ -0,0 +1,217 @@ +#ifndef DALI_TOOLKIT_ACCESSIBLE_IMPL_H +#define DALI_TOOLKIT_ACCESSIBLE_IMPL_H +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// EXTERNAL INCLUDES +#include +#include + +// INTERNAL INCLUDES +#include + +namespace Dali::Toolkit::DevelControl { + +/** + * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes + * + * You can create a derived class (and register it using SetAccessibilityConstructor) + * 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 + * @see Dali::Accessibility::Action + * @see Dali::Accessibility::Value + * @see Dali::Accessibility::Text + * @see Dali::Accessibility::EditableText + */ +struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible, + public virtual Dali::Accessibility::Component, + public virtual Dali::Accessibility::Collection, + public virtual Dali::Accessibility::Action +{ + Dali::Actor self; + bool modal = false, root = false; + + AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false); + + /** + * @copydoc Dali::Accessibility::Accessible::GetName() + */ + std::string GetName() override; + + /** + * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property + */ + virtual std::string GetNameRaw(); + + /** + * @copydoc Dali::Accessibility::Accessible::GetDescription() + */ + std::string GetDescription() override; + + /** + * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property + */ + virtual std::string GetDescriptionRaw(); + + /** + * @copydoc Dali::Accessibility::Accessible::GetParent() + */ + Dali::Accessibility::Accessible* GetParent() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetChildCount() + */ + size_t GetChildCount() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex() + */ + Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetIndexInParent() + */ + size_t GetIndexInParent() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetRole() + */ + Dali::Accessibility::Role GetRole() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetStates() + */ + Dali::Accessibility::States GetStates() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetAttributes() + */ + Dali::Accessibility::Attributes GetAttributes() override; + + /** + * @copydoc Dali::Accessibility::Component::GetExtents() + */ + Dali::Rect<> GetExtents(Dali::Accessibility::CoordType ctype) override; + + /** + * @copydoc Dali::Accessibility::Component::GetLayer() + */ + Dali::Accessibility::ComponentLayer GetLayer() override; + + /** + * @copydoc Dali::Accessibility::Component::GetMdiZOrder() + */ + int16_t GetMdiZOrder() override; + + /** + * @copydoc Dali::Accessibility::Component::GrabFocus() + */ + bool GrabFocus() override; + + /** + * @copydoc Dali::Accessibility::Component::GetAlpha() + */ + double GetAlpha() override; + + /** + * @copydoc Dali::Accessibility::Component::GrabHighlight() + */ + bool GrabHighlight() override; + + /** + * @copydoc Dali::Accessibility::Component::ClearHighlight() + */ + bool ClearHighlight() override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionName() + */ + std::string GetActionName(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Action::GetLocalizedActionName() + */ + std::string GetLocalizedActionName(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionDescription() + */ + std::string GetActionDescription(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionCount() + */ + size_t GetActionCount() override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionKeyBinding() + */ + std::string GetActionKeyBinding(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Action::DoAction(size_t) + */ + bool DoAction(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Action::DoAction(const std::string&) + */ + bool DoAction(const std::string& name) override; + + /** + * @copydoc Dali::Accessibility::Accessible::DoGesture() + */ + bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetRelationSet() + */ + std::vector GetRelationSet() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetStates() + */ + virtual Dali::Accessibility::States CalculateStates(); + + /** + * @brief Makes sure that a given child of this container (e.g. ItemView) is visible + */ + virtual void EnsureChildVisible(Actor child); + + /** + * @brief Makes sure this actor is visible (when moving the highlight frame to an + * actor that is scrolled out of the viewport) + */ + virtual void EnsureSelfVisible(); + + /** + * @brief Returns the index of the property that represents this actor's name + */ + virtual Dali::Property::Index GetNamePropertyIndex(); + + /** + * @brief Returns the index of the property that represents this actor's description + */ + virtual Dali::Property::Index GetDescriptionPropertyIndex(); +}; + +} // namespace Dali::Toolkit::DevelControl + +#endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index c9d13f2..3d340ec 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -22,6 +22,7 @@ #include // INTERNAL INCLUDES +#include #include #include diff --git a/dali-toolkit/devel-api/file.list b/dali-toolkit/devel-api/file.list index f43ca09..0e1ec7d 100755 --- a/dali-toolkit/devel-api/file.list +++ b/dali-toolkit/devel-api/file.list @@ -9,6 +9,7 @@ SET( devel_api_src_files ${devel_api_src_dir}/builder/builder.cpp ${devel_api_src_dir}/builder/json-parser.cpp ${devel_api_src_dir}/builder/tree-node.cpp + ${devel_api_src_dir}/controls/accessible-impl.cpp ${devel_api_src_dir}/controls/control-devel.cpp ${devel_api_src_dir}/controls/control-wrapper.cpp ${devel_api_src_dir}/controls/control-wrapper-impl.cpp @@ -81,6 +82,7 @@ SET( devel_api_accessibility-manager_header_files ) SET( devel_api_controls_header_files + ${devel_api_src_dir}/controls/accessible-impl.h ${devel_api_src_dir}/controls/control-depth-index-ranges.h ${devel_api_src_dir}/controls/control-devel.h ${devel_api_src_dir}/controls/control-wrapper.h diff --git a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp index ac7a72f..1c2271c 100644 --- a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp +++ b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp @@ -25,7 +25,7 @@ #include // INTERNAL INCLUDES -#include +#include namespace Dali { @@ -189,7 +189,7 @@ void Alignment::OnInitialize() { DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp index b685219..55259db 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp @@ -32,8 +32,8 @@ // INTERNAL INCLUDES #include +#include #include -#include #include #include #include @@ -219,7 +219,7 @@ void BloomView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::ANIMATION)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::ANIMATION)); }); } diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index c242bc6..2b830fa 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -1331,7 +1331,7 @@ Property::Index Button::AccessibleImpl::GetNamePropertyIndex() Dali::Accessibility::States Button::AccessibleImpl::CalculateStates() { - auto tmp = Control::Impl::AccessibleImpl::CalculateStates(); + auto tmp = DevelControl::AccessibleImpl::CalculateStates(); tmp[Dali::Accessibility::State::SELECTABLE] = true; auto slf = Toolkit::Button::DownCast(self); tmp[Dali::Accessibility::State::ENABLED] = !slf.GetProperty(Toolkit::Button::Property::DISABLED); diff --git a/dali-toolkit/internal/controls/buttons/button-impl.h b/dali-toolkit/internal/controls/buttons/button-impl.h index 315e4c5..ced51fd 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.h +++ b/dali-toolkit/internal/controls/buttons/button-impl.h @@ -24,8 +24,8 @@ // INTERNAL INCLUDES #include +#include #include -#include #include namespace Dali @@ -535,9 +535,9 @@ private: bool mClickActionPerforming; ///< Used to manage signal emissions during action protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl + struct AccessibleImpl : public DevelControl::AccessibleImpl { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; Dali::Accessibility::States CalculateStates() override; std::string GetNameRaw() override; diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index ff1ca1e..1c48bc1 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -463,8 +463,8 @@ Control::Impl::Impl(Control& controlImpl) }); accessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr { - return std::unique_ptr(new AccessibleImpl(actor, - Dali::Accessibility::Role::UNKNOWN)); + return std::unique_ptr(new DevelControl::AccessibleImpl(actor, + Dali::Accessibility::Role::UNKNOWN)); }; size_t len = static_cast(Dali::Accessibility::RelationType::MAX_COUNT); @@ -1903,387 +1903,6 @@ Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject(Dali::Act return nullptr; } -Control::Impl::AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal) -: self(self), - modal(modal) -{ - auto control = Dali::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) { - if(this->self != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) - { - return; - } - - if(index == DevelControl::Property::ACCESSIBILITY_NAME || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet)) - { - if(controlImpl.mAccessibilityGetNameSignal.Empty()) - { - Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME); - } - } - - if(index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet)) - { - if(controlImpl.mAccessibilityGetDescriptionSignal.Empty()) - { - Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); - } - } - }); -} - -std::string Control::Impl::AccessibleImpl::GetName() -{ - auto control = Dali::Toolkit::Control::DownCast(self); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - if(!controlImpl.mAccessibilityGetNameSignal.Empty()) - { - std::string ret; - controlImpl.mAccessibilityGetNameSignal.Emit(ret); - return ret; - } - - if(controlImpl.mAccessibilityNameSet) - return controlImpl.mAccessibilityName; - - if(auto raw = GetNameRaw(); !raw.empty()) - return raw; - - return self.GetProperty(Actor::Property::NAME); -} - -std::string Control::Impl::AccessibleImpl::GetNameRaw() -{ - return {}; -} - -std::string Control::Impl::AccessibleImpl::GetDescription() -{ - auto control = Dali::Toolkit::Control::DownCast(self); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty()) - { - std::string ret; - controlImpl.mAccessibilityGetDescriptionSignal.Emit(ret); - return ret; - } - - if(controlImpl.mAccessibilityDescriptionSet) - return controlImpl.mAccessibilityDescription; - - return GetDescriptionRaw(); -} - -std::string Control::Impl::AccessibleImpl::GetDescriptionRaw() -{ - return ""; -} - -Dali::Accessibility::Accessible* Control::Impl::AccessibleImpl::GetParent() -{ - return Dali::Accessibility::Accessible::Get(self.GetParent()); -} - -size_t Control::Impl::AccessibleImpl::GetChildCount() -{ - return self.GetChildCount(); -} - -Dali::Accessibility::Accessible* Control::Impl::AccessibleImpl::GetChildAtIndex(size_t index) -{ - return Dali::Accessibility::Accessible::Get(self.GetChildAt(static_cast(index))); -} - -size_t Control::Impl::AccessibleImpl::GetIndexInParent() -{ - auto s = self; - auto parent = s.GetParent(); - DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent"); - auto count = parent.GetChildCount(); - for(auto i = 0u; i < count; ++i) - { - auto c = parent.GetChildAt(i); - if(c == s) - return i; - } - DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent"); - return static_cast(-1); -} - -Dali::Accessibility::Role Control::Impl::AccessibleImpl::GetRole() -{ - return self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE); -} - -Dali::Accessibility::States Control::Impl::AccessibleImpl::CalculateStates() -{ - Dali::Accessibility::States s; - s[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE); - s[Dali::Accessibility::State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self; - if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Property::NONE) - s[Dali::Accessibility::State::HIGHLIGHTABLE] = false; - else - s[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get(); - s[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; - s[Dali::Accessibility::State::ENABLED] = true; - s[Dali::Accessibility::State::SENSITIVE] = true; - s[Dali::Accessibility::State::ANIMATED] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED).Get(); - s[Dali::Accessibility::State::VISIBLE] = true; - if(modal) - { - s[Dali::Accessibility::State::MODAL] = true; - } - s[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get() && self.GetCurrentProperty(Actor::Property::VISIBLE); - - s[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); - return s; -} - -Dali::Accessibility::States Control::Impl::AccessibleImpl::GetStates() -{ - return CalculateStates(); -} - -Dali::Accessibility::Attributes Control::Impl::AccessibleImpl::GetAttributes() -{ - std::unordered_map attribute_map; - auto q = Dali::Toolkit::Control::DownCast(self); - auto w = - q.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES); - auto z = w.GetMap(); - - if(z) - { - auto map_size = z->Count(); - - for(unsigned int i = 0; i < map_size; i++) - { - auto map_key = z->GetKeyAt(i); - if(map_key.type == Property::Key::STRING) - { - std::string map_value; - if(z->GetValue(i).Get(map_value)) - { - attribute_map.emplace(std::move(map_key.stringKey), - std::move(map_value)); - } - } - } - } - - return attribute_map; -} - -Dali::Accessibility::ComponentLayer Control::Impl::AccessibleImpl::GetLayer() -{ - return Dali::Accessibility::ComponentLayer::WINDOW; -} - -Dali::Rect<> Control::Impl::AccessibleImpl::GetExtents(Dali::Accessibility::CoordType ctype) -{ - Vector2 screenPosition = - self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION) - .Get(); - auto size = self.GetCurrentProperty(Actor::Property::SIZE) * self.GetCurrentProperty(Actor::Property::WORLD_SCALE); - bool positionUsesAnchorPoint = - self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT) - .Get(); - Vector3 anchorPointOffSet = - size * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) - : AnchorPoint::TOP_LEFT); - Vector2 position = Vector2(screenPosition.x - anchorPointOffSet.x, - screenPosition.y - anchorPointOffSet.y); - - return {position.x, position.y, size.x, size.y}; -} - -int16_t Control::Impl::AccessibleImpl::GetMdiZOrder() -{ - return 0; -} -double Control::Impl::AccessibleImpl::GetAlpha() -{ - return 0; -} - -bool Control::Impl::AccessibleImpl::GrabFocus() -{ - return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(self); -} - -static Dali::Actor CreateHighlightIndicatorActor() -{ - std::string focusBorderImagePath(AssetManager::GetDaliImagePath()); - focusBorderImagePath += "/keyboard_focus.9.png"; - // Create the default if it hasn't been set and one that's shared by all the - // keyboard focusable actors - auto actor = Toolkit::ImageView::New(focusBorderImagePath); - actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); - DevelControl::AppendAccessibilityAttribute(actor, "highlight", ""); - actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED, true); - actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); - - return actor; -} - -bool Control::Impl::AccessibleImpl::GrabHighlight() -{ - auto old = GetCurrentlyHighlightedActor(); - - if(!Dali::Accessibility::IsUp()) - return false; - if(self == old) - return true; - if(old) - { - auto c = dynamic_cast(GetAccessibilityObject(old)); - if(c) - c->ClearHighlight(); - } - auto highlight = GetHighlightActor(); - if(!highlight) - { - highlight = CreateHighlightIndicatorActor(); - SetHighlightActor(highlight); - } - highlight.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); - highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); - highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f); - highlight.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f)); - - EnsureSelfVisible(); - self.Add(highlight); - SetCurrentlyHighlightedActor(self); - EmitHighlighted(true); - - return true; -} - -bool Control::Impl::AccessibleImpl::ClearHighlight() -{ - if(!Dali::Accessibility::IsUp()) - return false; - if(GetCurrentlyHighlightedActor() == self) - { - self.Remove(GetHighlightActor()); - SetCurrentlyHighlightedActor({}); - EmitHighlighted(false); - return true; - } - return false; -} - -std::string Control::Impl::AccessibleImpl::GetActionName(size_t index) -{ - if(index >= GetActionCount()) return ""; - Dali::TypeInfo type; - self.GetTypeInfo(type); - DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); - return type.GetActionName(index); -} -std::string Control::Impl::AccessibleImpl::GetLocalizedActionName(size_t index) -{ - // TODO: add localization - return GetActionName(index); -} -std::string Control::Impl::AccessibleImpl::GetActionDescription(size_t index) -{ - return ""; -} -size_t Control::Impl::AccessibleImpl::GetActionCount() -{ - Dali::TypeInfo type; - self.GetTypeInfo(type); - DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); - return type.GetActionCount(); -} -std::string Control::Impl::AccessibleImpl::GetActionKeyBinding(size_t index) -{ - return ""; -} -bool Control::Impl::AccessibleImpl::DoAction(size_t index) -{ - std::string actionName = GetActionName(index); - return self.DoAction(actionName, {}); -} -bool Control::Impl::AccessibleImpl::DoAction(const std::string& name) -{ - return self.DoAction(name, {}); -} - -bool Control::Impl::AccessibleImpl::DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) -{ - auto control = Dali::Toolkit::Control::DownCast(self); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - if(!controlImpl.mAccessibilityDoGestureSignal.Empty()) - { - auto ret = std::make_pair(gestureInfo, false); - controlImpl.mAccessibilityDoGestureSignal.Emit(ret); - return ret.second; - } - - return false; -} - -std::vector Control::Impl::AccessibleImpl::GetRelationSet() -{ - auto control = Dali::Toolkit::Control::DownCast(self); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - std::vector ret; - - auto& v = controlImpl.mAccessibilityRelations; - for(auto i = 0u; i < v.size(); ++i) - { - if(v[i].empty()) - continue; - - ret.emplace_back(Accessibility::Relation{static_cast(i), v[i]}); - } - - return ret; -} - -void Control::Impl::AccessibleImpl::EnsureChildVisible(Actor child) -{ -} - -void Control::Impl::AccessibleImpl::EnsureSelfVisible() -{ - auto parent = dynamic_cast(GetParent()); - if(parent) - { - parent->EnsureChildVisible(self); - } -} - -Property::Index Control::Impl::AccessibleImpl::GetNamePropertyIndex() -{ - return Actor::Property::NAME; -} - -Property::Index Control::Impl::AccessibleImpl::GetDescriptionPropertyIndex() -{ - return Property::INVALID_INDEX; -} - void Control::Impl::PositionOrSizeChangedCallback(PropertyNotification& p) { auto self = Dali::Actor::DownCast(p.GetTarget()); diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index d944114..492461e 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -69,6 +69,8 @@ typedef Dali::OwnerContainer RegisteredVisualContainer; */ class Control::Impl : public ConnectionTracker, public Visual::EventObserver { + friend class Toolkit::DevelControl::AccessibleImpl; + public: /** * @brief Retrieves the implementation of the internal control class. @@ -544,52 +546,6 @@ public: void AccessibilityRegister(); void AccessibilityDeregister(); - struct AccessibleImpl : public virtual Dali::Accessibility::Accessible, - public virtual Dali::Accessibility::Component, - public virtual Dali::Accessibility::Collection, - public virtual Dali::Accessibility::Action - { - Dali::Actor self; - bool modal = false, root = false; - - AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false); - - std::string GetName() override; - virtual std::string GetNameRaw(); - std::string GetDescription() override; - virtual std::string GetDescriptionRaw(); - Dali::Accessibility::Accessible* GetParent() override; - size_t GetChildCount() override; - Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override; - size_t GetIndexInParent() override; - Dali::Accessibility::Role GetRole() override; - Dali::Accessibility::States GetStates() override; - Dali::Accessibility::Attributes GetAttributes() override; - Dali::Rect<> GetExtents(Dali::Accessibility::CoordType ctype) override; - Dali::Accessibility::ComponentLayer GetLayer() override; - int16_t GetMdiZOrder() override; - bool GrabFocus() override; - double GetAlpha() override; - bool GrabHighlight() override; - bool ClearHighlight() override; - - std::string GetActionName(size_t index) override; - std::string GetLocalizedActionName(size_t index) override; - std::string GetActionDescription(size_t index) override; - size_t GetActionCount() override; - std::string GetActionKeyBinding(size_t index) override; - bool DoAction(size_t index) override; - bool DoAction(const std::string& name) override; - bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override; - std::vector GetRelationSet() override; - - virtual Dali::Accessibility::States CalculateStates(); - virtual void EnsureChildVisible(Actor child); - virtual void EnsureSelfVisible(); - virtual Property::Index GetNamePropertyIndex(); - virtual Property::Index GetDescriptionPropertyIndex(); - }; - std::function(Actor)> accessibilityConstructor; std::unique_ptr accessibilityObject; Dali::PropertyNotification accessibilityNotificationPosition, accessibilityNotificationSize, accessibilityNotificationCulled; diff --git a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp index 2bc36e0..88fa83f 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -236,7 +236,7 @@ void EffectsView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp b/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp index 263d0c9..111e480 100644 --- a/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp +++ b/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp @@ -28,8 +28,7 @@ #include #include -// INTERNAL INCLUDES -#include +#include using namespace Dali; @@ -837,7 +836,7 @@ void FlexContainer::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp index 961ff9f..29d36b1 100644 --- a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp @@ -34,6 +34,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -296,7 +297,7 @@ void GaussianBlurView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } @@ -560,7 +561,7 @@ void GaussianBlurView::SetShaderConstants() uvOffsets[0].x = 0.0f; uvOffsets[0].y = 0.0f; - for(i = 0; i < mNumSamples >> 1; i++) + for(i = 0; i> 1; i++) { w = CalcGaussianWeight((float)(i + 1)); weights[(i << 1) + 1] = w; diff --git a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp index 091e341..513960f 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -95,7 +95,7 @@ void ImageView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); }); //Enable highightability diff --git a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp index 11fa7a7..e37a534 100644 --- a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp +++ b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp @@ -28,6 +28,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -219,7 +220,7 @@ void Magnifier::Initialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp b/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp index 492f529..f9bf491 100644 --- a/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp +++ b/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp @@ -29,6 +29,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -281,7 +282,7 @@ void Model3dView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); }); } diff --git a/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp b/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp index 47906cd..3dd6909 100644 --- a/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp +++ b/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp @@ -22,7 +22,7 @@ #include // INTERNAL INCLUDES -#include +#include namespace Dali { @@ -72,7 +72,7 @@ void NavigationView::OnInitialize() { DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp index 974dbcf..d74574c 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp @@ -27,6 +27,7 @@ #include // for strcmp // INTERNAL INCLUDES +#include #include #include #include @@ -415,7 +416,7 @@ void PageTurnView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::PAGE_TAB_LIST)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::PAGE_TAB_LIST)); }); } diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index 768a978..edb0929 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -36,6 +36,7 @@ // INTERNAL INCLUDES #include #include +#include #include #include #include @@ -2025,7 +2026,7 @@ std::string Popup::AccessibleImpl::GetNameRaw() Dali::Accessibility::States Popup::AccessibleImpl::CalculateStates() { - auto states = Control::Impl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::AccessibleImpl::CalculateStates(); auto popup = Toolkit::Popup::DownCast(self); auto displayState = popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE); diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h index 5d9eae3..630caa8 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -25,6 +25,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -240,9 +241,9 @@ public: static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex); protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl + struct AccessibleImpl : public DevelControl::AccessibleImpl { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; std::string GetNameRaw() override; Dali::Accessibility::States CalculateStates() override; diff --git a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp index 12ccab6..2df2b77 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include diff --git a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h index f806926..9ff203a 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h @@ -19,6 +19,7 @@ */ // INTERNAL INCLUDES +#include #include #include #include @@ -261,10 +262,10 @@ private: Property::Map mSecondaryProgressVisualMap; ///< To backup visual properties when switching determinate/indeterminate. protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Value { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; double GetMinimum() override; double GetCurrent() override; double GetMaximum() override; diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp index 4701d6c..5716c5e 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp @@ -31,6 +31,7 @@ // INTERNAL INCLUDES #include +#include #include #include diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h index be77d6c..abb5200 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h @@ -27,6 +27,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -312,10 +313,10 @@ private: bool mIndicatorFirstShow : 1; ///< True if the indicator has never been shown protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Value { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; double GetMinimum() override; double GetCurrent() override; double GetMaximum() override; diff --git a/dali-toolkit/internal/controls/scrollable/scrollable-impl.h b/dali-toolkit/internal/controls/scrollable/scrollable-impl.h index 73ff256..4240a1e 100644 --- a/dali-toolkit/internal/controls/scrollable/scrollable-impl.h +++ b/dali-toolkit/internal/controls/scrollable/scrollable-impl.h @@ -22,6 +22,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -116,9 +117,9 @@ public: virtual void SetOvershootSize(const Vector2& size) = 0; protected: // From Control - struct AccessibleImpl : public Control::Impl::AccessibleImpl + struct AccessibleImpl : public DevelControl::AccessibleImpl { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; bool IsScrollable() override; }; diff --git a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp index 6440bb0..612a9a4 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp @@ -30,6 +30,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -257,7 +258,7 @@ void ShadowView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/slider/slider-impl.cpp b/dali-toolkit/internal/controls/slider/slider-impl.cpp index 6829485..34da9ff 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -28,6 +28,7 @@ // INTERNAL INCLUDES #include +#include #include #include #include diff --git a/dali-toolkit/internal/controls/slider/slider-impl.h b/dali-toolkit/internal/controls/slider/slider-impl.h index 6e2a324..134b9f2 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.h +++ b/dali-toolkit/internal/controls/slider/slider-impl.h @@ -24,6 +24,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -747,10 +748,10 @@ private: mSnapToMarks : 1; ///< Turn on or off snapping to marks protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Value { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; double GetMinimum() override; double GetCurrent() override; double GetMaximum() override; diff --git a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp index b1e60c7..6325e62 100644 --- a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp @@ -151,7 +151,7 @@ void SuperBlurView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); }); } diff --git a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp index f5c3cc4..4b3e019 100644 --- a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp +++ b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp @@ -29,7 +29,7 @@ #include // INTERNAL INCLUDES -#include +#include using namespace Dali; @@ -1121,7 +1121,7 @@ void TableView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::TABLE)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TABLE)); }); } diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 22880d3..4e7d3f0 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -1381,6 +1382,14 @@ float TextEditor::GetHeightForWidth(float width) return mController->GetHeightForWidth(width) + padding.top + padding.bottom; } +void TextEditor::ResizeActor(Actor& actor, const Vector2& size) +{ + if (actor.GetProperty(Dali::Actor::Property::SIZE).GetVectorXY() != size) + { + actor.SetProperty(Actor::Property::SIZE, size); + } +} + void TextEditor::OnRelayout(const Vector2& size, RelayoutContainer& container) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "TextEditor OnRelayout\n"); @@ -1410,10 +1419,12 @@ void TextEditor::OnRelayout(const Vector2& size, RelayoutContainer& container) if(mStencil) { mStencil.SetProperty(Actor::Property::POSITION, Vector2(padding.start, padding.top)); + ResizeActor(mStencil, contentSize); } if(mActiveLayer) { mActiveLayer.SetProperty(Actor::Property::POSITION, Vector2(padding.start, padding.top)); + ResizeActor(mActiveLayer, contentSize); } const Text::Controller::UpdateTextType updateTextType = mController->Relayout(contentSize, layoutDirection); @@ -1426,7 +1437,7 @@ void TextEditor::OnRelayout(const Vector2& size, RelayoutContainer& container) if(mDecorator && (Text::Controller::NONE_UPDATED != (Text::Controller::DECORATOR_UPDATED & updateTextType))) { - mDecorator->Relayout(size); + mDecorator->Relayout(contentSize); } if(!mRenderer) @@ -2189,7 +2200,7 @@ Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates() { using namespace Dali::Accessibility; - auto states = Control::Impl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::AccessibleImpl::CalculateStates(); states[State::EDITABLE] = true; states[State::FOCUSABLE] = true; diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h index 6be336b..866c444 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -25,6 +25,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -356,6 +357,14 @@ private: // Implementation TextEditor& operator=(const TextEditor& rhs); /** + * @brief Resize actor to the given size. + * + * @param[in] actor The actor to be resized. + * @param[in] size Size to change. + */ + void ResizeActor( Actor& actor, const Vector2& size ); + + /** * @brief Render view, create and attach actor(s) to this text editor. */ void RenderText(Text::Controller::UpdateTextType updateTextType); @@ -394,11 +403,11 @@ private: // Data bool mScrollBarEnabled : 1; bool mScrollStarted : 1; - struct AccessibleImpl : public Control::Impl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Text, public virtual Dali::Accessibility::EditableText { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; std::string GetName() override; std::string GetText(size_t startOffset, size_t endOffset) override; diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 4cca3fd..8b60fbe 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -1333,6 +1333,14 @@ float TextField::GetHeightForWidth(float width) return mController->GetHeightForWidth(width) + padding.top + padding.bottom; } +void TextField::ResizeActor(Actor& actor, const Vector2& size) +{ + if (actor.GetProperty(Dali::Actor::Property::SIZE).GetVectorXY() != size) + { + actor.SetProperty(Actor::Property::SIZE, size); + } +} + void TextField::OnRelayout(const Vector2& size, RelayoutContainer& container) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "TextField OnRelayout\n"); @@ -1362,10 +1370,12 @@ void TextField::OnRelayout(const Vector2& size, RelayoutContainer& container) if(mStencil) { mStencil.SetProperty(Actor::Property::POSITION, Vector2(padding.start, padding.top)); + ResizeActor(mStencil, contentSize); } if(mActiveLayer) { mActiveLayer.SetProperty(Actor::Property::POSITION, Vector2(padding.start, padding.top)); + ResizeActor(mActiveLayer, contentSize); } const Text::Controller::UpdateTextType updateTextType = mController->Relayout(contentSize, layoutDirection); @@ -1378,7 +1388,7 @@ void TextField::OnRelayout(const Vector2& size, RelayoutContainer& container) if(mDecorator && (Text::Controller::NONE_UPDATED != (Text::Controller::DECORATOR_UPDATED & updateTextType))) { - mDecorator->Relayout(size); + mDecorator->Relayout(contentSize); } if(!mRenderer) @@ -2071,7 +2081,7 @@ Dali::Accessibility::States TextField::AccessibleImpl::CalculateStates() { using namespace Dali::Accessibility; - auto states = Control::Impl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::AccessibleImpl::CalculateStates(); states[State::EDITABLE] = true; states[State::FOCUSABLE] = true; diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index 87f4060..2fae0bb 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -23,6 +23,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -312,6 +313,14 @@ private: // Implementation TextField& operator=(const TextField& rhs); /** + * @brief Resize actor to the given size. + * + * @param[in] actor The actor to be resized. + * @param[in] size Size to change. + */ + void ResizeActor( Actor& actor, const Vector2& size ); + + /** * @brief Render view, create and attach actor(s) to this Text Field. */ void RenderText(Text::Controller::UpdateTextType updateTextType); @@ -350,11 +359,11 @@ private: // Data bool mHasBeenStaged : 1; protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Text, public virtual Dali::Accessibility::EditableText { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; std::string GetName() override; std::string GetText(size_t startOffset, size_t endOffset) override; diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index 87a80e0..e9ad7a7 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -159,10 +159,10 @@ private: // Data bool mTextUpdateNeeded : 1; protected: - struct AccessibleImpl : public Control::Impl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Text { - using Control::Impl::AccessibleImpl::AccessibleImpl; + using DevelControl::AccessibleImpl::AccessibleImpl; std::string GetText(size_t startOffset, size_t endOffset) override; size_t GetCharacterCount() override; diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp index ebc01b6..bccfe84 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp @@ -386,7 +386,7 @@ void TextSelectionPopup::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::DIALOG, true)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::DIALOG, true)); }); //Enable highightability diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp index 2e1251e..ba2b8d5 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp @@ -27,7 +27,7 @@ // INTERNAL INCLUDES #include -#include +#include #include #include @@ -166,7 +166,7 @@ void TextSelectionToolbar::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR)); }); } diff --git a/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp b/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp index a0cd9e4..2aefaaf 100644 --- a/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp +++ b/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp @@ -25,7 +25,7 @@ // INTERNAL INCLUDES #include -#include +#include namespace Dali { @@ -313,7 +313,7 @@ void ToolBar::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR)); }); } diff --git a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp index d45b21f..5608105 100644 --- a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp +++ b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp @@ -30,7 +30,7 @@ #include // INTERNAL INCLUDES -#include +#include #include #include #include @@ -115,7 +115,7 @@ void VideoView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::VIDEO)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::VIDEO)); }); } diff --git a/dali-toolkit/internal/text/text-controller-relayouter.cpp b/dali-toolkit/internal/text/text-controller-relayouter.cpp index 2b362c0..a900601 100644 --- a/dali-toolkit/internal/text/text-controller-relayouter.cpp +++ b/dali-toolkit/internal/text/text-controller-relayouter.cpp @@ -636,14 +636,29 @@ bool Controller::Relayouter::DoRelayout(Controller& controller, const Size& size void Controller::Relayouter::CalculateVerticalOffset(Controller& controller, const Size& controlSize) { - Controller::Impl& impl = *controller.mImpl; - ModelPtr& model = impl.mModel; - Size layoutSize = model->mVisualModel->GetLayoutSize(); + Controller::Impl& impl = *controller.mImpl; + ModelPtr& model = impl.mModel; + VisualModelPtr& visualModel = model->mVisualModel; + Size layoutSize = model->mVisualModel->GetLayoutSize(); + Size oldLayoutSize = layoutSize; + float offsetY = 0.f; + bool needRecalc = false; + float defaultFontLineHeight = impl.GetDefaultFontLineHeight(); if(fabsf(layoutSize.height) < Math::MACHINE_EPSILON_1000) { // Get the line height of the default font. - layoutSize.height = impl.GetDefaultFontLineHeight(); + layoutSize.height = defaultFontLineHeight; + } + + // Whether the text control is editable + const bool isEditable = NULL != impl.mEventData; + if (isEditable && layoutSize.height != defaultFontLineHeight) + { + // This code prevents the wrong positioning of cursor when the layout size is bigger/smaller than defaultFontLineHeight. + // This situation occurs when the size of placeholder text is different from the default text. + layoutSize.height = defaultFontLineHeight; + needRecalc = true; } switch(model->mVerticalAlignment) @@ -651,19 +666,34 @@ void Controller::Relayouter::CalculateVerticalOffset(Controller& controller, con case VerticalAlignment::TOP: { model->mScrollPosition.y = 0.f; + offsetY = 0.f; break; } case VerticalAlignment::CENTER: { model->mScrollPosition.y = floorf(0.5f * (controlSize.height - layoutSize.height)); // try to avoid pixel alignment. + if (needRecalc) offsetY = floorf(0.5f * (layoutSize.height - oldLayoutSize.height)); break; } case VerticalAlignment::BOTTOM: { model->mScrollPosition.y = controlSize.height - layoutSize.height; + if (needRecalc) offsetY = layoutSize.height - oldLayoutSize.height; break; } } + + if (needRecalc) + { + // Update glyphPositions according to recalculation. + const Length positionCount = visualModel->mGlyphPositions.Count(); + Vector& glyphPositions = visualModel->mGlyphPositions; + for(Length index = 0u; index < positionCount; index++) + { + glyphPositions[index].y += offsetY; + } + } + } } // namespace Text diff --git a/dali-toolkit/public-api/dali-toolkit-version.cpp b/dali-toolkit/public-api/dali-toolkit-version.cpp index 9d923f7..e15896b 100644 --- a/dali-toolkit/public-api/dali-toolkit-version.cpp +++ b/dali-toolkit/public-api/dali-toolkit-version.cpp @@ -29,7 +29,7 @@ namespace Toolkit { const unsigned int TOOLKIT_MAJOR_VERSION = 2; const unsigned int TOOLKIT_MINOR_VERSION = 0; -const unsigned int TOOLKIT_MICRO_VERSION = 15; +const unsigned int TOOLKIT_MICRO_VERSION = 16; const char* const TOOLKIT_BUILD_DATE = __DATE__ " " __TIME__; #ifdef DEBUG_ENABLED diff --git a/packaging/dali-toolkit.spec b/packaging/dali-toolkit.spec index 5a88552..bae4c89 100644 --- a/packaging/dali-toolkit.spec +++ b/packaging/dali-toolkit.spec @@ -1,6 +1,6 @@ Name: dali2-toolkit Summary: Dali 3D engine Toolkit -Version: 2.0.15 +Version: 2.0.16 Release: 1 Group: System/Libraries License: Apache-2.0 and BSD-3-Clause and MIT