diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 712205716..308ef17f2 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1843,6 +1843,17 @@ public class Base { dialog.setVisible(true); } + /** + * Adjust font size + */ + public void handleFontSizeChange(int change) { + String pieces[] = PApplet.split(PreferencesData.get("editor.font"), ','); + int newSize = Integer.parseInt(pieces[2]) + change; + pieces[2] = String.valueOf(newSize); + PreferencesData.set("editor.font", PApplet.join(pieces, ',')); + this.getEditors().forEach(processing.app.Editor::applyPreferences); + } + // XXX: Remove this method and make librariesIndexer non-static static public LibraryList getLibraries() { return BaseNoGui.librariesIndexer.getInstalledLibraries(); diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 8bf415385..71ecc5343 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -1375,6 +1375,24 @@ public class Editor extends JFrame implements RunnerListener { menu.addSeparator(); + JMenuItem increaseFontSizeItem = newJMenuItem(tr("Increase Font Size"), '+'); + increaseFontSizeItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + base.handleFontSizeChange(1); + } + }); + menu.add(increaseFontSizeItem); + + JMenuItem decreaseFontSizeItem = newJMenuItem(tr("Decrease Font Size"), '-'); + decreaseFontSizeItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + base.handleFontSizeChange(-1); + } + }); + menu.add(decreaseFontSizeItem); + + menu.addSeparator(); + JMenuItem findItem = newJMenuItem(tr("Find..."), 'F'); findItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { diff --git a/app/src/processing/app/EditorTab.java b/app/src/processing/app/EditorTab.java index eab701d80..33dabdbbb 100644 --- a/app/src/processing/app/EditorTab.java +++ b/app/src/processing/app/EditorTab.java @@ -30,6 +30,9 @@ import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseWheelListener; +import java.awt.event.MouseWheelEvent; + import java.io.IOException; import javax.swing.Action; @@ -64,7 +67,7 @@ import processing.app.tools.DiscourseFormat; /** * Single tab, editing a single file, in the main window. */ -public class EditorTab extends JPanel implements SketchFile.TextStorage { +public class EditorTab extends JPanel implements SketchFile.TextStorage, MouseWheelListener { protected Editor editor; protected SketchTextArea textarea; protected RTextScrollPane scrollPane; @@ -106,6 +109,7 @@ public class EditorTab extends JPanel implements SketchFile.TextStorage { file.setStorage(this); applyPreferences(); add(scrollPane, BorderLayout.CENTER); + textarea.addMouseWheelListener(this); } private RSyntaxDocument createDocument(String contents) { @@ -178,6 +182,18 @@ public class EditorTab extends JPanel implements SketchFile.TextStorage { return textArea; } + public void mouseWheelMoved(MouseWheelEvent e) { + if (e.isControlDown()) { + if (e.getWheelRotation() < 0) { + editor.base.handleFontSizeChange(1); + } else { + editor.base.handleFontSizeChange(-1); + } + } else { + e.getComponent().getParent().dispatchEvent(e); + } + } + private void configurePopupMenu(final SketchTextArea textarea){ JPopupMenu menu = textarea.getPopupMenu();