Package prefuse.controls

Source Code of prefuse.controls.RotationControl

package prefuse.controls;

import java.awt.Cursor;
import java.awt.Point;
import java.awt.event.MouseEvent;

import prefuse.Display;
import prefuse.util.ui.UILib;


/**
* Control that can be used to rotate the display. This results in a
* transformation of the display itself, such that all aspects are
* rotated. For example, after a rotation of 180 degrees, upright
* text strings will subsequently upside down. To rotate item positions
* but leave other aspects such as orientation intact, you can
* instead create a new {@link prefuse.action.Action} module that rotates
* just the item co-ordinates.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class RotationControl extends ControlAdapter {

    private Point down = new Point();
    private double baseAngle = 0; // the baseline angle of the rotation
    private int m_button;         // the mouse button to use
   
    /**
     * Create a new RotateControl. Rotations will be initiated by dragging
     * the mouse with the left mouse button pressed.
     */
    public RotationControl() {
        this(Control.LEFT_MOUSE_BUTTON);
    }
   
    /**
     * Create a new RotateControl
     * @param mouseButton the mouse button that should initiate a rotation. One
     * of {@link Control#LEFT_MOUSE_BUTTON},
     * {@link Control#MIDDLE_MOUSE_BUTTON}, or
     * {@link Control#RIGHT_MOUSE_BUTTON}.
     */
    public RotationControl(int mouseButton) {
        m_button = mouseButton;
    }
   
    /**
     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
     */
    public void mousePressed(MouseEvent e) {
        if ( UILib.isButtonPressed(e, m_button) ) {
            Display display = (Display)e.getComponent();
            display.setCursor(
                Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
            down.setLocation(e.getPoint());
            baseAngle = Double.NaN;
        }
    }
   
    /**
     * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
     */
    public void mouseDragged(MouseEvent e) {
        if ( UILib.isButtonPressed(e, m_button) ) {
            int dy = e.getY() - down.y;
            int dx = e.getX() - down.x;
            double angle = Math.atan2(dy, dx);
           
            // only rotate once the base angle has been established
            if ( !Double.isNaN(baseAngle) ) {
                Display display = (Display)e.getComponent();
                display.rotate(down, angle-baseAngle);
            }
            baseAngle = angle;
        }
    }
   
    /**
     * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
     */
    public void mouseReleased(MouseEvent e) {
        if ( UILib.isButtonPressed(e, m_button) ) {
            e.getComponent().setCursor(Cursor.getDefaultCursor());
        }
    }
   
} // end of class RotationControl
TOP

Related Classes of prefuse.controls.RotationControl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.