From 3d32f868a181bcd943286ad22aa9f8d6df24c0cf Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 17 May 2014 20:37:15 +0000 Subject: [PATCH] Improve horizontal zoom accuracy --- .../src/forge/screens/match/MatchScreen.java | 16 ++++++++++++---- .../src/forge/toolbox/FScrollPane.java | 8 ++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 10a89f73546..5b447732685 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -250,18 +250,26 @@ public class MatchScreen extends FScreen { //adjust scroll top to keep y position the same float newScrollHeight = getScrollHeight() - staticHeight; - float yAfter = y * newScrollHeight / oldScrollHeight; + float ratio = newScrollHeight / oldScrollHeight; + float yAfter = y * ratio; setScrollTop(oldScrollTop + yAfter - y); + //make scroll panes wide enough to support scrolling cards into view + zoom = newScrollHeight / (getHeight() - staticHeight); + for (FScrollPane scrollPane : horzScrollPanes.keySet()) { + float minScrollWidth = scrollPane.getWidth() * zoom; + if (scrollPane.getScrollWidth() < minScrollWidth) { + scrollPane.setScrollWidth(minScrollWidth); + } + } + //adjust scroll left of all horizontal scroll panes to keep x position the same float startX = x; for (Entry> entry : horzScrollPanes.entrySet()) { FScrollPane horzScrollPane = entry.getKey(); float oldScrollLeft = entry.getValue().getLeft(); x = startX + oldScrollLeft; - float oldScrollWidth = entry.getValue().getRight(); - float newScrollWidth = horzScrollPane.getScrollWidth(); - float xAfter = x * newScrollWidth / oldScrollWidth; + float xAfter = x * ratio; horzScrollPane.setScrollLeft(oldScrollLeft + xAfter - x); } diff --git a/forge-gui-mobile/src/forge/toolbox/FScrollPane.java b/forge-gui-mobile/src/forge/toolbox/FScrollPane.java index 47983374705..46213af1341 100644 --- a/forge-gui-mobile/src/forge/toolbox/FScrollPane.java +++ b/forge-gui-mobile/src/forge/toolbox/FScrollPane.java @@ -40,10 +40,18 @@ public abstract class FScrollPane extends FContainer { return scrollBounds.width; } + public void setScrollWidth(float scrollWidth0) { + scrollBounds.width = scrollWidth0; + } + public float getScrollHeight() { return scrollBounds.height; } + public void setScrollHeight(float scrollHeight0) { + scrollBounds.height = scrollHeight0; + } + public float getMaxScrollLeft() { return getScrollWidth() - getWidth(); }