Improve horizontal zoom accuracy

This commit is contained in:
drdev
2014-05-17 20:37:15 +00:00
parent 1e5986e0ac
commit 3d32f868a1
2 changed files with 20 additions and 4 deletions

View File

@@ -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<FScrollPane, Pair<Float, Float>> 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);
}

View File

@@ -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();
}