3939import java .awt .event .MouseAdapter ;
4040import java .awt .event .MouseListener ;
4141import java .awt .event .MouseMotionListener ;
42+ import java .awt .event .MouseWheelEvent ;
43+ import java .awt .event .MouseWheelListener ;
4244import java .awt .event .WindowAdapter ;
4345import java .awt .event .WindowEvent ;
4446import java .awt .image .*;
153155 */
154156public class PApplet extends Applet
155157 implements PConstants , Runnable ,
156- MouseListener , MouseMotionListener , KeyListener , FocusListener
158+ MouseListener , MouseWheelListener , MouseMotionListener , KeyListener , FocusListener
157159{
158160 /**
159161 * Full name of the Java version (i.e. 1.5.0_11).
@@ -2428,6 +2430,7 @@ synchronized public void noLoop() {
24282430
24292431 public void addListeners (Component comp ) {
24302432 comp .addMouseListener (this );
2433+ comp .addMouseWheelListener (this );
24312434 comp .addMouseMotionListener (this );
24322435 comp .addKeyListener (this );
24332436 comp .addFocusListener (this );
@@ -2451,6 +2454,7 @@ public void addListeners(Component comp) {
24512454
24522455 public void removeListeners (Component comp ) {
24532456 comp .removeMouseListener (this );
2457+ comp .removeMouseWheelListener (this );
24542458 comp .removeMouseMotionListener (this );
24552459 comp .removeKeyListener (this );
24562460 comp .removeFocusListener (this );
@@ -2685,6 +2689,9 @@ protected void handleMouseEvent(MouseEvent event) {
26852689 case MouseEvent .EXIT :
26862690 mouseExited (event );
26872691 break ;
2692+ case MouseEvent .WHEEL :
2693+ mouseWheel (event );
2694+ break ;
26882695 }
26892696
26902697 if ((event .getAction () == MouseEvent .DRAG ) ||
@@ -2695,12 +2702,30 @@ protected void handleMouseEvent(MouseEvent event) {
26952702 }
26962703
26972704
2705+ static protected Method preciseWheelMethod ;
2706+ static {
2707+ // Class<?> callbackClass = callbackObject.getClass();
2708+ // Method selectMethod =
2709+ // callbackClass.getMethod(callbackMethod, new Class[] { File.class });
2710+ // selectMethod.invoke(callbackObject, new Object[] { selectedFile });
2711+ try {
2712+ preciseWheelMethod = MouseWheelEvent .class .getMethod ("getPreciseWheelRotation" , new Class [] { });
2713+ } catch (Exception e ) {
2714+ // ignored, the method will just be set to null
2715+ }
2716+ }
2717+
2718+
26982719 /**
26992720 * Figure out how to process a mouse event. When loop() has been
27002721 * called, the events will be queued up until drawing is complete.
27012722 * If noLoop() has been called, then events will happen immediately.
27022723 */
27032724 protected void nativeMouseEvent (java .awt .event .MouseEvent nativeEvent ) {
2725+ // the 'amount' is the number of button clicks for a click event,
2726+ // or the number of steps/clicks on the wheel for a mouse wheel event.
2727+ float peAmount = nativeEvent .getClickCount ();
2728+
27042729 int peAction = 0 ;
27052730 switch (nativeEvent .getID ()) {
27062731 case java .awt .event .MouseEvent .MOUSE_PRESSED :
@@ -2724,6 +2749,19 @@ protected void nativeMouseEvent(java.awt.event.MouseEvent nativeEvent) {
27242749 case java .awt .event .MouseEvent .MOUSE_EXITED :
27252750 peAction = MouseEvent .EXIT ;
27262751 break ;
2752+ case java .awt .event .MouseWheelEvent .WHEEL_UNIT_SCROLL :
2753+ peAction = MouseEvent .WHEEL ;
2754+ if (preciseWheelMethod != null ) {
2755+ try {
2756+ peAmount = ((Double ) preciseWheelMethod .invoke (nativeEvent , (Object []) null )).floatValue ();
2757+ } catch (Exception e ) {
2758+ preciseWheelMethod = null ;
2759+ }
2760+ }
2761+ if (preciseWheelMethod == null ) {
2762+ peAmount = ((MouseWheelEvent ) nativeEvent ).getWheelRotation ();
2763+ }
2764+ break ;
27272765 }
27282766
27292767 //System.out.println(nativeEvent);
@@ -2776,7 +2814,7 @@ protected void nativeMouseEvent(java.awt.event.MouseEvent nativeEvent) {
27762814 peAction , peModifiers ,
27772815 nativeEvent .getX (), nativeEvent .getY (),
27782816 peButton ,
2779- nativeEvent . getClickCount () ));
2817+ peAmount ));
27802818 }
27812819
27822820
@@ -2840,6 +2878,14 @@ public void mouseMoved(java.awt.event.MouseEvent e) {
28402878 }
28412879
28422880
2881+ /**
2882+ * @nowebref
2883+ */
2884+ public void mouseWheelMoved (java .awt .event .MouseWheelEvent e ) {
2885+ nativeMouseEvent (e );
2886+ }
2887+
2888+
28432889 /**
28442890 * ( begin auto-generated from mousePressed.xml )
28452891 *
@@ -2987,6 +3033,14 @@ public void mouseExited(MouseEvent event) {
29873033 }
29883034
29893035
3036+ public void mouseWheel () { }
3037+
3038+
3039+ public void mouseWheel (MouseEvent event ) {
3040+ mouseWheel ();
3041+ }
3042+
3043+
29903044
29913045 //////////////////////////////////////////////////////////////
29923046
0 commit comments