package com.gwt.ui.client;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
public class SimpleWindowResizer implements MouseDownHandler, MouseUpHandler, MouseOverHandler, MouseMoveHandler, MouseOutHandler {
private SimpleWindow simpleWindow;
private int xoffset;
private int yoffset;
private boolean isResizing;
public SimpleWindowResizer(SimpleWindow simpleWindow) {
this.simpleWindow = simpleWindow;
}
@Override
public void onMouseDown(MouseDownEvent event) {
xoffset = event.getRelativeX(event.getRelativeElement());
yoffset = event.getRelativeY(event.getRelativeElement());
isResizing = true;
}
@Override
public void onMouseUp(MouseUpEvent event) {
// turn off resizing, and release event capturing
isResizing = false;
DOM.releaseCapture((Element)event.getRelativeElement());
}
@Override
public void onMouseOver(MouseOverEvent event) {
// add a css style to the window that changes the cursor
// turn on event capturing
simpleWindow.addStyleName("simpleWindow-seResizeCursor");
DOM.setCapture((Element)event.getRelativeElement());
}
@Override
public void onMouseMove(MouseMoveEvent event) {
if (isResizing) {
// calculate the new width and height of the window
// and call the window's setPixelSize method. Also
// call the windowResized to notify the window
// that its size has changed
int newW = simpleWindow.getOffsetWidth() + event.getRelativeX(event.getRelativeElement()) - xoffset;
int newH = simpleWindow.getOffsetHeight() + event.getRelativeY(event.getRelativeElement()) - yoffset;
simpleWindow.setPixelSize(newW, newH);
}
}
@Override
public void onMouseOut(MouseOutEvent arg0) {
// Return the Window's CSS styles to what they were
// before the resize started
simpleWindow.removeStyleName("simpleWindow-seResizeCursors");
}
}