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