Skip to content

Commit 0460dc4

Browse files
committed
Add accelerator for scrollable menus
Press A when on a scrollable menu for a 6x acceleration
1 parent bfea272 commit 0460dc4

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

app/src/processing/app/tools/MenuScroller.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.awt.event.ActionListener;
1414
import java.awt.event.MouseWheelEvent;
1515
import java.awt.event.MouseWheelListener;
16+
import java.awt.event.KeyEvent;
1617

1718
/**
1819
* A class that provides scrolling capabilities to a long menu dropdown or
@@ -40,6 +41,7 @@ public class MenuScroller {
4041
private int bottomFixedCount;
4142
private int firstIndex = 0;
4243
private int keepVisibleIndex = -1;
44+
private int accelerator = 1;
4345

4446
/**
4547
* Registers a menu to be scrolled with the default number of items to
@@ -293,6 +295,25 @@ public MenuScroller(JPopupMenu menu, int scrollCount, int interval,
293295
this.menu = menu;
294296
menu.addPopupMenuListener(menuListener);
295297
menu.addMouseWheelListener(mouseWheelListener);
298+
299+
ActionListener accel = new ActionListener() {
300+
@Override
301+
public void actionPerformed(ActionEvent e) {
302+
accelerator = 6;
303+
}
304+
};
305+
306+
ActionListener decel = new ActionListener() {
307+
@Override
308+
public void actionPerformed(ActionEvent e) {
309+
accelerator = 1;
310+
}
311+
};
312+
313+
KeyStroke keystroke_accel = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false);
314+
KeyStroke keystroke_decel = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, true);
315+
menu.registerKeyboardAction(accel, "accel", keystroke_accel, JComponent.WHEN_IN_FOCUSED_WINDOW);
316+
menu.registerKeyboardAction(decel, "decel", keystroke_decel, JComponent.WHEN_IN_FOCUSED_WINDOW);
296317
}
297318

298319
/**
@@ -492,7 +513,7 @@ private int getMaximumDrawableMenuItems() {
492513

493514
private class MouseScrollListener implements MouseWheelListener {
494515
public void mouseWheelMoved(MouseWheelEvent mwe) {
495-
firstIndex += mwe.getWheelRotation();
516+
firstIndex += mwe.getWheelRotation() * accelerator;
496517
refreshMenu();
497518
mwe.consume();
498519
}
@@ -544,7 +565,7 @@ public MenuScrollTimer(final int increment, int interval) {
544565

545566
@Override
546567
public void actionPerformed(ActionEvent e) {
547-
firstIndex += increment;
568+
firstIndex += increment * accelerator;
548569
refreshMenu();
549570
}
550571
});

0 commit comments

Comments
 (0)