Changed GetNearestFocusableActor interface to receive rootActor 66/267966/8
authorjoogab.yun <joogab.yun@samsung.com>
Tue, 14 Dec 2021 05:02:16 +0000 (14:02 +0900)
committerjoogab yun <joogab.yun@samsung.com>
Wed, 15 Dec 2021 00:52:38 +0000 (00:52 +0000)
Change-Id: I7994d630cc9544ae048d3fbb4415e393d9870b2b

dali-toolkit/devel-api/focus-manager/focus-finder.cpp
dali-toolkit/devel-api/focus-manager/focus-finder.h
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp

index ddd0360..c52bf57 100644 (file)
@@ -354,9 +354,9 @@ Actor FindNextFocus(Actor& actor, Actor& focusedActor, Rect<float>& focusedRect,
   {\r
     // Recursively children\r
     const auto childCount = actor.GetChildCount();\r
   {\r
     // Recursively children\r
     const auto childCount = actor.GetChildCount();\r
-    for(auto i = 0u; i < childCount; ++i)\r
+    for(auto i = childCount; i > 0u; --i)\r
     {\r
     {\r
-      Dali::Actor child = actor.GetChildAt(i);\r
+      Dali::Actor child = actor.GetChildAt(i-1);\r
       if(child && child != focusedActor && IsFocusable(child))\r
       {\r
         Rect<float> candidateRect = DevelActor::CalculateScreenExtents(child);\r
       if(child && child != focusedActor && IsFocusable(child))\r
       {\r
         Rect<float> candidateRect = DevelActor::CalculateScreenExtents(child);\r
@@ -382,10 +382,10 @@ Actor FindNextFocus(Actor& actor, Actor& focusedActor, Rect<float>& focusedRect,
 \r
 } // unnamed namespace\r
 \r
 \r
 } // unnamed namespace\r
 \r
-Actor GetNearestFocusableActor(Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction)\r
+Actor GetNearestFocusableActor(Actor rootActor, Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction)\r
 {\r
   Actor nearestActor;\r
 {\r
   Actor nearestActor;\r
-  if(!focusedActor)\r
+  if(!focusedActor || !rootActor)\r
   {\r
     return nearestActor;\r
   }\r
   {\r
     return nearestActor;\r
   }\r
@@ -426,13 +426,7 @@ Actor GetNearestFocusableActor(Actor focusedActor, Toolkit::Control::KeyboardFoc
   ConvertCoordinate(bestCandidateRect);\r
 \r
   ConvertCoordinate(focusedRect);\r
   ConvertCoordinate(bestCandidateRect);\r
 \r
   ConvertCoordinate(focusedRect);\r
-\r
-  Integration::SceneHolder window = Integration::SceneHolder::Get(focusedActor);\r
-  if(window)\r
-  {\r
-    Actor rootActor = window.GetRootLayer();\r
-    nearestActor    = FindNextFocus(rootActor, focusedActor, focusedRect, bestCandidateRect, direction);\r
-  }\r
+  nearestActor = FindNextFocus(rootActor, focusedActor, focusedRect, bestCandidateRect, direction);\r
   return nearestActor;\r
 }\r
 \r
   return nearestActor;\r
 }\r
 \r
index 47f313d..69708b3 100644 (file)
@@ -27,13 +27,15 @@ namespace Toolkit
 {\r
 namespace FocusFinder\r
 {\r
 {\r
 namespace FocusFinder\r
 {\r
+\r
 /**\r
  * Get the nearest focusable actor.\r
 /**\r
  * Get the nearest focusable actor.\r
+ * @param [in] rootActor The root actor.\r
  * @param [in] focusedActor The current focused actor.\r
  * @param [in] direction The direction.\r
  * @return The nearest focusable actor, or an empty handle if none exists.\r
  */\r
  * @param [in] focusedActor The current focused actor.\r
  * @param [in] direction The direction.\r
  * @return The nearest focusable actor, or an empty handle if none exists.\r
  */\r
-DALI_TOOLKIT_API Actor GetNearestFocusableActor(Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction);\r
+DALI_TOOLKIT_API Actor GetNearestFocusableActor(Actor rootActor, Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction);\r
 \r
 } // namespace FocusFinder\r
 \r
 \r
 } // namespace FocusFinder\r
 \r
index 745da15..8c737d2 100644 (file)
@@ -517,7 +517,11 @@ bool KeyboardFocusManager::MoveFocus(Toolkit::Control::KeyboardFocus::Direction
       else if(mEnableDefaultAlgorithm)
       {
         // We should find it among the actors nearby.
       else if(mEnableDefaultAlgorithm)
       {
         // We should find it among the actors nearby.
-        nextFocusableActor = Toolkit::FocusFinder::GetNearestFocusableActor(currentFocusActor, direction);
+        Integration::SceneHolder window = Integration::SceneHolder::Get(currentFocusActor);
+        if(window)
+        {
+          nextFocusableActor = Toolkit::FocusFinder::GetNearestFocusableActor(window.GetRootLayer(), currentFocusActor, direction);
+        }
       }
     }
 
       }
     }