modules/graphics/src/test/java/javafx/scene/layout/RegionPickTest.java
Print this page
@@ -25,10 +25,11 @@
package javafx.scene.layout;
import javafx.geometry.Insets;
import javafx.scene.paint.Color;
+import javafx.scene.shape.Circle;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
@@ -510,7 +511,86 @@
* positionShape / scaleShape variants to make sure we are always picking *
* based on the perceived (rendered) shape *
* *
*************************************************************************/
- // TODO implement along with fix for RT-27775
+ @Test public void pickingSimpleShape() {
+ region.setPickOnBounds(false);
+ region.setScaleShape(false);
+ region.setCenterShape(false);
+ region.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
+
+ region.setShape(new Circle(50, 50, 30));
+
+ assertFalse(region.contains(X + 50, Y + 81));
+ assertFalse(region.contains(X + 50, Y + 19));
+ assertFalse(region.contains(X + 81, Y + 50));
+ assertFalse(region.contains(X + 19, Y + 50));
+ assertTrue(region.contains(X + 50, Y + 79));
+ assertTrue(region.contains(X + 50, Y + 21));
+ assertTrue(region.contains(X + 79, Y + 50));
+ assertTrue(region.contains(X + 21, Y + 50));
+
+ }
+
+ @Test public void pickingCenteredShape() {
+ region.setPickOnBounds(false);
+ region.setScaleShape(false);
+ region.setCenterShape(true);
+ region.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
+
+ region.setShape(new Circle(0, 0, 30));
+
+ assertFalse(region.contains(X + 50, Y + 81));
+ assertFalse(region.contains(X + 50, Y + 19));
+ assertFalse(region.contains(X + 81, Y + 50));
+ assertFalse(region.contains(X + 19, Y + 50));
+ assertTrue(region.contains(X + 50, Y + 79));
+ assertTrue(region.contains(X + 50, Y + 21));
+ assertTrue(region.contains(X + 79, Y + 50));
+ assertTrue(region.contains(X + 21, Y + 50));
+
+ }
+
+ @Test public void pickingScaledShape() {
+ region.setPickOnBounds(false);
+ region.setScaleShape(true);
+ region.setCenterShape(false);
+ region.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
+
+ region.setShape(new Circle(0, 0, 30));
+
+ assertFalse(region.contains(X, Y + HEIGHT / 2 + 1));
+ assertFalse(region.contains(X, Y - HEIGHT / 2 - 1));
+ assertFalse(region.contains(X + WIDTH / 2 + 1, Y));
+ assertFalse(region.contains(X - WIDTH / 2 - 1, Y));
+
+ assertTrue(region.contains(X + 1, Y + HEIGHT / 2 - 1));
+ assertTrue(region.contains(X + WIDTH / 2 - 1, Y));
+
+ // Even though the shape is there, these points are outside of region's bounds, so it wouldn't be really picked.
+ assertFalse(region.contains(X + 1, Y - HEIGHT / 2 + 1));
+ assertFalse(region.contains(X - WIDTH / 2 + 1, Y));
+
+ }
+
+ @Test public void pickingScaledAndCenteredShape() {
+ region.setPickOnBounds(false);
+ region.setScaleShape(true);
+ region.setCenterShape(true);
+ region.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
+
+ region.setShape(new Circle(0, 0, 30));
+
+ assertFalse(region.contains(X + WIDTH / 2, Y + HEIGHT + 1));
+ assertFalse(region.contains(X + WIDTH / 2, Y - 1));
+ assertFalse(region.contains(X + WIDTH + 1, Y + HEIGHT / 2));
+ assertFalse(region.contains(X - 1, Y + HEIGHT / 2));
+
+ assertTrue(region.contains(X + WIDTH / 2, Y + HEIGHT - 1));
+ assertTrue(region.contains(X + WIDTH / 2, Y + 1));
+ assertTrue(region.contains(X + WIDTH - 1, Y + HEIGHT / 2));
+ assertTrue(region.contains(X + 1, Y + HEIGHT / 2));
+
+ }
+
}