package org.geogebra.web.touch.gui.layout;
import org.geogebra.web.web.gui.layout.SplitterImpl;
import org.geogebra.web.web.gui.layout.ZoomSplitLayoutPanel.Splitter;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.layout.client.Layout.Layer;
import com.google.gwt.user.client.Event;
/**
* Override splitter behavior on touch devices: add glass dragging zone
*
*/
public class SplitterImplTouch extends SplitterImpl {
private Element mainDivElement;
private Element glassDivElement;
private static final int GLASS_SIZE = 30;
@Override
public Element createElement(Splitter splitter) {
super.createElement(splitter);
createElements();
return baseDivElement;
}
private void createElements() {
mainDivElement = Document.get().createDivElement();
glassDivElement = Document.get().createDivElement();
glassDivElement.appendChild(mainDivElement);
baseDivElement.appendChild(glassDivElement);
}
@Override
public boolean shouldHandleEvent(Event event, boolean mouseDown) {
if (mouseDown) {
return true;
}
switch (event.getTypeInt()) {
case Event.ONMOUSEDOWN:
case Event.ONMOUSEMOVE:
case Event.ONMOUSEUP:
EventTarget tg = event.getEventTarget();
if (Element.is(tg) && (Element.as(tg) == glassDivElement)) {
return false;
}
break;
}
return true;
}
@Override
public void setToHorizontal(int splitterSize) {
mainDivElement.addClassName("gwt-SplitLayoutPanel-HDragger");
Style mainDivStyle = mainDivElement.getStyle();
mainDivStyle.setPropertyPx("width", splitterSize);
mainDivStyle.setProperty("height", "100%");
mainDivStyle.setProperty("position", "absolute");
mainDivStyle.setLeft(15, Unit.PX);
Style glassDivStyle = glassDivElement.getStyle();
glassDivStyle.setProperty("width", (splitterSize + GLASS_SIZE) + "px");
glassDivStyle.setProperty("height", "100%");
glassDivStyle.setProperty("position", "absolute");
glassDivStyle.setProperty("left", (-((GLASS_SIZE) / 2)) + "px");
glassDivStyle.setZIndex(10);
}
@Override
public void setToVertical(int splitterSize) {
mainDivElement.addClassName("gwt-SplitLayoutPanel-VDragger");
Style mainDivStyle = mainDivElement.getStyle();
mainDivStyle.setPropertyPx("height", splitterSize);
mainDivStyle.setProperty("width", "100%");
mainDivStyle.setProperty("position", "absolute");
mainDivStyle.setTop(15, Unit.PX);
Style glassDivStyle = glassDivElement.getStyle();
glassDivStyle.setProperty("height", (splitterSize + GLASS_SIZE) + "px");
glassDivStyle.setProperty("width", "100%");
glassDivStyle.setProperty("position", "absolute");
glassDivStyle.setProperty("top", (-((GLASS_SIZE) / 2)) + "px");
glassDivStyle.setZIndex(10);
}
@Override
public void splitterInsertedIntoLayer(Layer layer) {
layer.getContainerElement().getStyle().setOverflow(Overflow.VISIBLE);
}
@Override
public Element getSplitterElement() {
return mainDivElement;
}
}