From: joogab.yun Date: Wed, 4 Aug 2021 03:05:34 +0000 (+0900) Subject: Check if actor can be focused. X-Git-Tag: dali_2.0.38~2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=5415aaa17c1f7e9c083957d8c705c8450a8ad84c Check if actor can be focused. Change-Id: I7066fae12059dbdb29e333dd2aac653bf7656ba7 --- 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);