/*******************************************************************************
* 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.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseWheelListener;
/**
* Allows the user to zoom when CTRL + mouse wheel is used
*
*/
public class StapGraphMouseWheelListener implements MouseWheelListener {
private StapGraph graph;
public StapGraphMouseWheelListener(StapGraph g) {
this.graph = g;
}
@Override
public void mouseScrolled(MouseEvent e) {
if (e.stateMask != SWT.CTRL) {
// Scrolling
if (e.count > 0) {
AutoScrollHelper.scrollUp(graph);
} else {
AutoScrollHelper.scrollDown(graph);
}
return;
}
if (graph.getDrawMode() != StapGraph.CONSTANT_DRAWMODE_LEVEL &&
graph.getDrawMode() != StapGraph.CONSTANT_DRAWMODE_TREE) {
return;
}
if (e.count <= 0) {
if (graph.scale < 2){
graph.scale /= (10.0 / 11.0);
}else{
graph.scale = (int)graph.scale + 1;
}
}else {
if (graph.scale <= 2){
graph.scale *= (10.0 / 11.0);
} else {
graph.scale = (int) graph.scale - 1;
}
}
int currentAnimationMode = graph.getAnimationMode();
graph.draw(graph.getDrawMode(), StapGraph.CONSTANT_ANIMATION_FASTEST,
graph.getRootVisibleNodeNumber());
graph.setAnimationMode(currentAnimationMode);
int realeX = 3 * (int)(e.x / graph.scale);
int realeY = 3 * (int)(e.y / graph.scale);
int xDiff = (realeX - graph.getSize().x);
int yDiff = (realeY - graph.getSize().y);
graph.scrollTo(realeX + xDiff, realeY - yDiff);
}
}