1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.scene.input; 27 28 import com.sun.javafx.FXUnit; 29 import com.sun.javafx.pgstub.StubScene; 30 import com.sun.javafx.test.MouseEventGenerator; 31 import javafx.event.Event; 32 import javafx.event.EventHandler; 33 import javafx.geometry.Point3D; 34 import javafx.scene.Group; 35 import javafx.scene.Scene; 36 import javafx.scene.shape.Rectangle; 37 import javafx.stage.Stage; 38 import org.junit.Rule; 39 import org.junit.Test; 40 import static org.junit.Assert.*; 41 42 public class ZoomEventTest { 43 44 @Rule 45 public FXUnit fx = new FXUnit(); 46 47 private boolean zoomed; 48 private boolean zoomed2; 49 private PickResult pickRes; 50 51 @Test public void testShortConstructor() { 52 Rectangle node = new Rectangle(); 53 node.setTranslateX(3); 54 node.setTranslateY(2); 55 node.setTranslateZ(50); 56 57 pickRes = new PickResult(node, new Point3D(15, 25, 100), 33); 58 ZoomEvent e = new ZoomEvent( 59 ZoomEvent.ZOOM_FINISHED, 10, 20, 30, 40, 60 false, true, false, true, false, true, 61 0.75, 1.5, pickRes); 62 63 assertSame(ZoomEvent.ZOOM_FINISHED, e.getEventType()); 64 assertSame(pickRes, e.getPickResult()); 65 assertEquals(18, e.getX(), 10e-20); 66 assertEquals(27, e.getY(), 10e-20); 67 assertEquals(150, e.getZ(), 10e-20); 68 assertEquals(10, e.getSceneX(), 10e-20); 69 assertEquals(20, e.getSceneY(), 10e-20); 70 assertEquals(30, e.getScreenX(), 10e-20); 71 assertEquals(40, e.getScreenY(), 10e-20); 72 assertFalse(e.isShiftDown()); 73 assertTrue(e.isControlDown()); 74 assertFalse(e.isAltDown()); 75 assertTrue(e.isMetaDown()); 76 assertFalse(e.isDirect()); 77 assertTrue(e.isInertia()); 78 assertEquals(0.75, e.getZoomFactor(), 10e-20); 79 assertEquals(1.5, e.getTotalZoomFactor(), 10e-20); 80 assertSame(Event.NULL_SOURCE_TARGET, e.getSource()); 81 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget()); 82 assertFalse(e.isConsumed()); 83 84 e = new ZoomEvent( 85 ZoomEvent.ZOOM_FINISHED, 10, 20, 30, 40, 86 true, false, true, false, true, false, 87 0.75, 1.5, pickRes); 88 assertTrue(e.isShiftDown()); 89 assertFalse(e.isControlDown()); 90 assertTrue(e.isAltDown()); 91 assertFalse(e.isMetaDown()); 92 assertTrue(e.isDirect()); 93 assertFalse(e.isInertia()); 94 } 95 96 @Test public void testShortConstructorWithoutPickResult() { 97 ZoomEvent e = new ZoomEvent( 98 ZoomEvent.ZOOM_FINISHED, 10, 20, 30, 40, 99 false, true, false, true, false, true, 100 0.75, 1.5, null); 101 102 assertEquals(10, e.getX(), 10e-20); 103 assertEquals(20, e.getY(), 10e-20); 104 assertEquals(0, e.getZ(), 10e-20); 105 assertEquals(10, e.getSceneX(), 10e-20); 106 assertEquals(20, e.getSceneY(), 10e-20); 107 assertEquals(30, e.getScreenX(), 10e-20); 108 assertEquals(40, e.getScreenY(), 10e-20); 109 assertNotNull(e.getPickResult()); 110 assertNotNull(e.getPickResult().getIntersectedPoint()); 111 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20); 112 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20); 113 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20); 114 assertSame(Event.NULL_SOURCE_TARGET, e.getSource()); 115 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget()); 116 } 117 118 @Test public void testLongConstructor() { 119 Rectangle node = new Rectangle(10, 10); 120 node.setTranslateX(3); 121 node.setTranslateY(2); 122 node.setTranslateZ(50); 123 Rectangle n1 = new Rectangle(10, 10); 124 Rectangle n2 = new Rectangle(10, 10); 125 126 pickRes = new PickResult(node, new Point3D(15, 25, 100), 33); 127 ZoomEvent e = new ZoomEvent(n1, n2, 128 ZoomEvent.ZOOM_FINISHED, 10, 20, 30, 40, 129 false, true, false, true, false, true, 130 0.75, 1.5, pickRes); 131 132 assertSame(n1, e.getSource()); 133 assertSame(n2, e.getTarget()); 134 assertSame(ZoomEvent.ZOOM_FINISHED, e.getEventType()); 135 assertSame(pickRes, e.getPickResult()); 136 assertEquals(18, e.getX(), 10e-20); 137 assertEquals(27, e.getY(), 10e-20); 138 assertEquals(150, e.getZ(), 10e-20); 139 assertEquals(10, e.getSceneX(), 10e-20); 140 assertEquals(20, e.getSceneY(), 10e-20); 141 assertEquals(30, e.getScreenX(), 10e-20); 142 assertEquals(40, e.getScreenY(), 10e-20); 143 assertFalse(e.isShiftDown()); 144 assertTrue(e.isControlDown()); 145 assertFalse(e.isAltDown()); 146 assertTrue(e.isMetaDown()); 147 assertFalse(e.isDirect()); 148 assertTrue(e.isInertia()); 149 assertEquals(0.75, e.getZoomFactor(), 10e-20); 150 assertEquals(1.5, e.getTotalZoomFactor(), 10e-20); 151 assertFalse(e.isConsumed()); 152 153 e = new ZoomEvent(n1, n2, 154 ZoomEvent.ZOOM_FINISHED, 10, 20, 30, 40, 155 true, false, true, false, true, false, 156 0.75, 1.5, pickRes); 157 assertTrue(e.isShiftDown()); 158 assertFalse(e.isControlDown()); 159 assertTrue(e.isAltDown()); 160 assertFalse(e.isMetaDown()); 161 assertTrue(e.isDirect()); 162 assertFalse(e.isInertia()); 163 } 164 165 @Test public void testLongConstructorWithoutPickResult() { 166 Rectangle n1 = new Rectangle(10, 10); 167 Rectangle n2 = new Rectangle(10, 10); 168 ZoomEvent e = new ZoomEvent(n1, n2, 169 ZoomEvent.ZOOM_FINISHED, 10, 20, 30, 40, 170 false, true, false, true, false, true, 171 0.75, 1.5, null); 172 173 assertSame(n1, e.getSource()); 174 assertSame(n2, e.getTarget()); 175 assertEquals(10, e.getX(), 10e-20); 176 assertEquals(20, e.getY(), 10e-20); 177 assertEquals(0, e.getZ(), 10e-20); 178 assertEquals(10, e.getSceneX(), 10e-20); 179 assertEquals(20, e.getSceneY(), 10e-20); 180 assertEquals(30, e.getScreenX(), 10e-20); 181 assertEquals(40, e.getScreenY(), 10e-20); 182 assertNotNull(e.getPickResult()); 183 assertNotNull(e.getPickResult().getIntersectedPoint()); 184 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20); 185 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20); 186 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20); 187 } 188 189 @Test 190 public void shouldDeliverZoomEventToPickedNode() { 191 Scene scene = createScene(); 192 Rectangle rect = 193 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 194 195 zoomed = false; 196 rect.setOnZoom(new EventHandler<ZoomEvent>() { 197 @Override public void handle(ZoomEvent event) { 198 zoomed = true; 199 } 200 }); 201 202 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 203 ZoomEvent.ZOOM, 1, 1, 204 50, 50, 50, 50, false, false, false, false, false, false); 205 206 assertFalse(zoomed); 207 208 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 209 ZoomEvent.ZOOM, 1, 1, 210 150, 150, 150, 150, false, false, false, false, false, false); 211 212 assertTrue(zoomed); 213 } 214 215 @Test 216 public void shouldPassFactors() { 217 Scene scene = createScene(); 218 Rectangle rect = 219 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 220 221 zoomed = false; 222 rect.setOnZoom(new EventHandler<ZoomEvent>() { 223 @Override public void handle(ZoomEvent event) { 224 assertEquals(1.2, event.getZoomFactor(), 0.0001); 225 assertEquals(2.4, event.getTotalZoomFactor(), 0.0001); 226 zoomed = true; 227 } 228 }); 229 230 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 231 ZoomEvent.ZOOM, 1.2, 2.4, 232 150, 150, 150, 150, false, false, false, false, false, false); 233 234 assertTrue(zoomed); 235 } 236 237 @Test 238 public void shouldPassModifiers() { 239 Scene scene = createScene(); 240 Rectangle rect = 241 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 242 243 zoomed = false; 244 rect.setOnZoom(new EventHandler<ZoomEvent>() { 245 @Override public void handle(ZoomEvent event) { 246 assertTrue(event.isShiftDown()); 247 assertFalse(event.isControlDown()); 248 assertTrue(event.isAltDown()); 249 assertFalse(event.isMetaDown()); 250 zoomed = true; 251 } 252 }); 253 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 254 ZoomEvent.ZOOM, 2, 3, 255 150, 150, 150, 150, true, false, true, false, false, false); 256 assertTrue(zoomed); 257 258 zoomed = false; 259 rect.setOnZoom(new EventHandler<ZoomEvent>() { 260 @Override public void handle(ZoomEvent event) { 261 assertFalse(event.isShiftDown()); 262 assertTrue(event.isControlDown()); 263 assertFalse(event.isAltDown()); 264 assertTrue(event.isMetaDown()); 265 zoomed = true; 266 } 267 }); 268 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 269 ZoomEvent.ZOOM, 2, 3, 270 150, 150, 150, 150, false, true, false, true, false, false); 271 assertTrue(zoomed); 272 } 273 274 @Test 275 public void shouldPassDirect() { 276 Scene scene = createScene(); 277 Rectangle rect = 278 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 279 280 zoomed = false; 281 rect.setOnZoom(new EventHandler<ZoomEvent>() { 282 @Override public void handle(ZoomEvent event) { 283 assertTrue(event.isDirect()); 284 zoomed = true; 285 } 286 }); 287 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 288 ZoomEvent.ZOOM, 2, 3, 289 150, 150, 150, 150, true, false, true, false, true, false); 290 assertTrue(zoomed); 291 292 zoomed = false; 293 rect.setOnZoom(new EventHandler<ZoomEvent>() { 294 @Override public void handle(ZoomEvent event) { 295 assertFalse(event.isDirect()); 296 zoomed = true; 297 } 298 }); 299 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 300 ZoomEvent.ZOOM, 2, 3, 301 150, 150, 150, 150, false, true, false, true, false, false); 302 assertTrue(zoomed); 303 } 304 305 @Test 306 public void shouldPassInertia() { 307 Scene scene = createScene(); 308 Rectangle rect = 309 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 310 311 zoomed = false; 312 rect.setOnZoom(new EventHandler<ZoomEvent>() { 313 @Override public void handle(ZoomEvent event) { 314 assertTrue(event.isInertia()); 315 zoomed = true; 316 } 317 }); 318 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 319 ZoomEvent.ZOOM, 2, 3, 320 150, 150, 150, 150, true, false, true, false, false, true); 321 assertTrue(zoomed); 322 323 zoomed = false; 324 rect.setOnZoom(new EventHandler<ZoomEvent>() { 325 @Override public void handle(ZoomEvent event) { 326 assertFalse(event.isInertia()); 327 zoomed = true; 328 } 329 }); 330 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 331 ZoomEvent.ZOOM, 2, 3, 332 150, 150, 150, 150, false, true, false, true, false, false); 333 assertTrue(zoomed); 334 } 335 336 @Test 337 public void shouldPassEventType() { 338 Scene scene = createScene(); 339 Rectangle rect = 340 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 341 342 zoomed = false; 343 rect.setOnZoomStarted(new EventHandler<ZoomEvent>() { 344 @Override public void handle(ZoomEvent event) { 345 zoomed = true; 346 } 347 }); 348 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 349 ZoomEvent.ZOOM_STARTED, 2, 3, 350 150, 150, 150, 150, true, false, true, false, true, false); 351 assertTrue(zoomed); 352 353 zoomed = false; 354 rect.setOnZoomFinished(new EventHandler<ZoomEvent>() { 355 @Override public void handle(ZoomEvent event) { 356 zoomed = true; 357 } 358 }); 359 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 360 ZoomEvent.ZOOM_FINISHED, 2, 3, 361 150, 150, 150, 150, true, false, true, false, true, false); 362 assertTrue(zoomed); 363 } 364 365 @Test 366 public void handlingAnyShouldGetAllTypes() { 367 Scene scene = createScene(); 368 Rectangle rect = 369 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 370 371 rect.addEventHandler(ZoomEvent.ANY, new EventHandler<ZoomEvent>() { 372 @Override public void handle(ZoomEvent event) { 373 zoomed = true; 374 } 375 }); 376 377 zoomed = false; 378 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 379 ZoomEvent.ZOOM_STARTED, 2, 3, 380 150, 150, 150, 150, true, false, true, false, true, false); 381 assertTrue(zoomed); 382 383 zoomed = false; 384 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 385 ZoomEvent.ZOOM, 2, 3, 386 150, 150, 150, 150, true, false, true, false, true, false); 387 assertTrue(zoomed); 388 389 zoomed = false; 390 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 391 ZoomEvent.ZOOM_FINISHED, 2, 3, 392 150, 150, 150, 150, true, false, true, false, true, false); 393 assertTrue(zoomed); 394 } 395 396 @Test 397 public void shouldDeliverWholeGestureToOneNode() { 398 Scene scene = createScene(); 399 Rectangle rect1 = 400 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 401 Rectangle rect2 = 402 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 403 404 rect1.addEventHandler(ZoomEvent.ANY, new EventHandler<ZoomEvent>() { 405 @Override public void handle(ZoomEvent event) { 406 zoomed = true; 407 } 408 }); 409 rect2.addEventHandler(ZoomEvent.ANY, new EventHandler<ZoomEvent>() { 410 @Override public void handle(ZoomEvent event) { 411 zoomed2 = true; 412 } 413 }); 414 415 zoomed = false; 416 zoomed2 = false; 417 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 418 ZoomEvent.ZOOM_STARTED, 2, 3, 419 150, 150, 150, 150, true, false, true, false, true, false); 420 assertTrue(zoomed); 421 assertFalse(zoomed2); 422 423 zoomed = false; 424 zoomed2 = false; 425 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 426 ZoomEvent.ZOOM, 2, 3, 427 250, 250, 250, 250, true, false, true, false, true, false); 428 assertTrue(zoomed); 429 assertFalse(zoomed2); 430 431 zoomed = false; 432 zoomed2 = false; 433 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 434 ZoomEvent.ZOOM_FINISHED, 2, 3, 435 250, 250, 250, 250, true, false, true, false, true, false); 436 assertTrue(zoomed); 437 assertFalse(zoomed2); 438 } 439 440 @Test 441 public void shouldCompute3dCoordinates() { 442 Scene scene = createScene(); 443 Rectangle rect = 444 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 445 rect.setTranslateZ(50); 446 447 zoomed = false; 448 zoomed2 = false; 449 rect.setOnZoom(new EventHandler<ZoomEvent>() { 450 @Override public void handle(ZoomEvent event) { 451 assertEquals(150, event.getX(), 0.00001); 452 assertEquals(150, event.getY(), 0.00001); 453 assertEquals(0, event.getZ(), 0.00001); 454 zoomed = true; 455 } 456 }); 457 458 scene.setOnZoom(new EventHandler<ZoomEvent>() { 459 @Override public void handle(ZoomEvent event) { 460 assertEquals(150, event.getX(), 0.00001); 461 assertEquals(150, event.getY(), 0.00001); 462 assertEquals(50, event.getZ(), 0.00001); 463 zoomed2 = true; 464 } 465 }); 466 467 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 468 ZoomEvent.ZOOM, 1, 1, 469 150, 150, 150, 150, false, false, false, false, false, false); 470 471 assertTrue(zoomed); 472 assertTrue(zoomed2); 473 } 474 475 @Test 476 public void shouldContainPickResult() { 477 Scene scene = createScene(); 478 Rectangle rect1 = 479 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 480 Rectangle rect2 = 481 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 482 483 rect1.addEventHandler(ZoomEvent.ANY, new EventHandler<ZoomEvent>() { 484 @Override public void handle(ZoomEvent event) { 485 zoomed = true; 486 pickRes = event.getPickResult(); 487 } 488 }); 489 rect2.addEventHandler(ZoomEvent.ANY, new EventHandler<ZoomEvent>() { 490 @Override public void handle(ZoomEvent event) { 491 zoomed2 = true; 492 pickRes = event.getPickResult(); 493 } 494 }); 495 496 zoomed = false; 497 zoomed2 = false; 498 pickRes = null; 499 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 500 ZoomEvent.ZOOM_STARTED, 2, 3, 501 150, 150, 150, 150, true, false, true, false, true, false); 502 assertTrue(zoomed); 503 assertFalse(zoomed2); 504 assertNotNull(pickRes); 505 assertSame(rect1, pickRes.getIntersectedNode()); 506 assertEquals(150, pickRes.getIntersectedPoint().getX(), 0.00001); 507 assertEquals(150, pickRes.getIntersectedPoint().getY(), 0.00001); 508 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 509 510 zoomed = false; 511 zoomed2 = false; 512 pickRes = null; 513 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 514 ZoomEvent.ZOOM, 2, 3, 515 250, 250, 250, 250, true, false, true, false, true, false); 516 assertTrue(zoomed); 517 assertFalse(zoomed2); 518 assertNotNull(pickRes); 519 assertSame(rect2, pickRes.getIntersectedNode()); 520 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 521 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 522 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 523 524 zoomed = false; 525 zoomed2 = false; 526 pickRes = null; 527 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 528 ZoomEvent.ZOOM_FINISHED, 2, 3, 529 250, 250, 250, 250, true, false, true, false, true, false); 530 assertTrue(zoomed); 531 assertFalse(zoomed2); 532 assertNotNull(pickRes); 533 assertSame(rect2, pickRes.getIntersectedNode()); 534 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 535 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 536 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 537 } 538 539 @Test 540 public void unknownLocationShouldBeReplacedByMouseLocation() { 541 Scene scene = createScene(); 542 Rectangle rect1 = 543 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 544 Rectangle rect2 = 545 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 546 rect1.addEventHandler(ZoomEvent.ANY, new EventHandler<ZoomEvent>() { 547 @Override public void handle(ZoomEvent event) { 548 zoomed = true; 549 } 550 }); 551 552 MouseEventGenerator generator = new MouseEventGenerator(); 553 554 zoomed = false; 555 zoomed2 = false; 556 rect2.setOnZoomStarted(new EventHandler<ZoomEvent>() { 557 @Override public void handle(ZoomEvent event) { 558 assertEquals(250.0, event.getSceneX(), 0.0001); 559 assertEquals(250.0, event.getSceneY(), 0.0001); 560 zoomed2 = true; 561 } 562 }); 563 scene.impl_processMouseEvent(generator.generateMouseEvent( 564 MouseEvent.MOUSE_MOVED, 250, 250)); 565 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 566 ZoomEvent.ZOOM_STARTED, 2, 3, 567 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 568 true, false, true, false, true, false); 569 assertFalse(zoomed); 570 assertTrue(zoomed2); 571 572 zoomed = false; 573 zoomed2 = false; 574 rect2.setOnZoom(new EventHandler<ZoomEvent>() { 575 @Override public void handle(ZoomEvent event) { 576 assertEquals(150.0, event.getSceneX(), 0.0001); 577 assertEquals(150.0, event.getSceneY(), 0.0001); 578 zoomed2 = true; 579 } 580 }); 581 scene.impl_processMouseEvent(generator.generateMouseEvent( 582 MouseEvent.MOUSE_MOVED, 150, 150)); 583 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 584 ZoomEvent.ZOOM, 2, 3, 585 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 586 true, false, true, false, true, false); 587 assertFalse(zoomed); 588 assertTrue(zoomed2); 589 590 zoomed = false; 591 zoomed2 = false; 592 rect2.setOnZoomFinished(new EventHandler<ZoomEvent>() { 593 @Override public void handle(ZoomEvent event) { 594 assertEquals(150.0, event.getSceneX(), 0.0001); 595 assertEquals(150.0, event.getSceneY(), 0.0001); 596 zoomed2 = true; 597 } 598 }); 599 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 600 ZoomEvent.ZOOM_FINISHED, 2, 3, 601 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 602 true, false, true, false, true, false); 603 assertFalse(zoomed); 604 assertTrue(zoomed2); 605 } 606 607 @Test 608 public void finishedLocationShouldBeFixed() { 609 Scene scene = createScene(); 610 Rectangle rect = 611 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 612 rect.setOnZoomFinished(new EventHandler<ZoomEvent>() { 613 @Override public void handle(ZoomEvent event) { 614 assertEquals(250.0, event.getSceneX(), 0.0001); 615 assertEquals(250.0, event.getSceneY(), 0.0001); 616 zoomed = true; 617 } 618 }); 619 620 zoomed = false; 621 622 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 623 ZoomEvent.ZOOM_STARTED, 2, 3, 624 150, 150, 150, 150, true, false, true, false, true, false); 625 626 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 627 ZoomEvent.ZOOM, 2, 3, 628 250, 250, 250, 250, true, false, true, false, true, false); 629 630 assertFalse(zoomed); 631 632 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 633 ZoomEvent.ZOOM_FINISHED, 2, 3, 634 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 635 true, false, true, false, true, false); 636 637 assertTrue(zoomed); 638 } 639 640 @Test 641 public void unknownLocalShouldBeFixedByMousePosition() { 642 MouseEventGenerator gen = new MouseEventGenerator(); 643 Scene scene = createScene(); 644 Rectangle rect = 645 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 646 647 rect.setOnZoom(new EventHandler<ZoomEvent>() { 648 @Override public void handle(ZoomEvent event) { 649 assertEquals(150.0, event.getSceneX(), 0.0001); 650 assertEquals(150.0, event.getSceneY(), 0.0001); 651 zoomed = true; 652 } 653 }); 654 655 zoomed = false; 656 657 scene.impl_processMouseEvent( 658 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250)); 659 660 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 661 ZoomEvent.ZOOM, 2, 3, 662 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 663 true, false, true, false, true, false); 664 665 assertFalse(zoomed); 666 667 scene.impl_processMouseEvent( 668 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150)); 669 670 ((StubScene) scene.impl_getPeer()).getListener().zoomEvent( 671 ZoomEvent.ZOOM, 2, 3, 672 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 673 true, false, true, false, true, false); 674 675 assertTrue(zoomed); 676 } 677 678 @Test public void testToString() { 679 ZoomEvent e = new ZoomEvent(ZoomEvent.ZOOM, 680 100, 100, 200, 200, 681 false, false, false, false, 682 true, false, 10, 20, null); 683 684 String s = e.toString(); 685 686 assertNotNull(s); 687 assertFalse(s.isEmpty()); 688 } 689 690 private Scene createScene() { 691 final Group root = new Group(); 692 693 final Scene scene = new Scene(root, 400, 400); 694 695 Rectangle rect = new Rectangle(100, 100, 100, 100); 696 Rectangle rect2 = new Rectangle(200, 200, 100, 100); 697 698 root.getChildren().addAll(rect, rect2); 699 700 Stage stage = new Stage(); 701 stage.setScene(scene); 702 stage.show(); 703 704 return scene; 705 } 706 }