diff --git a/include/eepp/ui/uiscenenode.hpp b/include/eepp/ui/uiscenenode.hpp index 1b0b599fe..c764695f7 100644 --- a/include/eepp/ui/uiscenenode.hpp +++ b/include/eepp/ui/uiscenenode.hpp @@ -160,6 +160,15 @@ class EE_API UISceneNode : public SceneNode { /** Enables or disables mouse-over highlighting in this scene and embedded UI scenes. */ void setHighlightOverRecursive( bool highlight ); + /** Enables or disables focus highlighting in this scene and embedded UI scenes. */ + void setHighlightFocusRecursive( bool highlight ); + + /** Enables or disables box debug drawing in this scene and embedded UI scenes. */ + void setDrawBoxesRecursive( bool draw ); + + /** Enables or disables debug-data drawing in this scene and embedded UI scenes. */ + void setDrawDebugDataRecursive( bool debug ); + /** * @brief Gets the size in density-independent pixels (dp). * diff --git a/src/eepp/ui/tools/uiwidgetinspector.cpp b/src/eepp/ui/tools/uiwidgetinspector.cpp index 94dc0b057..df3853d43 100644 --- a/src/eepp/ui/tools/uiwidgetinspector.cpp +++ b/src/eepp/ui/tools/uiwidgetinspector.cpp @@ -173,8 +173,9 @@ UIWindow* UIWidgetInspector::create( UISceneNode* sceneNode, const Float& menuIc if ( highlightToggle ) { highlightToggle(); } else { - sceneNode->setHighlightFocus( !sceneNode->getHighlightFocus() ); - sceneNode->setHighlightOver( !sceneNode->getHighlightOver() ); + bool highlight = !sceneNode->getHighlightOver(); + sceneNode->setHighlightFocusRecursive( highlight ); + sceneNode->setHighlightOverRecursive( highlight ); } } ); @@ -184,7 +185,7 @@ UIWindow* UIWidgetInspector::create( UISceneNode* sceneNode, const Float& menuIc if ( drawBoxesToggle ) { drawBoxesToggle(); } else { - sceneNode->setDrawBoxes( !sceneNode->getDrawBoxes() ); + sceneNode->setDrawBoxesRecursive( !sceneNode->getDrawBoxes() ); } } ); @@ -194,7 +195,7 @@ UIWindow* UIWidgetInspector::create( UISceneNode* sceneNode, const Float& menuIc if ( drawDebugDataToggle ) { drawDebugDataToggle(); } else { - sceneNode->setDrawDebugData( !sceneNode->getDrawDebugData() ); + sceneNode->setDrawDebugDataRecursive( !sceneNode->getDrawDebugData() ); } } ); diff --git a/src/eepp/ui/uiscenenode.cpp b/src/eepp/ui/uiscenenode.cpp index 3b7f3d8f5..9a83ec837 100644 --- a/src/eepp/ui/uiscenenode.cpp +++ b/src/eepp/ui/uiscenenode.cpp @@ -324,6 +324,27 @@ void UISceneNode::setHighlightOverRecursive( bool highlight ) { sceneNode->setHighlightOverRecursive( highlight ); } +void UISceneNode::setHighlightFocusRecursive( bool highlight ) { + setHighlightFocus( highlight ); + + for ( auto* sceneNode : mChildUISceneNodes ) + sceneNode->setHighlightFocusRecursive( highlight ); +} + +void UISceneNode::setDrawBoxesRecursive( bool draw ) { + setDrawBoxes( draw ); + + for ( auto* sceneNode : mChildUISceneNodes ) + sceneNode->setDrawBoxesRecursive( draw ); +} + +void UISceneNode::setDrawDebugDataRecursive( bool debug ) { + setDrawDebugData( debug ); + + for ( auto* sceneNode : mChildUISceneNodes ) + sceneNode->setDrawDebugDataRecursive( debug ); +} + void UISceneNode::updateHostUISceneNode() { UISceneNode* hostScene = getHostUISceneNode(); diff --git a/src/tests/unit_tests/uiscenenode_tests.cpp b/src/tests/unit_tests/uiscenenode_tests.cpp index 742a90e4e..a931edbb1 100644 --- a/src/tests/unit_tests/uiscenenode_tests.cpp +++ b/src/tests/unit_tests/uiscenenode_tests.cpp @@ -250,16 +250,40 @@ UTEST( UISceneNode, NestedSceneRebindsHostServicesOnSceneChange ) { EXPECT_TRUE( nestedScene->getChildUISceneNodes()[0] == nestedChildScene ); hostSceneA->setHighlightOverRecursive( true ); + hostSceneA->setHighlightFocusRecursive( true ); + hostSceneA->setDrawBoxesRecursive( true ); + hostSceneA->setDrawDebugDataRecursive( true ); EXPECT_TRUE( hostSceneA->getHighlightOver() ); + EXPECT_TRUE( hostSceneA->getHighlightFocus() ); + EXPECT_TRUE( hostSceneA->getDrawBoxes() ); + EXPECT_TRUE( hostSceneA->getDrawDebugData() ); EXPECT_TRUE( nestedScene->getHighlightOver() ); + EXPECT_TRUE( nestedScene->getHighlightFocus() ); + EXPECT_TRUE( nestedScene->getDrawBoxes() ); + EXPECT_TRUE( nestedScene->getDrawDebugData() ); EXPECT_TRUE( nestedChildScene->getHighlightOver() ); + EXPECT_TRUE( nestedChildScene->getHighlightFocus() ); + EXPECT_TRUE( nestedChildScene->getDrawBoxes() ); + EXPECT_TRUE( nestedChildScene->getDrawDebugData() ); nestedScene->setHighlightOverRecursive( false ); + nestedScene->setHighlightFocusRecursive( false ); + nestedScene->setDrawBoxesRecursive( false ); + nestedScene->setDrawDebugDataRecursive( false ); EXPECT_TRUE( hostSceneA->getHighlightOver() ); + EXPECT_TRUE( hostSceneA->getHighlightFocus() ); + EXPECT_TRUE( hostSceneA->getDrawBoxes() ); + EXPECT_TRUE( hostSceneA->getDrawDebugData() ); EXPECT_FALSE( nestedScene->getHighlightOver() ); + EXPECT_FALSE( nestedScene->getHighlightFocus() ); + EXPECT_FALSE( nestedScene->getDrawBoxes() ); + EXPECT_FALSE( nestedScene->getDrawDebugData() ); EXPECT_FALSE( nestedChildScene->getHighlightOver() ); + EXPECT_FALSE( nestedChildScene->getHighlightFocus() ); + EXPECT_FALSE( nestedChildScene->getDrawBoxes() ); + EXPECT_FALSE( nestedChildScene->getDrawDebugData() ); hostWidget->setParent( hostSceneB->getRoot() );