X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Fdevel-api%2Fcontrols%2Faccessible-impl.cpp;h=1cf9a2697b8ab4d6663d75c1a87d29c15c9d5320;hp=774a280b7095e62e0ca0fba6cc9522e45842e46c;hb=refs%2Fchanges%2F78%2F266578%2F9;hpb=b0faad981257720e1a5fb15af45647f30b669adf diff --git a/dali-toolkit/devel-api/controls/accessible-impl.cpp b/dali-toolkit/devel-api/controls/accessible-impl.cpp index 774a280..1cf9a26 100644 --- a/dali-toolkit/devel-api/controls/accessible-impl.cpp +++ b/dali-toolkit/devel-api/controls/accessible-impl.cpp @@ -24,6 +24,7 @@ #endif #include +#include // INTERNAL INCLUDES #include @@ -35,7 +36,8 @@ namespace Dali::Toolkit::DevelControl { - +namespace +{ static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit") { #ifdef DGETTEXT_ENABLED @@ -47,6 +49,23 @@ static std::string GetLocaleText(std::string string, const char *domain = "dali- #endif } +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", std::string()); + actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); + + return actor; +} +} // unnamed namespace + AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal) : mSelf(self), mIsModal(modal) @@ -199,6 +218,41 @@ std::string AccessibleImpl::GetLocalizedRoleName() return GetLocaleText(GetRoleName()); } +bool AccessibleImpl::IsShowing() +{ + Dali::Actor self = Self(); + if(!self.GetProperty(Actor::Property::VISIBLE) || self.GetProperty(Actor::Property::WORLD_COLOR).a == 0 || self.GetProperty(Dali::DevelActor::Property::CULLED)) + { + return false; + } + + auto* child = this; + auto* parent = dynamic_cast(child->GetParent()); + if(!parent) + { + return true; + } + + auto childExtent = child->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); + while(parent) + { + auto control = Dali::Toolkit::Control::DownCast(parent->Self()); + if(!control.GetProperty(Actor::Property::VISIBLE)) + { + return false; + } + auto clipMode = control.GetProperty(Actor::Property::CLIPPING_MODE).Get(); + auto parentExtent = parent->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); + if ((clipMode != ClippingMode::DISABLED) && !parentExtent.Intersects(childExtent)) + { + return false; + } + parent = dynamic_cast(parent->GetParent()); + } + + return true; +} + Dali::Accessibility::States AccessibleImpl::CalculateStates() { Dali::Actor self = Self(); @@ -218,14 +272,13 @@ Dali::Accessibility::States AccessibleImpl::CalculateStates() state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; state[Dali::Accessibility::State::ENABLED] = true; state[Dali::Accessibility::State::SENSITIVE] = true; - state[Dali::Accessibility::State::VISIBLE] = true; + state[Dali::Accessibility::State::VISIBLE] = self.GetProperty(Actor::Property::VISIBLE); if(mIsModal) { state[Dali::Accessibility::State::MODAL] = true; } - state[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get() && self.GetCurrentProperty(Actor::Property::VISIBLE); - + state[Dali::Accessibility::State::SHOWING] = IsShowing(); state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); return state; } @@ -278,7 +331,16 @@ Dali::Rect<> AccessibleImpl::GetExtents(Dali::Accessibility::CoordinateType type 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}; + if(type == Dali::Accessibility::CoordinateType::WINDOW) + { + return {position.x, position.y, size.x, size.y}; + } + else // Dali::Accessibility::CoordinateType::SCREEN + { + auto window = Dali::DevelWindow::Get(self); + auto windowPosition = window.GetPosition(); + return {position.x + windowPosition.GetX(), position.y + windowPosition.GetY(), size.x, size.y}; + } } int16_t AccessibleImpl::GetMdiZOrder() @@ -295,22 +357,6 @@ 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", std::string()); - actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); - - return actor; -} - void AccessibleImpl::ScrollToSelf() { auto* child = this; @@ -323,7 +369,6 @@ void AccessibleImpl::ScrollToSelf() parent->ScrollToChild(child->Self()); } - child = parent; parent = dynamic_cast(parent->GetParent()); } } @@ -502,6 +547,11 @@ std::vector AccessibleImpl::GetRelationSet() return ret; } +Dali::Actor AccessibleImpl::GetInternalActor() +{ + return Dali::Actor{}; +} + bool AccessibleImpl::ScrollToChild(Actor child) { return false;