/** * @author rhertzfeldt * @lastChange 10:24:04 PM */ package de.juwimm.cms.content.panel; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.media.jai.PlanarImage; import javax.swing.Scrollable; import javax.swing.SwingConstants; import com.sun.media.jai.widget.DisplayJAI; /** * @author rhertzfeldt * */ public class PanDisplayJAIScrollable extends DisplayJAI implements Scrollable, MouseMotionListener{ private static final long serialVersionUID = 5910342592700583388L; private int maxUnitIncrement = 1; /** * @param picture * @param width */ public PanDisplayJAIScrollable(PlanarImage picture, int width) { super(picture); maxUnitIncrement = width; setAutoscrolls(true); addMouseMotionListener(this); addMouseListener(this); } /** * @return the maxUnitIncrement */ public int getMaxUnitIncrement() { return maxUnitIncrement; } public Dimension getPreferredScrollableViewportSize() { return getPreferredSize(); } public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { //Get the current position. int currentPosition = 0; if (orientation == SwingConstants.HORIZONTAL) { currentPosition = visibleRect.x; } else { currentPosition = visibleRect.y; } //Return the number of pixels between currentPosition //and the nearest tick mark in the indicated direction. if (direction < 0) { int newPosition = currentPosition - (currentPosition / maxUnitIncrement) * maxUnitIncrement; return (newPosition == 0) ? maxUnitIncrement : newPosition; } else { return ((currentPosition / maxUnitIncrement) + 1) * maxUnitIncrement - currentPosition; } } public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { if (orientation == SwingConstants.HORIZONTAL) { return visibleRect.width - maxUnitIncrement; } else { return visibleRect.height - maxUnitIncrement; } } public boolean getScrollableTracksViewportWidth() { return false; } public boolean getScrollableTracksViewportHeight() { return false; } public void setMaxUnitIncrement(int pixels) { maxUnitIncrement = pixels; } public void mouseDragged(MouseEvent e) { Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1); scrollRectToVisible(r); } public void mouseMoved(MouseEvent e) { } }