package ch.unifr.pai.twice.mousecontrol.client;
/*
* Copyright 2013 Oliver Schmid
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ScrollPanel;
/**
* An implementation of the mouse pointer control based on scroll. This is e.g. required for e-readers or other rather exotic devices which are not providing
* appropriate mouse and / or touch events.
*
* @author Oliver Schmid
*
*/
public class TouchPadScrollWidget extends TouchPadWidget {
private final HTML spacer = new HTML();
private final ScrollPanel scroller = new ScrollPanel();
Timer updater;
int currentScreenX;
int currentScreenY;
public TouchPadScrollWidget() {
super(false);
scroller.setHeight("100%");
scroller.setWidth("100%");
add(scroller);
scroller.add(spacer);
updater = new Timer() {
@Override
public void run() {
currentScreenX = spacer.getOffsetWidth() - scroller.getHorizontalScrollPosition() - scroller.getOffsetWidth();
currentScreenY = spacer.getOffsetHeight() - scroller.getVerticalScrollPosition() - scroller.getOffsetHeight();
}
};
}
/*
* (non-Javadoc)
* @see ch.unifr.pai.twice.mousecontrol.client.TouchPadWidget#getX()
*/
@Override
protected int getX() {
return currentScreenX;
}
/*
* (non-Javadoc)
* @see ch.unifr.pai.twice.mousecontrol.client.TouchPadWidget#getY()
*/
@Override
protected int getY() {
return currentScreenY;
}
/*
* (non-Javadoc)
* @see ch.unifr.pai.twice.mousecontrol.client.TouchPadWidget#updateScreenDimensions()
*/
@Override
protected void updateScreenDimensions() {
spacer.setWidth((scroller.getOffsetWidth() + screenWidth) + "px");
spacer.setHeight((scroller.getOffsetHeight() + screenHeight) + "px");
}
/*
* (non-Javadoc)
* @see ch.unifr.pai.twice.mousecontrol.client.TouchPadWidget#start()
*/
@Override
public void start() {
super.start();
updater.scheduleRepeating(MOVEMENTUPDATEINTERVAL);
}
/*
* (non-Javadoc)
* @see ch.unifr.pai.twice.mousecontrol.client.TouchPadWidget#stop()
*/
@Override
public void stop() {
super.stop();
updater.cancel();
}
}