SCViewer/plugins/com.minres.scviewer.databas.../src/com/minres/scviewer/database/ui/swt/sb/FastDecrementer.java

49 lines
1.2 KiB
Java

package com.minres.scviewer.database.ui.swt.sb;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import com.minres.scviewer.database.ui.swt.sb.ClickControl.ClickAction;
class FastDecrementer implements ClickAction {
private final FlatScrollBar scrollBar;
private int x;
private int y;
FastDecrementer( FlatScrollBar scrollBar ) {
this.scrollBar = scrollBar;
}
@Override
public void run() {
Rectangle drag = getDragBounds();
Point mouse = getMouseLocation();
if( mouse.x <= drag.x || mouse.y <= drag.y ) {
int selection = scrollBar.getSelection() - scrollBar.getPageIncrement();
scrollBar.setSelectionInternal( selection, SWT.PAGE_UP );
}
}
@Override
public void setCoordinates( int x, int y ) {
this.x = x;
this.y = y;
}
private Point getMouseLocation() {
return getDisplay().map( scrollBar.upFast.getControl(), null, x, y );
}
private Rectangle getDragBounds() {
Rectangle dragBounds = scrollBar.drag.getControl().getBounds();
return getDisplay().map( scrollBar, null, dragBounds );
}
private Display getDisplay() {
return scrollBar.getDisplay();
}
}