private void drag(MouseEvent e) { Node node = get(); if (isEnable() && pressedCorner != null && e.isConsumed() == false && node != null) { double dx = e.getScreenX() - startX; if (pressedCorner.horizontal == HorizontalDirection.RIGHT) { width.set(MathUtil.toRange(startWidth + dx, minWidth.get(), maxWidth.get())); } else if (pressedCorner.horizontal == HorizontalDirection.LEFT) { width.set(MathUtil.toRange(startWidth - dx, minWidth.get(), maxWidth.get())); node.setLayoutX(startWidth + startPosX - width.get()); } double dy = e.getScreenY() - startY; if (pressedCorner.vertical == VerticalDirection.DOWN) { height.set(MathUtil.toRange(startHeight + dy, minHeight.get(), maxHeight.get())); } else if (pressedCorner.vertical == VerticalDirection.UP) { height.set(MathUtil.toRange(startHeight - dy, minHeight.get(), maxHeight.get())); node.setLayoutY(startHeight + startPosY - height.get()); } e.consume(); } }
@Test public void testGestureDisabling() throws Exception { pane.setGestureEnabled(false); pane.zoomTo(2, pane.targetPointAtViewportCentre()); Transform expected = target.captureTransform(); FxRobot robot = new FxRobot(); robot.moveTo(pane) .scroll(2, VerticalDirection.UP) .scroll(2, VerticalDirection.DOWN) .drag(MouseButton.PRIMARY).dropBy(100, 100); assertThat(target.captureTransform()).isEqualToComparingOnlyGivenFields(expected, "xx", "xy", "xz", "yx", "yy", "yz", "zx", "zy", "zz", "xt", "yt", "zt"); }
@Test public void testScaleByScroll() throws Exception { pane.scrollModeProperty().set(ScrollMode.ZOOM); pane.zoomTo(5, pane.targetPointAtViewportCentre()); FxRobot robot = new FxRobot(); assertThat(pane.getCurrentXScale()).isEqualTo(5d); Thread.sleep(100); robot.moveTo(pane); robot.scroll(5, VerticalDirection.UP); // direction is platform dependent Thread.sleep(100); double expectedUp = 5 * Math.pow(1 + DEFAULT_SCROLL_FACTOR, 5); double expectedDown = 5 * Math.pow(1 - DEFAULT_SCROLL_FACTOR, 5); Condition<Double> eitherUpOrDown = new Condition<>( v -> Math.abs(v - expectedUp) < 0.01 || Math.abs(v - expectedDown) < 0.01, "either close to %s or %s", expectedUp, expectedDown); assertThat(pane.getCurrentXScale()).is(eitherUpOrDown); Transform t = target.captureTransform(); assertThat(t.getMxx()).is(eitherUpOrDown); assertThat(t.getMyy()).is(eitherUpOrDown); }
/** * Test zooming in by scrolling the mouse. */ @Test public void testOnScroll() { double zoomPrevious; zoomPrevious = view.scale.getMxx(); moveTo(view).scroll(VerticalDirection.UP).sleep(1, TimeUnit.SECONDS); assertTrue(view.scale.getMxx() > zoomPrevious); assertTrue(view.scale.getMyy() > zoomPrevious); zoomPrevious = view.scale.getMxx(); moveTo(view).scroll(VerticalDirection.DOWN).sleep(1, TimeUnit.SECONDS); assertTrue(view.scale.getMxx() < zoomPrevious); assertTrue(view.scale.getMyy() < zoomPrevious); }
/** * Testet Wertänderung durch Scrollen innerhalb von Textfeldern. */ @Test public final void testTextFieldScrolling() { /* * Zunächst vom Betriebssystem vorgegebene Scrollrichtung ermitteln. * Kann z. B. unter Mac OS X frei festgelegt werden und ist standardmäßig umgekehrt, ergo verringert hochscrollen den Wert. */ click(hoursTextField); scroll(VerticalDirection.UP); final boolean scrollingUpIncreasesValue = hoursSlider.getValue() == 1.0; if (scrollingUpIncreasesValue) { // ursprünglichen Zustand wiederherstellen scroll(VerticalDirection.DOWN); } // Scrollrichtungen entsprechend definieren final VerticalDirection increaseValue = scrollingUpIncreasesValue ? VerticalDirection.UP : VerticalDirection.DOWN; final VerticalDirection decreaseValue = scrollingUpIncreasesValue ? VerticalDirection.DOWN : VerticalDirection.UP; // nun zum eigentlichen Test ... final TextFieldScrollingData[] testCases = new TextFieldScrollingData[] { new TextFieldScrollingData(minutesTextField, hoursTextField, hoursSlider), new TextFieldScrollingData(secondsTextField, minutesTextField, minutesSlider), new TextFieldScrollingData(hoursTextField, secondsTextField, secondsSlider), }; for (final TextFieldScrollingData testCase : testCases) { click(testCase.focusedTextField); // anderes Feld fokussieren // Scrollen über Feld ohne Fokus hat keine Auswirkung move(testCase.textField); scroll(increaseValue); assertEquals(0.0, testCase.slider.getValue(), 0.0); click(testCase.textField); // richtiges Feld fokussieren scroll(increaseValue); assertEquals(1.0, testCase.slider.getValue(), 0.0); scroll(decreaseValue); assertEquals(0.0, testCase.slider.getValue(), 0.0); } }
private Corner(Cursor cursor, HorizontalDirection horizontal, VerticalDirection vertical) { this.cursor = cursor; this.horizontal = horizontal; this.vertical = vertical; }