org.gicentre.utils.move
Class ZoomPan

java.lang.Object
  extended by org.gicentre.utils.move.ZoomPan

public class ZoomPan
extends java.lang.Object

Class to allow interactive zooming and panning of the Processing display. To use, simply create a ZoomPan object in setup(), then call its transform() method at the start of draw(). Panning is controlled with the right mouse button dragging. Zooming is, by default, controlled with a left mouse drag up to zoom in, left-drag down to zoom out. Can also zoom in and out with the mouse wheel if present. Mouse actions can be filtered so that they only work if a modifier key is pressed (ALT, SHIFT or CONTROL) by calling the setMouseMask() method.

Version:
3.1, 18th February, 2011.
Author:
Jo Wood, giCentre, City University London.

Constructor Summary
ZoomPan(processing.core.PApplet aContext)
          Initialises the zooming and panning transformations for the given applet context.
ZoomPan(processing.core.PApplet aContext, processing.core.PGraphics graphics)
          Initialises the zooming and panning transformations for the given applet and graphics contexts.
 
Method Summary
 void addZoomPanListener(ZoomPanListener zoomPanListener)
          Adds a listener to be informed when some zooming or panning has finished.
 void allowPanButton(boolean allowPan)
          Determines whether or not panning is permitted via a button press.
 void allowZoomButton(boolean allowZoom)
          Determines whether or not zooming via a button press is permitted.
 processing.core.PVector getCoordToDisp(processing.core.PVector p)
          Transforms the given point from coordinate to display space.
 processing.core.PVector getDispToCoord(processing.core.PVector p)
          Transforms the given point from display to coordinate space.
 processing.core.PVector getMouseCoord()
          Reports the current mouse position in coordinate space.
 processing.core.PVector getPanOffset()
          Reports the current pan offset.
 double getZoomScale()
          Reports the current zoom scale.
 boolean isMouseCaptured()
          Reports whether a mouse event has been captured by the zoomer.
 boolean isPanning()
          Reports whether display is currently being panned (ie mouse is being dragged with pan key/button pressed).
 boolean isZooming()
          Reports whether display is currently being zoomed (i.e.
 void mouseEvent(java.awt.event.MouseEvent e)
          Updates zoom and pan transformation according to mouse activity.
 boolean removeZoomPanListener(ZoomPanListener zoomPanListener)
          Removes the given listener from those to be informed when zooming/panning has finished.
 void reset()
          Resets the display to unzoomed and unpanned position.
 void setMouseMask(int mouseMask)
          Sets the key that must be pressed before mouse actions are active.
 void setPanOffset(float panX, float panY)
          Sets a new pan offset.
 void setZoomMouseButton(int zoomMouseButton)
          Sets mouse button for zooming.
 void setZoomScale(double zoomScale)
          Sets a new zoom scale.
static void text(processing.core.PApplet applet, java.lang.String textToDisplay, float xPos, float yPos)
          Replacement for Processing's text() method for faster and more accurate placement of characters in Java2D mode when a zoomed font is to be displayed.
 void text(java.lang.String textToDisplay, float xPos, float yPos)
          Replacement for Processing's text() method for faster and more accurate placement of characters in Java2D mode when a zoomed font is to be displayed.
static void text2(processing.core.PApplet applet, java.lang.String textToDisplay, float xPos, float yPos)
          Deprecated. Should replace with the text() method of this class. The two methods are identical, but text2() is retained for backward naming compatibility only.
 void text2(java.lang.String textToDisplay, float xPos, float yPos)
          Deprecated. Should replace with the text() method of this class. The two methods are identical, but text2() is retained for backward naming compatibility only.
 void transform()
          Performs the zooming/panning transformation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ZoomPan

public ZoomPan(processing.core.PApplet aContext)
Initialises the zooming and panning transformations for the given applet context. Can be used to have independent zooming in multiple windows by creating multiple objects each with a different PApplet object.

Parameters:
aContext - Applet context in which zooming and panning are to take place.

ZoomPan

public ZoomPan(processing.core.PApplet aContext,
               processing.core.PGraphics graphics)
Initialises the zooming and panning transformations for the given applet and graphics contexts. This version of the constructor allows a graphics context separate from the applet to be applied so that buffered off-screen drawing can be applied.

Parameters:
aContext - Applet context in which zooming and panning are to take place.
graphics - Graphics context in which to draw.
Method Detail

transform

public void transform()
Performs the zooming/panning transformation. This method must be called at the start of the draw() method.


reset

public void reset()
Resets the display to unzoomed and unpanned position.


addZoomPanListener

public void addZoomPanListener(ZoomPanListener zoomPanListener)
Adds a listener to be informed when some zooming or panning has finished.

Parameters:
zoomPanListener - Listener to be informed when some zooming or panning has finished.

removeZoomPanListener

public boolean removeZoomPanListener(ZoomPanListener zoomPanListener)
Removes the given listener from those to be informed when zooming/panning has finished.

Parameters:
zoomPanListener - Listener to remove.
Returns:
True if listener found and removed.

setMouseMask

public void setMouseMask(int mouseMask)
Sets the key that must be pressed before mouse actions are active. By default, no key is needed for the mouse to be active. Specifying a value allows normal mouse actions to be intercepted without zooming or panning. To set the mouse mask to no key, specify a mouseMask value of 0. Mouse actions can be disabled entirely by setting the mouseMask to a negative value.

Parameters:
mouseMask - Keyboard modifier required to activate mouse actions. Valid values are CONTROL, SHIFT, ALT, 0 and -1.

getMouseCoord

public processing.core.PVector getMouseCoord()
Reports the current mouse position in coordinate space. This method should be used in preference to mouseX and mouseY if the current display has been zoomed or panned.

Returns:
Coordinates of current mouse position accounting for any zooming or panning.

getZoomScale

public double getZoomScale()
Reports the current zoom scale. Can be used for drawing objects that maintain their size when zooming.

Returns:
Current zoom scale.

setZoomScale

public void setZoomScale(double zoomScale)
Sets a new zoom scale. Can be used for programmatic control of zoomer, such as eased interpolated zooming.

Parameters:
zoomScale - New zoom scale. A value of 1 indicates no zooming, values above 0 and below 1 will shrink the display; values above 1 will enlarge the display. Values less than or equal to 0 will be ignored.

getPanOffset

public processing.core.PVector getPanOffset()
Reports the current pan offset. Useful when wishing to use an interpolated panning between this current value and some new pan offset.

Returns:
Current pan offset. Negative coordinates indicate an offset to the left or upwards, positive values to the right or downward.

setPanOffset

public void setPanOffset(float panX,
                         float panY)
Sets a new pan offset. Can be used for programmatic control of panning, such as eased interpolated zooming and panning.

Parameters:
panX - X coordinate of new pan offset. A value of 0 indicates no translation of the display on the horizontal axis; a negative value indicates a translation to the left; a positive value indicates translation to the right.
panY - Y coordinate of new pan offset. A value of 0 indicates no translation of the display on the vertical axis; a negative value indicates a translation upwards; a positive value indicates translation downwards.

isZooming

public boolean isZooming()
Reports whether display is currently being zoomed (i.e. mouse is being dragged with zoom key/button pressed).

Returns:
True if display is being actively zoomed.

isPanning

public boolean isPanning()
Reports whether display is currently being panned (ie mouse is being dragged with pan key/button pressed).

Returns:
True if display is being actively panned.

isMouseCaptured

public boolean isMouseCaptured()
Reports whether a mouse event has been captured by the zoomer. This allows zoom and pan events to be separated from other mouse actions. Usually only useful if the zoomer uses some mouse mask.

Returns:
True if mouse event has been captured by the zoomer.

allowZoomButton

public void allowZoomButton(boolean allowZoom)
Determines whether or not zooming via a button press is permitted. By default zooming is enabled with the appropriate mouse button, but can be disabled by setting allowZoom to false. Note that the scroll wheel will zoom whether or not the zoom button is activated.

Parameters:
allowZoom - Zooming permitted via mouse button press if true.

allowPanButton

public void allowPanButton(boolean allowPan)
Determines whether or not panning is permitted via a button press. By default panning is enabled with the appropriate mouse button, but can be disabled by setting allowPan to false.

Parameters:
allowPan - Panning permitted via mouse button press if true.

mouseEvent

public void mouseEvent(java.awt.event.MouseEvent e)
Updates zoom and pan transformation according to mouse activity.

Parameters:
e - Mouse event.

getDispToCoord

public processing.core.PVector getDispToCoord(processing.core.PVector p)
Transforms the given point from display to coordinate space. Display space is that which has been subjected to zooming and panning. Coordinate space is the original space into which objects have been placed before zooming and panning. For most drawing operations you should not need to use this method. It is available for those operations that do not draw directly, but need to know the transformation between coordinate and screen space.

Parameters:
p - 2D point in zoomed display space.
Returns:
Location of point in original coordinate space.

getCoordToDisp

public processing.core.PVector getCoordToDisp(processing.core.PVector p)
Transforms the given point from coordinate to display space. Display space is that which has been subjected to zooming and panning. Coordinate space is the original space into which objects have been placed before zooming and panning. For most drawing operations you should not need to use this method. It is available for those operations that do not draw directly, but need to know the transformation between coordinate and screen space.

Parameters:
p - 2D point in original coordinate space.
Returns:
Location of point in zoomed display space.

setZoomMouseButton

public void setZoomMouseButton(int zoomMouseButton)
Sets mouse button for zooming. If this is set to either LEFT or RIGHT, the other button (RIGHT or LEFT) will be set for panning.

Parameters:
zoomMouseButton - Zoom mouse button (must be either PConstants.LEFT or PConstants.RIGHT

text2

public void text2(java.lang.String textToDisplay,
                  float xPos,
                  float yPos)
Deprecated. Should replace with the text() method of this class. The two methods are identical, but text2() is retained for backward naming compatibility only.

Replacement for Processing's text() method for faster and more accurate placement of characters in Java2D mode when a zoomed font is to be displayed. This method is not necessary when text is not subject to scaling via zooming, nor is is necessary in P2D, P3D or OpenGL modes.

Parameters:
textToDisplay - Text to be displayed.
xPos - x-position of the the text to display in original unzoomed screen coordinates.
yPos - y-position of the the text to display in original unzoomed screen coordinates.

text

public void text(java.lang.String textToDisplay,
                 float xPos,
                 float yPos)
Replacement for Processing's text() method for faster and more accurate placement of characters in Java2D mode when a zoomed font is to be displayed. This method is not necessary when text is not subject to scaling via zooming, nor is is necessary in P2D, P3D or OpenGL modes.

Parameters:
textToDisplay - Text to be displayed.
xPos - x-position of the the text to display in original unzoomed screen coordinates.
yPos - y-position of the the text to display in original unzoomed screen coordinates.

text2

public static void text2(processing.core.PApplet applet,
                         java.lang.String textToDisplay,
                         float xPos,
                         float yPos)
Deprecated. Should replace with the text() method of this class. The two methods are identical, but text2() is retained for backward naming compatibility only.

Replacement for Processing's text() method for faster and more accurate placement of characters in Java2D mode when a zoomed font is to be displayed. This version does not require a ZoomPan object to be instantiated but does need the PApplet context to be provided. As with the other text2() method it is not necessary to call this method if the text is not subject to scaling via zooming, nor is is necessary in P2D, P3D or OpenGL modes.

Parameters:
applet - Sketch in which text is to be drawn.
textToDisplay - Text to be displayed.
xPos - x-position of the the text to display in original unzoomed screen coordinates.
yPos - y-position of the the text to display in original unzoomed screen coordinates.

text

public static void text(processing.core.PApplet applet,
                        java.lang.String textToDisplay,
                        float xPos,
                        float yPos)
Replacement for Processing's text() method for faster and more accurate placement of characters in Java2D mode when a zoomed font is to be displayed. This version does not require a ZoomPan object to be instantiated but does need the PApplet context to be provided. As with the other text2() method it is not necessary to call this method if the text is not subject to scaling via zooming, nor is is necessary in P2D, P3D or OpenGL modes.

Parameters:
applet - Sketch in which text is to be drawn.
textToDisplay - Text to be displayed.
xPos - x-position of the the text to display in original unzoomed screen coordinates.
yPos - y-position of the the text to display in original unzoomed screen coordinates.


gicentreUtils V.3.1, API documentation generated 18th February, 2011