clippingActor.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
stage.Add( clippingActor );
+ // Add a child to the clipped region.
+ Actor clippingChild = Actor::New();
+ clippingChild.SetSize( 50.0f, 50.0f );
+ clippingChild.SetPosition( 25.0f, 25.0f );
+ clippingChild.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ clippingActor.Add( clippingChild );
+
// Render and notify.
application.SendNotification();
application.Render();
HoverEventFunctor functor( data );
actor.HoveredSignal().Connect( &application, functor );
- // Emit an event within clipped area.
+ // Emit an event within clipped area - no hit.
application.ProcessEvent( GenerateSingleHover( TouchPoint::Started, Vector2( 10.0f, 10.0f ) ) );
- DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
data.Reset();
// Emit an event outside the clipped area but within the actor area, we should have a hit.
DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
data.Reset();
+ clippingChild.HoveredSignal().Connect( &application, functor );
+
+ // Emit an event inside part of the child which is within the clipped area, we should have a hit.
+ application.ProcessEvent( GenerateSingleHover( TouchPoint::Started, Vector2( 30.0f, 30.0f ) ) );
+ DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ data.Reset();
+
END_TEST;
}
clippingActor.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
stage.Add( clippingActor );
+ // Add a child to the clipped region.
+ Actor clippingChild = Actor::New();
+ clippingChild.SetSize( 50.0f, 50.0f );
+ clippingChild.SetPosition( 25.0f, 25.0f );
+ clippingChild.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ clippingActor.Add( clippingChild );
+
// Render and notify.
application.SendNotification();
application.Render();
TouchDataFunctor functor( data );
actor.TouchSignal().Connect( &application, functor );
- // Emit an event within clipped area.
+ // Emit an event within clipped area - no hit.
application.ProcessEvent( GenerateSingleTouch( PointState::DOWN, Vector2( 10.0f, 10.0f ) ) );
- DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
data.Reset();
// Emit an event outside the clipped area but within the actor area, we should have a hit.
DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
data.Reset();
+ clippingChild.TouchSignal().Connect( &application, functor );
+
+ // Emit an event inside part of the child which is within the clipped area, we should have a hit.
+ application.ProcessEvent( GenerateSingleTouch( PointState::DOWN, Vector2( 30.0f, 30.0f ) ) );
+ DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ data.Reset();
+
END_TEST;
}
clippingActor.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
stage.Add( clippingActor );
+ // Add a child to the clipped region.
+ Actor clippingChild = Actor::New();
+ clippingChild.SetSize( 50.0f, 50.0f );
+ clippingChild.SetPosition( 25.0f, 25.0f );
+ clippingChild.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ clippingActor.Add( clippingChild );
+
// Render and notify.
application.SendNotification();
application.Render();
TouchEventFunctor functor( data );
actor.TouchedSignal().Connect( &application, functor );
- // Emit an event within clipped area.
+ // Emit an event within clipped area - no hit.
application.ProcessEvent( GenerateSingleTouch( TouchPoint::Down, Vector2( 10.0f, 10.0f ) ) );
- DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
data.Reset();
// Emit an event outside the clipped area but within the actor area, we should have a hit.
DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
data.Reset();
+ clippingChild.TouchedSignal().Connect( &application, functor );
+
+ // Emit an event inside part of the child which is within the clipped area, we should have a hit.
+ application.ProcessEvent( GenerateSingleTouch( TouchPoint::Down, Vector2( 30.0f, 30.0f ) ) );
+ DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
+ data.Reset();
+
END_TEST;
}
// Here we calculate a comparison mask by setting all the bits up to the current depth value.
// EG. a depth of 4 (10000 binary) = a mask of 1111 binary.
// This allows us a fast way of comparing all bits are set up to this depth.
- unsigned int clippingDepthMask = ( 1u << clippingDepth ) - 1u;
+ // Note: If the current Actor has clipping, that is included in the depth mask too.
+ unsigned int clippingDepthMask = ( 1u << newClippingDepth ) - 1u;
// The two masks must be equal to be a hit, as we are already assuming a hit
// (for non-clipping mode) then they must be not-equal to disqualify the hit.