1 /* 2 * Copyright (c) 2000, 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.pgstub.StubScene; 29 import com.sun.javafx.test.MouseEventGenerator; 30 import javafx.event.Event; 31 import javafx.event.EventHandler; 32 import javafx.geometry.Point3D; 33 import javafx.scene.Group; 34 import javafx.scene.Scene; 35 import javafx.scene.shape.Rectangle; 36 import javafx.stage.Stage; 37 import org.junit.Test; 38 import static org.junit.Assert.*; 39 40 public class ScrollEventTest { 41 42 private boolean scrolled; 43 private boolean scrolled2; 44 private PickResult pickRes; 45 46 @Test public void testShortConstructor() { 47 Rectangle node = new Rectangle(); 48 node.setTranslateX(3); 49 node.setTranslateY(2); 50 node.setTranslateZ(50); 51 52 pickRes = new PickResult(node, new Point3D(15, 25, 100), 33); 53 ScrollEvent e = new ScrollEvent( 54 ScrollEvent.SCROLL_STARTED, 10, 20, 30, 40, 55 false, true, false, true, false, true, 56 2, 3, 4, 5, ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, 6, 57 ScrollEvent.VerticalTextScrollUnits.PAGES, 7, 8, pickRes); 58 59 assertSame(ScrollEvent.SCROLL_STARTED, e.getEventType()); 60 assertSame(pickRes, e.getPickResult()); 61 assertEquals(18, e.getX(), 10e-20); 62 assertEquals(27, e.getY(), 10e-20); 63 assertEquals(150, e.getZ(), 10e-20); 64 assertEquals(10, e.getSceneX(), 10e-20); 65 assertEquals(20, e.getSceneY(), 10e-20); 66 assertEquals(30, e.getScreenX(), 10e-20); 67 assertEquals(40, e.getScreenY(), 10e-20); 68 assertFalse(e.isShiftDown()); 69 assertTrue(e.isControlDown()); 70 assertFalse(e.isAltDown()); 71 assertTrue(e.isMetaDown()); 72 assertFalse(e.isDirect()); 73 assertTrue(e.isInertia()); 74 assertEquals(2.0, e.getDeltaX(), 10e-20); 75 assertEquals(3.0, e.getDeltaY(), 10e-20); 76 assertEquals(4.0, e.getTotalDeltaX(), 10e-20); 77 assertEquals(5.0, e.getTotalDeltaY(), 10e-20); 78 assertSame(ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, e.getTextDeltaXUnits()); 79 assertEquals(6.0, e.getTextDeltaX(), 10e-20); 80 assertSame(ScrollEvent.VerticalTextScrollUnits.PAGES, e.getTextDeltaYUnits()); 81 assertEquals(7.0, e.getTextDeltaY(), 10e-20); 82 assertEquals(8.0, e.getTouchCount(), 10e-20); 83 assertSame(Event.NULL_SOURCE_TARGET, e.getSource()); 84 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget()); 85 assertFalse(e.isConsumed()); 86 87 e = new ScrollEvent( 88 ScrollEvent.SCROLL_STARTED, 10, 20, 30, 40, 89 true, false, true, false, true, false, 90 2, 3, 4, 5, ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, 6, 91 ScrollEvent.VerticalTextScrollUnits.PAGES, 7, 8, pickRes); 92 assertTrue(e.isShiftDown()); 93 assertFalse(e.isControlDown()); 94 assertTrue(e.isAltDown()); 95 assertFalse(e.isMetaDown()); 96 assertTrue(e.isDirect()); 97 assertFalse(e.isInertia()); 98 } 99 100 @Test public void testShortConstructorWithoutPickResult() { 101 ScrollEvent e = new ScrollEvent( 102 ScrollEvent.SCROLL_STARTED, 10, 20, 30, 40, 103 false, true, false, true, false, true, 104 2, 3, 4, 5, ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, 6, 105 ScrollEvent.VerticalTextScrollUnits.PAGES, 7, 8, null); 106 107 assertEquals(10, e.getX(), 10e-20); 108 assertEquals(20, e.getY(), 10e-20); 109 assertEquals(0, e.getZ(), 10e-20); 110 assertEquals(10, e.getSceneX(), 10e-20); 111 assertEquals(20, e.getSceneY(), 10e-20); 112 assertEquals(30, e.getScreenX(), 10e-20); 113 assertEquals(40, e.getScreenY(), 10e-20); 114 assertNotNull(e.getPickResult()); 115 assertNotNull(e.getPickResult().getIntersectedPoint()); 116 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20); 117 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20); 118 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20); 119 assertSame(Event.NULL_SOURCE_TARGET, e.getSource()); 120 assertSame(Event.NULL_SOURCE_TARGET, e.getTarget()); 121 } 122 123 @Test public void testLongConstructor() { 124 Rectangle node = new Rectangle(10, 10); 125 node.setTranslateX(3); 126 node.setTranslateY(2); 127 node.setTranslateZ(50); 128 Rectangle n1 = new Rectangle(10, 10); 129 Rectangle n2 = new Rectangle(10, 10); 130 131 pickRes = new PickResult(node, new Point3D(15, 25, 100), 33); 132 ScrollEvent e = new ScrollEvent(n1, n2, 133 ScrollEvent.SCROLL_STARTED, 10, 20, 30, 40, 134 false, true, false, true, false, true, 135 2, 3, 4, 5, ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, 6, 136 ScrollEvent.VerticalTextScrollUnits.PAGES, 7, 8, pickRes); 137 138 assertSame(n1, e.getSource()); 139 assertSame(n2, e.getTarget()); 140 assertSame(ScrollEvent.SCROLL_STARTED, e.getEventType()); 141 assertSame(pickRes, e.getPickResult()); 142 assertEquals(18, e.getX(), 10e-20); 143 assertEquals(27, e.getY(), 10e-20); 144 assertEquals(150, e.getZ(), 10e-20); 145 assertEquals(10, e.getSceneX(), 10e-20); 146 assertEquals(20, e.getSceneY(), 10e-20); 147 assertEquals(30, e.getScreenX(), 10e-20); 148 assertEquals(40, e.getScreenY(), 10e-20); 149 assertFalse(e.isShiftDown()); 150 assertTrue(e.isControlDown()); 151 assertFalse(e.isAltDown()); 152 assertTrue(e.isMetaDown()); 153 assertFalse(e.isDirect()); 154 assertTrue(e.isInertia()); 155 assertEquals(2.0, e.getDeltaX(), 10e-20); 156 assertEquals(3.0, e.getDeltaY(), 10e-20); 157 assertEquals(4.0, e.getTotalDeltaX(), 10e-20); 158 assertEquals(5.0, e.getTotalDeltaY(), 10e-20); 159 assertSame(ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, e.getTextDeltaXUnits()); 160 assertEquals(6.0, e.getTextDeltaX(), 10e-20); 161 assertSame(ScrollEvent.VerticalTextScrollUnits.PAGES, e.getTextDeltaYUnits()); 162 assertEquals(7.0, e.getTextDeltaY(), 10e-20); 163 assertEquals(8.0, e.getTouchCount(), 10e-20); 164 assertFalse(e.isConsumed()); 165 166 e = new ScrollEvent(n1, n2, 167 ScrollEvent.SCROLL_STARTED, 10, 20, 30, 40, 168 true, false, true, false, true, false, 169 2, 3, 4, 5, ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, 6, 170 ScrollEvent.VerticalTextScrollUnits.PAGES, 7, 8, pickRes); 171 assertTrue(e.isShiftDown()); 172 assertFalse(e.isControlDown()); 173 assertTrue(e.isAltDown()); 174 assertFalse(e.isMetaDown()); 175 assertTrue(e.isDirect()); 176 assertFalse(e.isInertia()); 177 } 178 179 @Test public void testLongConstructorWithoutPickResult() { 180 Rectangle n1 = new Rectangle(10, 10); 181 Rectangle n2 = new Rectangle(10, 10); 182 ScrollEvent e = new ScrollEvent(n1, n2, 183 ScrollEvent.SCROLL_STARTED, 10, 20, 30, 40, 184 false, true, false, true, false, true, 185 2, 3, 4, 5, ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, 6, 186 ScrollEvent.VerticalTextScrollUnits.PAGES, 7, 8, null); 187 188 assertSame(n1, e.getSource()); 189 assertSame(n2, e.getTarget()); 190 assertEquals(10, e.getX(), 10e-20); 191 assertEquals(20, e.getY(), 10e-20); 192 assertEquals(0, e.getZ(), 10e-20); 193 assertEquals(10, e.getSceneX(), 10e-20); 194 assertEquals(20, e.getSceneY(), 10e-20); 195 assertEquals(30, e.getScreenX(), 10e-20); 196 assertEquals(40, e.getScreenY(), 10e-20); 197 assertNotNull(e.getPickResult()); 198 assertNotNull(e.getPickResult().getIntersectedPoint()); 199 assertEquals(10, e.getPickResult().getIntersectedPoint().getX(), 10e-20); 200 assertEquals(20, e.getPickResult().getIntersectedPoint().getY(), 10e-20); 201 assertEquals(0, e.getPickResult().getIntersectedPoint().getZ(), 10e-20); 202 } 203 204 205 @Test 206 public void shouldDeliverScrollEventToPickedNode() { 207 Scene scene = createScene(); 208 Rectangle rect = 209 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 210 211 scrolled = false; 212 rect.setOnScroll(new EventHandler<ScrollEvent>() { 213 @Override public void handle(ScrollEvent event) { 214 scrolled = true; 215 } 216 }); 217 218 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 219 ScrollEvent.SCROLL, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 220 50, 50, 50, 50, false, false, false, false, false, false); 221 222 assertFalse(scrolled); 223 224 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 225 ScrollEvent.SCROLL, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 226 150, 150, 150, 150, false, false, false, false, false, false); 227 228 assertTrue(scrolled); 229 } 230 231 @Test 232 public void shouldUseMultiplier() { 233 Scene scene = createScene(); 234 Rectangle rect = 235 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 236 237 scrolled = false; 238 rect.setOnScroll(new EventHandler<ScrollEvent>() { 239 @Override public void handle(ScrollEvent event) { 240 assertEquals(66.0, event.getDeltaX(), 0.0001); 241 assertEquals(99.0, event.getDeltaY(), 0.0001); 242 assertEquals(132.0, event.getTotalDeltaX(), 0.0001); 243 assertEquals(198.0, event.getTotalDeltaY(), 0.0001); 244 scrolled = true; 245 } 246 }); 247 248 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 249 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 1, 1, 250 150, 150, 150, 150, false, false, false, false, false, false); 251 252 assertTrue(scrolled); 253 } 254 255 @Test 256 public void shouldUseTextDeltasForUnitsAndValues() { 257 Scene scene = createScene(); 258 Rectangle rect = 259 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 260 261 scrolled = false; 262 rect.setOnScroll(new EventHandler<ScrollEvent>() { 263 @Override public void handle(ScrollEvent event) { 264 assertEquals(0.0, event.getTextDeltaX(), 0.0001); 265 assertEquals(0.0, event.getTextDeltaY(), 0.0001); 266 assertSame(ScrollEvent.HorizontalTextScrollUnits.NONE, event.getTextDeltaXUnits()); 267 assertSame(ScrollEvent.VerticalTextScrollUnits.NONE, event.getTextDeltaYUnits()); 268 scrolled = true; 269 } 270 }); 271 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 272 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 0, 0, 0, 0, 273 150, 150, 150, 150, false, false, false, false, false, false); 274 assertTrue(scrolled); 275 276 scrolled = false; 277 rect.setOnScroll(new EventHandler<ScrollEvent>() { 278 @Override public void handle(ScrollEvent event) { 279 assertEquals(8.0, event.getTextDeltaX(), 0.0001); 280 assertEquals(15.0, event.getTextDeltaY(), 0.0001); 281 assertSame(ScrollEvent.HorizontalTextScrollUnits.CHARACTERS, event.getTextDeltaXUnits()); 282 assertSame(ScrollEvent.VerticalTextScrollUnits.LINES, event.getTextDeltaYUnits()); 283 scrolled = true; 284 } 285 }); 286 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 287 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 4, 5, 3, 3, 288 150, 150, 150, 150, false, false, false, false, false, false); 289 assertTrue(scrolled); 290 291 scrolled = false; 292 rect.setOnScroll(new EventHandler<ScrollEvent>() { 293 @Override public void handle(ScrollEvent event) { 294 assertEquals(0.0, event.getTextDeltaX(), 0.0001); 295 assertEquals(3.0, event.getTextDeltaY(), 0.0001); 296 assertSame(ScrollEvent.HorizontalTextScrollUnits.NONE, event.getTextDeltaXUnits()); 297 assertSame(ScrollEvent.VerticalTextScrollUnits.PAGES, event.getTextDeltaYUnits()); 298 scrolled = true; 299 } 300 }); 301 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 302 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 5, -1, -1, 3, 3, 303 150, 150, 150, 150, false, false, false, false, false, false); 304 assertTrue(scrolled); 305 306 } 307 308 @Test 309 public void shouldPassModifiers() { 310 Scene scene = createScene(); 311 Rectangle rect = 312 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 313 314 scrolled = false; 315 rect.setOnScroll(new EventHandler<ScrollEvent>() { 316 @Override public void handle(ScrollEvent event) { 317 assertTrue(event.isShiftDown()); 318 assertFalse(event.isControlDown()); 319 assertTrue(event.isAltDown()); 320 assertFalse(event.isMetaDown()); 321 scrolled = true; 322 } 323 }); 324 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 325 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 3, 3, 326 150, 150, 150, 150, true, false, true, false, false, false); 327 assertTrue(scrolled); 328 329 scrolled = false; 330 rect.setOnScroll(new EventHandler<ScrollEvent>() { 331 @Override public void handle(ScrollEvent event) { 332 assertFalse(event.isShiftDown()); 333 assertTrue(event.isControlDown()); 334 assertFalse(event.isAltDown()); 335 assertTrue(event.isMetaDown()); 336 scrolled = true; 337 } 338 }); 339 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 340 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 3, 3, 341 150, 150, 150, 150, false, true, false, true, false, false); 342 assertTrue(scrolled); 343 } 344 345 @Test 346 public void shouldPassDirect() { 347 Scene scene = createScene(); 348 Rectangle rect = 349 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 350 351 scrolled = false; 352 rect.setOnScroll(new EventHandler<ScrollEvent>() { 353 @Override public void handle(ScrollEvent event) { 354 assertTrue(event.isDirect()); 355 scrolled = true; 356 } 357 }); 358 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 359 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 3, 3, 360 150, 150, 150, 150, true, false, true, false, true, false); 361 assertTrue(scrolled); 362 363 scrolled = false; 364 rect.setOnScroll(new EventHandler<ScrollEvent>() { 365 @Override public void handle(ScrollEvent event) { 366 assertFalse(event.isDirect()); 367 scrolled = true; 368 } 369 }); 370 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 371 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 3, 3, 372 150, 150, 150, 150, false, true, false, true, false, false); 373 assertTrue(scrolled); 374 } 375 376 @Test 377 public void shouldPassInertia() { 378 Scene scene = createScene(); 379 Rectangle rect = 380 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 381 382 scrolled = false; 383 rect.setOnScroll(new EventHandler<ScrollEvent>() { 384 @Override public void handle(ScrollEvent event) { 385 assertTrue(event.isInertia()); 386 scrolled = true; 387 } 388 }); 389 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 390 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 3, 3, 391 150, 150, 150, 150, true, false, true, false, false, true); 392 assertTrue(scrolled); 393 394 scrolled = false; 395 rect.setOnScroll(new EventHandler<ScrollEvent>() { 396 @Override public void handle(ScrollEvent event) { 397 assertFalse(event.isInertia()); 398 scrolled = true; 399 } 400 }); 401 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 402 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 1, 1, 1, 3, 3, 403 150, 150, 150, 150, false, true, false, true, false, false); 404 assertTrue(scrolled); 405 } 406 407 @Test 408 public void shouldPassTouchCount() { 409 Scene scene = createScene(); 410 Rectangle rect = 411 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 412 413 scrolled = false; 414 rect.setOnScroll(new EventHandler<ScrollEvent>() { 415 @Override public void handle(ScrollEvent event) { 416 assertEquals(0, event.getTouchCount()); 417 scrolled = true; 418 } 419 }); 420 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 421 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 422 150, 150, 150, 150, true, false, true, false, true, false); 423 assertTrue(scrolled); 424 425 scrolled = false; 426 rect.setOnScroll(new EventHandler<ScrollEvent>() { 427 @Override public void handle(ScrollEvent event) { 428 assertEquals(5, event.getTouchCount()); 429 scrolled = true; 430 } 431 }); 432 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 433 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 5, 1, 1, 3, 3, 434 150, 150, 150, 150, true, false, true, false, true, false); 435 assertTrue(scrolled); 436 } 437 438 @Test 439 public void shouldPassEventType() { 440 Scene scene = createScene(); 441 Rectangle rect = 442 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 443 444 scrolled = false; 445 rect.setOnScrollStarted(new EventHandler<ScrollEvent>() { 446 @Override public void handle(ScrollEvent event) { 447 scrolled = true; 448 } 449 }); 450 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 451 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 452 150, 150, 150, 150, true, false, true, false, true, false); 453 assertTrue(scrolled); 454 455 scrolled = false; 456 rect.setOnScrollFinished(new EventHandler<ScrollEvent>() { 457 @Override public void handle(ScrollEvent event) { 458 scrolled = true; 459 } 460 }); 461 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 462 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 5, 1, 1, 3, 3, 463 150, 150, 150, 150, true, false, true, false, true, false); 464 assertTrue(scrolled); 465 } 466 467 @Test 468 public void handlingAnyShouldGetAllTypes() { 469 Scene scene = createScene(); 470 Rectangle rect = 471 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 472 473 rect.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 474 @Override public void handle(ScrollEvent event) { 475 scrolled = true; 476 } 477 }); 478 479 scrolled = false; 480 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 481 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 482 150, 150, 150, 150, true, false, true, false, true, false); 483 assertTrue(scrolled); 484 485 scrolled = false; 486 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 487 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 5, 1, 1, 3, 3, 488 150, 150, 150, 150, true, false, true, false, true, false); 489 assertTrue(scrolled); 490 491 scrolled = false; 492 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 493 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 5, 1, 1, 3, 3, 494 150, 150, 150, 150, true, false, true, false, true, false); 495 assertTrue(scrolled); 496 } 497 498 @Test 499 public void shouldDeliverWholeGestureToOneNode() { 500 Scene scene = createScene(); 501 Rectangle rect1 = 502 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 503 Rectangle rect2 = 504 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 505 506 rect1.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 507 @Override public void handle(ScrollEvent event) { 508 scrolled = true; 509 } 510 }); 511 rect2.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 512 @Override public void handle(ScrollEvent event) { 513 scrolled2 = true; 514 } 515 }); 516 517 scrolled = false; 518 scrolled2 = false; 519 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 520 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 521 150, 150, 150, 150, true, false, true, false, true, false); 522 assertTrue(scrolled); 523 assertFalse(scrolled2); 524 525 scrolled = false; 526 scrolled2 = false; 527 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 528 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 529 250, 250, 250, 250, true, false, true, false, true, false); 530 assertTrue(scrolled); 531 assertFalse(scrolled2); 532 533 scrolled = false; 534 scrolled2 = false; 535 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 536 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 537 250, 250, 250, 250, true, false, true, false, true, false); 538 assertTrue(scrolled); 539 assertFalse(scrolled2); 540 541 // inertia 542 scrolled = false; 543 scrolled2 = false; 544 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 545 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 546 250, 250, 250, 250, true, false, true, false, true, true); 547 assertTrue(scrolled); 548 assertFalse(scrolled2); 549 } 550 551 @Test 552 public void shouldCompute3dCoordinates() { 553 Scene scene = createScene(); 554 Rectangle rect = 555 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 556 rect.setTranslateZ(50); 557 558 scrolled = false; 559 scrolled2 = false; 560 rect.setOnScroll(new EventHandler<ScrollEvent>() { 561 @Override public void handle(ScrollEvent event) { 562 assertEquals(150, event.getX(), 0.00001); 563 assertEquals(150, event.getY(), 0.00001); 564 assertEquals(0, event.getZ(), 0.00001); 565 scrolled = true; 566 } 567 }); 568 569 scene.setOnScroll(new EventHandler<ScrollEvent>() { 570 @Override public void handle(ScrollEvent event) { 571 assertEquals(150, event.getX(), 0.00001); 572 assertEquals(150, event.getY(), 0.00001); 573 assertEquals(50, event.getZ(), 0.00001); 574 scrolled2 = true; 575 } 576 }); 577 578 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 579 ScrollEvent.SCROLL, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 580 150, 150, 150, 150, false, false, false, false, false, false); 581 582 assertTrue(scrolled); 583 assertTrue(scrolled2); 584 } 585 586 @Test 587 public void shouldContainPickResult() { 588 Scene scene = createScene(); 589 Rectangle rect1 = 590 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 591 Rectangle rect2 = 592 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 593 594 rect1.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 595 @Override public void handle(ScrollEvent event) { 596 pickRes = event.getPickResult(); 597 scrolled = true; 598 } 599 }); 600 rect2.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 601 @Override public void handle(ScrollEvent event) { 602 pickRes = event.getPickResult(); 603 scrolled2 = true; 604 } 605 }); 606 607 scrolled = false; 608 scrolled2 = false; 609 pickRes = null; 610 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 611 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 612 150, 150, 150, 150, true, false, true, false, true, false); 613 assertTrue(scrolled); 614 assertFalse(scrolled2); 615 assertNotNull(pickRes); 616 assertSame(rect1, pickRes.getIntersectedNode()); 617 assertEquals(150, pickRes.getIntersectedPoint().getX(), 0.00001); 618 assertEquals(150, pickRes.getIntersectedPoint().getY(), 0.00001); 619 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 620 621 scrolled = false; 622 scrolled2 = false; 623 pickRes = null; 624 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 625 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 626 250, 250, 250, 250, true, false, true, false, true, false); 627 assertTrue(scrolled); 628 assertFalse(scrolled2); 629 assertNotNull(pickRes); 630 assertSame(rect2, pickRes.getIntersectedNode()); 631 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 632 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 633 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 634 635 scrolled = false; 636 scrolled2 = false; 637 pickRes = null; 638 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 639 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 640 250, 250, 250, 250, true, false, true, false, true, false); 641 assertTrue(scrolled); 642 assertFalse(scrolled2); 643 assertNotNull(pickRes); 644 assertSame(rect2, pickRes.getIntersectedNode()); 645 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 646 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 647 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 648 649 // inertia 650 scrolled = false; 651 scrolled2 = false; 652 pickRes = null; 653 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 654 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 655 250, 250, 250, 250, true, false, true, false, true, true); 656 assertTrue(scrolled); 657 assertFalse(scrolled2); 658 assertNotNull(pickRes); 659 assertSame(rect2, pickRes.getIntersectedNode()); 660 assertEquals(250, pickRes.getIntersectedPoint().getX(), 0.00001); 661 assertEquals(250, pickRes.getIntersectedPoint().getY(), 0.00001); 662 assertEquals(0, pickRes.getIntersectedPoint().getZ(), 0.00001); 663 } 664 665 @Test 666 public void shouldPickForMouseWheelDuringInertia() { 667 Scene scene = createScene(); 668 Rectangle rect1 = 669 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 670 Rectangle rect2 = 671 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 672 673 rect1.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 674 @Override public void handle(ScrollEvent event) { 675 scrolled = true; 676 } 677 }); 678 rect2.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 679 @Override public void handle(ScrollEvent event) { 680 scrolled2 = true; 681 } 682 }); 683 684 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 685 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 686 150, 150, 150, 150, true, false, true, false, true, false); 687 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 688 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 689 250, 250, 250, 250, true, false, true, false, true, false); 690 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 691 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 692 250, 250, 250, 250, true, false, true, false, true, false); 693 694 // inertia 695 scrolled = false; 696 scrolled2 = false; 697 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 698 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 699 250, 250, 250, 250, true, false, true, false, true, true); 700 assertTrue(scrolled); 701 assertFalse(scrolled2); 702 703 // wheel 704 scrolled = false; 705 scrolled2 = false; 706 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 707 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 708 250, 250, 250, 250, true, false, true, false, true, false); 709 assertFalse(scrolled); 710 assertTrue(scrolled2); 711 712 // inertia 713 scrolled = false; 714 scrolled2 = false; 715 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 716 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 717 250, 250, 250, 250, true, false, true, false, true, true); 718 assertTrue(scrolled); 719 assertFalse(scrolled2); 720 } 721 722 @Test 723 public void unknownLocationShouldBeReplacedByMouseLocation() { 724 Scene scene = createScene(); 725 Rectangle rect1 = 726 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 727 Rectangle rect2 = 728 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1); 729 rect1.addEventHandler(ScrollEvent.ANY, new EventHandler<ScrollEvent>() { 730 @Override public void handle(ScrollEvent event) { 731 scrolled = true; 732 } 733 }); 734 735 MouseEventGenerator generator = new MouseEventGenerator(); 736 737 scrolled = false; 738 scrolled2 = false; 739 rect2.setOnScrollStarted(new EventHandler<ScrollEvent>() { 740 @Override public void handle(ScrollEvent event) { 741 assertEquals(250.0, event.getSceneX(), 0.0001); 742 assertEquals(250.0, event.getSceneY(), 0.0001); 743 scrolled2 = true; 744 } 745 }); 746 scene.impl_processMouseEvent(generator.generateMouseEvent( 747 MouseEvent.MOUSE_MOVED, 250, 250)); 748 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 749 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 750 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 751 true, false, true, false, true, false); 752 assertFalse(scrolled); 753 assertTrue(scrolled2); 754 755 scrolled = false; 756 scrolled2 = false; 757 rect2.setOnScroll(new EventHandler<ScrollEvent>() { 758 @Override public void handle(ScrollEvent event) { 759 assertEquals(150.0, event.getSceneX(), 0.0001); 760 assertEquals(150.0, event.getSceneY(), 0.0001); 761 scrolled2 = true; 762 } 763 }); 764 scene.impl_processMouseEvent(generator.generateMouseEvent( 765 MouseEvent.MOUSE_MOVED, 150, 150)); 766 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 767 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 768 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 769 true, false, true, false, true, false); 770 assertFalse(scrolled); 771 assertTrue(scrolled2); 772 773 scrolled = false; 774 scrolled2 = false; 775 rect2.setOnScrollFinished(new EventHandler<ScrollEvent>() { 776 @Override public void handle(ScrollEvent event) { 777 assertEquals(150.0, event.getSceneX(), 0.0001); 778 assertEquals(150.0, event.getSceneY(), 0.0001); 779 scrolled2 = true; 780 } 781 }); 782 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 783 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 784 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 785 true, false, true, false, true, false); 786 assertFalse(scrolled); 787 assertTrue(scrolled2); 788 } 789 790 @Test 791 public void finishedLocationShouldBeFixed() { 792 Scene scene = createScene(); 793 Rectangle rect = 794 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 795 rect.setOnScrollFinished(new EventHandler<ScrollEvent>() { 796 @Override public void handle(ScrollEvent event) { 797 assertEquals(250.0, event.getSceneX(), 0.0001); 798 assertEquals(250.0, event.getSceneY(), 0.0001); 799 scrolled = true; 800 } 801 }); 802 803 scrolled = false; 804 805 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 806 ScrollEvent.SCROLL_STARTED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 807 150, 150, 150, 150, true, false, true, false, true, false); 808 809 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 810 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 811 250, 250, 250, 250, true, false, true, false, true, false); 812 813 assertFalse(scrolled); 814 815 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 816 ScrollEvent.SCROLL_FINISHED, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 817 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 818 true, false, true, false, true, false); 819 820 assertTrue(scrolled); 821 } 822 823 @Test 824 public void unknownLocalShouldBeFixedByMousePosition() { 825 MouseEventGenerator gen = new MouseEventGenerator(); 826 Scene scene = createScene(); 827 Rectangle rect = 828 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0); 829 830 rect.setOnScroll(new EventHandler<ScrollEvent>() { 831 @Override public void handle(ScrollEvent event) { 832 assertEquals(150.0, event.getSceneX(), 0.0001); 833 assertEquals(150.0, event.getSceneY(), 0.0001); 834 scrolled = true; 835 } 836 }); 837 838 scrolled = false; 839 840 scene.impl_processMouseEvent( 841 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 250, 250)); 842 843 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 844 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 845 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 846 true, false, true, false, true, false); 847 848 assertFalse(scrolled); 849 850 scene.impl_processMouseEvent( 851 gen.generateMouseEvent(MouseEvent.MOUSE_MOVED, 150, 150)); 852 853 ((StubScene) scene.impl_getPeer()).getListener().scrollEvent( 854 ScrollEvent.SCROLL, 2, 3, 4, 6, 33, 33, 0, 1, 1, 3, 3, 855 Double.NaN, Double.NaN, Double.NaN, Double.NaN, 856 true, false, true, false, true, false); 857 858 assertTrue(scrolled); 859 } 860 861 @Test public void testToString() { 862 ScrollEvent e = new ScrollEvent(ScrollEvent.SCROLL, 863 100, 100, 200, 200, 864 false, false, false, false, 865 true, false, 10, 10, 20, 20,ScrollEvent.HorizontalTextScrollUnits.NONE, 0, 866 ScrollEvent.VerticalTextScrollUnits.NONE, 0, 867 3, null); 868 869 String s = e.toString(); 870 871 assertNotNull(s); 872 assertFalse(s.isEmpty()); 873 } 874 875 private Scene createScene() { 876 final Group root = new Group(); 877 878 final Scene scene = new Scene(root, 400, 400); 879 880 Rectangle rect = new Rectangle(100, 100, 100, 100); 881 Rectangle rect2 = new Rectangle(200, 200, 100, 100); 882 883 root.getChildren().addAll(rect, rect2); 884 885 Stage stage = new Stage(); 886 stage.setScene(scene); 887 stage.show(); 888 889 return scene; 890 } 891 }