/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.callgraph.graphlisteners;
import org.eclipse.linuxtools.internal.callgraph.StapGraph;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
public class StapGraphMouseMoveListener implements MouseMoveListener {
private StapGraph graph;
private int prevX;
private int prevY;
private static final int INIT = -20000;
private boolean stop;
private boolean showMessage;
public StapGraphMouseMoveListener(StapGraph graph) {
this.graph = graph;
prevX = INIT;
prevY = INIT;
showMessage = true;
}
public void setPoint(int x, int y) {
prevX = x;
prevY = y;
}
public void setStop(boolean val) {
stop = val;
}
@Override
public void mouseMove(MouseEvent e) {
//-------------Panning
//TODO: Implement panning at this zoom and mode
//For some reason getting rid of some of the /scale's in drawTree
//Will fix panning, but at the cost of making the drawTree zoom look weird
if (graph.getDrawMode() == StapGraph.CONSTANT_DRAWMODE_TREE) {
// if (graph.scale < 0.63) {
if (showMessage) {
// SystemTapUIErrorMessages mess = new SystemTapUIErrorMessages(
// Messages.StapGraphMouseMoveListener_0, Messages.StapGraphMouseMoveListener_1,
// Messages.StapGraphMouseMoveListener_2);
// mess.schedule();
showMessage = false;
}
return;
}
//Initialize
if (prevX == INIT && prevY == INIT) {
prevX = e.x;
prevY = e.y;
return;
}
if (!stop) {
int yDiff, xDiff;
xDiff = prevX - e.x;
yDiff = prevY - e.y;
if (graph.scale > 1) {
graph.scrollSmoothBy((int) (xDiff/graph.scale), (int) (yDiff/graph.scale));
} else {
graph.scrollSmoothBy(xDiff, yDiff);
}
prevX = e.x;
prevY = e.y;
}
}
}