All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.uci.ics.jung.visualization.control.ScalingGraphMousePlugin Maven / Gradle / Ivy

/*
 * Copyright (c) 2005, The JUNG Authors
 *
 * All rights reserved.
 *
 * This software is open-source under the BSD license; see either
 * "license.txt" or
 * https://github.com/jrtom/jung/blob/master/LICENSE for a description.
 * Created on Mar 8, 2005
 *
 */
package edu.uci.ics.jung.visualization.control;

import edu.uci.ics.jung.visualization.VisualizationViewer;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.geom.Point2D;

/**
 * ScalingGraphMouse applies a scaling transformation to the graph layout. The Nodes get closer or
 * farther apart, but do not themselves change layoutSize. ScalingGraphMouse uses MouseWheelEvents
 * to apply the scaling.
 *
 * @author Tom Nelson
 */
public class ScalingGraphMousePlugin extends AbstractGraphMousePlugin
    implements MouseWheelListener {

  /** the amount to zoom in by */
  protected float in = 1.1f;
  /** the amount to zoom out by */
  protected float out = 1 / 1.1f;

  /** whether to center the zoom at the current mouse position */
  protected boolean zoomAtMouse = true;

  /** controls scaling operations */
  protected ScalingControl scaler;

  public ScalingGraphMousePlugin(ScalingControl scaler, int modifiers) {
    this(scaler, modifiers, 1.1f, 1 / 1.1f);
  }

  public ScalingGraphMousePlugin(ScalingControl scaler, int modifiers, float in, float out) {
    super(modifiers);
    this.scaler = scaler;
    this.in = in;
    this.out = out;
  }
  /** @param zoomAtMouse The zoomAtMouse to set. */
  public void setZoomAtMouse(boolean zoomAtMouse) {
    this.zoomAtMouse = zoomAtMouse;
  }

  public boolean checkModifiers(MouseEvent e) {
    return e.getModifiers() == modifiers || (e.getModifiers() & modifiers) != 0;
  }

  /** zoom the display in or out, depending on the direction of the mouse wheel motion. */
  public void mouseWheelMoved(MouseWheelEvent e) {
    boolean accepted = checkModifiers(e);
    if (accepted == true) {
      VisualizationViewer vv = (VisualizationViewer) e.getSource();
      Point2D mouse = e.getPoint();
      Point2D center = vv.getCenter();
      int amount = e.getWheelRotation();
      if (zoomAtMouse) {
        if (amount > 0) {
          scaler.scale(vv, in, mouse);
        } else if (amount < 0) {
          scaler.scale(vv, out, mouse);
        }
      } else {
        if (amount > 0) {
          scaler.scale(vv, in, center);
        } else if (amount < 0) {
          scaler.scale(vv, out, center);
        }
      }
      e.consume();
      vv.repaint();
    }
  }
  /** @return Returns the zoom in value. */
  public float getIn() {
    return in;
  }
  /** @param in The zoom in value to set. */
  public void setIn(float in) {
    this.in = in;
  }
  /** @return Returns the zoom out value. */
  public float getOut() {
    return out;
  }
  /** @param out The zoom out value to set. */
  public void setOut(float out) {
    this.out = out;
  }

  public ScalingControl getScaler() {
    return scaler;
  }

  public void setScaler(ScalingControl scaler) {
    this.scaler = scaler;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy