mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-10-01 02:30:25 +03:00
Cleaner hit testing: removed UISceneNode::overFind() override; UIRoot now has root-scoped child traversal extent for embedded document scenes.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <eepp/scene/scenemanager.hpp>
|
||||
#include <eepp/system/filesystem.hpp>
|
||||
#include <eepp/system/sys.hpp>
|
||||
#include <eepp/ui/uiroot.hpp>
|
||||
#include <eepp/ui/uiscenenode.hpp>
|
||||
#include <eepp/ui/uithememanager.hpp>
|
||||
#include <eepp/ui/uiwidget.hpp>
|
||||
@@ -150,6 +151,44 @@ UTEST( UISceneNode, EmbeddedSceneCanKeepContentDrivenExtent ) {
|
||||
Engine::destroySingleton();
|
||||
}
|
||||
|
||||
UTEST( UISceneNode, LayoutViewportRootTraversesDocumentExtentForHitTesting ) {
|
||||
Engine::instance()->createWindow( WindowSettings( 1024, 768, "Embedded Scene Hit Test Bounds",
|
||||
WindowStyle::Default, WindowBackend::Default,
|
||||
32, {}, 1, false, true ),
|
||||
ContextSettings( false, 0, 0, GLv_default, true, false ) );
|
||||
|
||||
UISceneNode* hostScene = init_test_scene_node();
|
||||
UIWidget* host = UIWidget::New();
|
||||
host->setPixelsSize( 800, 600 );
|
||||
host->setParent( hostScene->getRoot() );
|
||||
|
||||
UISceneNode* embeddedScene = UISceneNode::New();
|
||||
embeddedScene->setFollowParentSize( false );
|
||||
embeddedScene->setParent( host );
|
||||
embeddedScene->setPixelsSize( 800, 1000 );
|
||||
embeddedScene->setLayoutViewportPixelsSize( Sizef( 800, 300 ) );
|
||||
|
||||
UIWidget* target = UIWidget::New();
|
||||
target->setId( "below-layout-viewport" );
|
||||
target->setPixelsSize( 100, 50 );
|
||||
target->setPosition( 10, 900 );
|
||||
target->setParent( embeddedScene->getRoot() );
|
||||
|
||||
UIRoot* embeddedRoot = embeddedScene->getRoot()->asType<UIRoot>();
|
||||
ASSERT_TRUE( embeddedRoot != nullptr );
|
||||
ASSERT_TRUE( embeddedRoot->hasChildHitTestTraversalPixelsSize() );
|
||||
EXPECT_NEAR( embeddedScene->getRoot()->getPixelsSize().getHeight(), 300.f, 0.5f );
|
||||
EXPECT_NEAR( embeddedRoot->getChildHitTestTraversalPixelsSize().getHeight(), 1000.f, 0.5f );
|
||||
|
||||
Node* hit = embeddedScene->overFind( Vector2f( 20, 920 ) );
|
||||
EXPECT_EQ( hit, target );
|
||||
|
||||
embeddedScene->clearLayoutViewportPixelsSize();
|
||||
EXPECT_FALSE( embeddedRoot->hasChildHitTestTraversalPixelsSize() );
|
||||
|
||||
Engine::destroySingleton();
|
||||
}
|
||||
|
||||
UTEST( UISceneNode, NestedSceneOwnsDescendantSceneAndStyles ) {
|
||||
Engine::instance()->createWindow( WindowSettings( 1024, 768, "Nested Scene Isolation Test",
|
||||
WindowStyle::Default, WindowBackend::Default,
|
||||
|
||||
Reference in New Issue
Block a user