package org.geogebra.common.euclidian.smallscreen; import org.geogebra.common.euclidian.EuclidianView; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.geos.GeoButton; import org.geogebra.common.util.debug.Log; public class AdjustButton extends AdjustWidget { private static final int MARGIN_X = 5; static final int MARGIN_Y = 5; private GeoButton button; private int origX; private int origY; // private int origWidth; // private int origHeight; public AdjustButton(GeoButton button, EuclidianView view) { super(view); this.button = button; x = button.getAbsoluteScreenLocX(); y = button.getAbsoluteScreenLocY(); // origX = button.getOrigX() == null ? 0 : button.getOrigX(); // origY = button.getOrigY() == null ? 0 : button.getOrigY(); // origWidth = button.getOrigWidth() == null ? 0 : // button.getOrigWidth(); // origHeight = button.getOrigHeight() == null ? 0 // : button.getOrigHeight(); width = button.getWidth(); height = button.getHeight(); Log.debug(button.getLabelSimple() + " w: " + width + " h: " + height); } @Override public boolean isOnScreen() { return isXOnScreen() && isYOnScreen(); } /** * @return if button is on screen horizontally. */ public boolean isXOnScreen() { return Kernel.isEqual(x, origX) && x + width < view.getViewWidth(); } /** * @return if button is on screen vertically. */ public boolean isYOnScreen() { return Kernel.isEqual(y, origY) && y + height < view.getViewHeight(); } @Override public void apply() { if (isOnScreen()) { Log.debug( "[AS] Button " + button.getLabelSimple() + " is on screen"); return; } Log.debug("[AS] Button " + button.getLabelSimple() + " is NOT on screen"); int viewWidth = view.getViewWidth(); int viewHeight = view.getViewHeight(); if (width > viewWidth - MARGIN_X) { width = viewWidth - MARGIN_X; button.setWidth((int) width); } if (height > viewHeight - MARGIN_Y) { height = viewHeight - MARGIN_Y; button.setHeight((int) height); } boolean changed = false; if (x + width > viewWidth - MARGIN_X) { x = viewWidth - width - MARGIN_X; changed = true; } // if (y + height > viewHeight - MARGIN_Y) { // y = viewHeight - height - MARGIN_Y; // changed = true; // } if (changed) { button.setAbsoluteScreenLoc((int) x, (int) y); } } public static boolean isVerticallyOnScreen(GeoButton btn, EuclidianView view) { int y = btn.getAbsoluteScreenLocY(); int height = btn.getHeight(); return y + height < view.getViewHeight(); } }