From 5415aaa17c1f7e9c083957d8c705c8450a8ad84c Mon Sep 17 00:00:00 2001 From: "joogab.yun" Date: Wed, 4 Aug 2021 12:05:34 +0900 Subject: [PATCH] Check if actor can be focused. Change-Id: I7066fae12059dbdb29e333dd2aac653bf7656ba7 --- dali-toolkit/devel-api/focus-manager/focus-finder.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dali-toolkit/devel-api/focus-manager/focus-finder.cpp b/dali-toolkit/devel-api/focus-manager/focus-finder.cpp index 952c261..313fee9 100644 --- a/dali-toolkit/devel-api/focus-manager/focus-finder.cpp +++ b/dali-toolkit/devel-api/focus-manager/focus-finder.cpp @@ -37,6 +37,8 @@ namespace FocusFinder { namespace { +static constexpr float FULLY_TRANSPARENT(0.01f); ///< Alpha values must rise above this, before an object is considered to be visible. + static int MajorAxisDistanceRaw(Dali::Toolkit::Control::KeyboardFocus::Direction direction, Dali::Rect source, Dali::Rect dest) { switch(direction) @@ -340,6 +342,14 @@ bool IsBetterCandidate(Toolkit::Control::KeyboardFocus::Direction direction, Rec MinorAxisDistance(direction, focusedRect, bestCandidateRect))); } +bool IsFocusable(Actor& actor) +{ + return (actor.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE) && + actor.GetProperty(Actor::Property::VISIBLE) && + actor.GetProperty(Actor::Property::SENSITIVE) && + actor.GetProperty(Actor::Property::WORLD_COLOR).a > FULLY_TRANSPARENT); +} + Actor FindNextFocus(Actor& actor, Actor& focusedActor, Rect& focusedRect, Rect& bestCandidateRect, Toolkit::Control::KeyboardFocus::Direction direction) { Actor nearestActor; @@ -350,7 +360,7 @@ Actor FindNextFocus(Actor& actor, Actor& focusedActor, Rect& focusedRect, for(auto i = 0u; i < childCount; ++i) { Dali::Actor child = actor.GetChildAt(i); - if(child && child != focusedActor && child.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE)) + if(child && child != focusedActor && IsFocusable(child)) { Rect candidateRect = DevelActor::CalculateScreenExtents(child); -- 2.7.4