Skip to content

Commit e2cbecc

Browse files
committed
Add keybinds to change editor font size
1 parent 9358cbf commit e2cbecc

File tree

6 files changed

+83
-15
lines changed

6 files changed

+83
-15
lines changed

src/main/java/me/coley/recaf/config/ConfKeybinding.java

+16
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,22 @@ public class ConfKeybinding extends Config {
8888
Binding.from(KeyCode.CONTROL, KeyCode.Q), // META + Q on Mac closes the window so probably not a great idea
8989
BindingCreator.OSBinding.from(OSUtil.MAC, Binding.from(KeyCode.META, KeyCode.A))
9090
).buildKeyBindingForCurrentOS();
91+
/**
92+
* Increase editor font size.
93+
*/
94+
@Conf("binding.incfontsize")
95+
public Binding incFontSize = BindingCreator.from(
96+
Binding.from(KeyCode.CONTROL, KeyCode.EQUALS),
97+
BindingCreator.OSBinding.from(OSUtil.MAC, Binding.from(KeyCode.META, KeyCode.EQUALS))
98+
).buildKeyBindingForCurrentOS();
99+
/**
100+
* Decrease editor font size.
101+
*/
102+
@Conf("binding.decfontsize")
103+
public Binding decFontSize = BindingCreator.from(
104+
Binding.from(KeyCode.CONTROL, KeyCode.MINUS),
105+
BindingCreator.OSBinding.from(OSUtil.MAC, Binding.from(KeyCode.META, KeyCode.MINUS))
106+
).buildKeyBindingForCurrentOS();
91107

92108
/**
93109
* Track if the user is updating a keybind, so if when they are and they hit a key that is bound,

src/main/java/me/coley/recaf/ui/controls/FontSlider.java

+30-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import javafx.scene.Scene;
44
import javafx.scene.control.Slider;
55
import me.coley.recaf.Recaf;
6+
import me.coley.recaf.config.ConfigManager;
67
import me.coley.recaf.config.FieldWrapper;
78
import me.coley.recaf.control.gui.GuiController;
89
import org.apache.commons.io.FileUtils;
@@ -19,6 +20,8 @@
1920
*/
2021
public class FontSlider extends Slider {
2122
private static final File FONT_SIZE_CSS = Recaf.getDirectory("style").resolve("font-size.css").toFile();
23+
private static final int FONT_SIZE_MIN = 10;
24+
private static final int FONT_SIZE_MAX = 16;
2225

2326
/**
2427
* @param controller
@@ -27,8 +30,8 @@ public class FontSlider extends Slider {
2730
* Font size field wrapper.
2831
*/
2932
public FontSlider(GuiController controller, FieldWrapper wrapper) {
30-
setMin(10);
31-
setMax(16);
33+
setMin(FONT_SIZE_MIN);
34+
setMax(FONT_SIZE_MAX);
3235
setMajorTickUnit(1);
3336
setMinorTickCount(0);
3437
setShowTickMarks(true);
@@ -47,21 +50,44 @@ public FontSlider(GuiController controller, FieldWrapper wrapper) {
4750
}));
4851
}
4952

53+
/**
54+
* Clamps the font size so that it doesn't go out of bounds.
55+
* @param configManager
56+
* ConfigManager to update.
57+
*/
58+
private static void clampFontSize(ConfigManager configManager) {
59+
if(configManager.display().uiFontSize > FONT_SIZE_MAX)
60+
configManager.display().uiFontSize = FONT_SIZE_MAX;
61+
62+
if(configManager.display().uiFontSize < FONT_SIZE_MIN)
63+
configManager.display().uiFontSize = FONT_SIZE_MIN;
64+
65+
if(configManager.display().monoFontSize > FONT_SIZE_MAX)
66+
configManager.display().monoFontSize = FONT_SIZE_MAX;
67+
68+
if(configManager.display().monoFontSize < FONT_SIZE_MIN)
69+
configManager.display().monoFontSize = FONT_SIZE_MIN;
70+
}
71+
5072
/**
5173
* Update's the font-size override sheet and reapplies styles to open windows.
5274
*
5375
* @param controller
5476
* Controller to update.
5577
*/
56-
private static void update(GuiController controller) {
78+
public static void update(GuiController controller) {
5779
try {
80+
clampFontSize(controller.config());
81+
5882
double uiFontSize = controller.config().display().uiFontSize;
5983
double monoFontSize = controller.config().display().monoFontSize;
84+
6085
String css = ".root { -fx-font-size: " + uiFontSize + "px; }\n" +
6186
".lineno { -fx-font-size: " + uiFontSize + "px; }\n" +
6287
".h1 { -fx-font-size: " + (uiFontSize + 5) + "px; }\n" +
6388
".h2 { -fx-font-size: " + (uiFontSize + 3) + "px; }\n" +
64-
".monospaced { -fx-font-size: " + monoFontSize + "px; }\n";
89+
".monospaced { -fx-font-size: " + monoFontSize + "px; }\n" +
90+
".monospaced-tree { -fx-font-size: " + uiFontSize + "px; }\n";
6591
FileUtils.write(FONT_SIZE_CSS, css, StandardCharsets.UTF_8);
6692
controller.windows().reapplyStyles();
6793
} catch (IOException ex) {

src/main/java/me/coley/recaf/ui/controls/tree/JavaResourceCell.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private static GuiController getController() {
9393
String text = ci.getLocalName();
9494
Node g = UiUtil.createClassGraphic(access);
9595
cell.getStyleClass().add("tree-cell-class");
96-
cell.getStyleClass().add("monospaced");
96+
cell.getStyleClass().add("monospaced-tree");
9797
cell.setContextMenu(setupMenu(cell, ci).ofClass(ci.getClassName()));
9898
cell.setGraphic(g);
9999
cell.setText(text);
@@ -104,7 +104,7 @@ private static GuiController getController() {
104104
String owner = ((ClassItem) mi.getParent()).getClassName();
105105
ContextBuilder menu = setupMenu(cell, mi);
106106
String text = mi.getLocalName();
107-
Node g = null;
107+
Node g;
108108
if(mi.isField()) {
109109
g = UiUtil.createFieldGraphic(mi.getMemberAccess());
110110
cell.setContextMenu(menu.ofField(owner, mi.getMemberName(), mi.getMemberDesc()));
@@ -113,7 +113,7 @@ private static GuiController getController() {
113113
cell.setContextMenu(menu.ofMethod(owner, mi.getMemberName(), mi.getMemberDesc()));
114114
}
115115
cell.getStyleClass().add("tree-cell-member");
116-
cell.getStyleClass().add("monospaced");
116+
cell.getStyleClass().add("monospaced-tree");
117117
cell.setGraphic(g);
118118
cell.setText(text);
119119
});
@@ -128,7 +128,7 @@ private static GuiController getController() {
128128
String text = ii.getLocalName();
129129
Node g = new IconView("icons/result.png");
130130
cell.getStyleClass().add("tree-cell-instruction");
131-
cell.getStyleClass().add("monospaced");
131+
cell.getStyleClass().add("monospaced-tree");
132132
cell.setContextMenu(setupMenu(cell, ii).ofInsn(owner, name, desc, ii.getInsn()));
133133
cell.setGraphic(g);
134134
cell.setText(text);
@@ -139,7 +139,7 @@ private static GuiController getController() {
139139
String text = ai.getLocalName();
140140
Node g = new IconView("icons/class/annotation.png");
141141
cell.getStyleClass().add("tree-cell-annotation");
142-
cell.getStyleClass().add("monospaced");
142+
cell.getStyleClass().add("monospaced-tree");
143143
cell.setContextMenu(setupMenu(cell, ai).ofClass(ai.getAnnoName()));
144144
cell.setGraphic(g);
145145
cell.setText(text);
@@ -155,7 +155,7 @@ private static GuiController getController() {
155155
li.getLocal().getDescriptor();
156156
Node g = UiUtil.createClassGraphic(access);
157157
cell.getStyleClass().add("tree-cell-local");
158-
cell.getStyleClass().add("monospaced");
158+
cell.getStyleClass().add("monospaced-tree");
159159
cell.setContextMenu(setupMenu(cell, li).ofClass(className));
160160
cell.setGraphic(g);
161161
cell.setText(text);
@@ -168,7 +168,7 @@ private static GuiController getController() {
168168
String text = "CATCH " + className;
169169
Node g = UiUtil.createClassGraphic(access);
170170
cell.getStyleClass().add("tree-cell-catch");
171-
cell.getStyleClass().add("monospaced");
171+
cell.getStyleClass().add("monospaced-tree");
172172
cell.setContextMenu(setupMenu(cell, ci).ofClass(className));
173173
cell.setGraphic(g);
174174
cell.setText(text);
@@ -181,7 +181,7 @@ private static GuiController getController() {
181181
Node g = UiUtil.createFileGraphic(fi.getLocalName());
182182
cell.setContextMenu(setupMenu(cell, fi).ofFile(fileName));
183183
cell.getStyleClass().add("tree-cell-file");
184-
cell.getStyleClass().add("monospaced");
184+
cell.getStyleClass().add("monospaced-tree");
185185
cell.setGraphic(g);
186186
cell.setText(text);
187187
});
@@ -192,7 +192,7 @@ private static GuiController getController() {
192192
Node g = new IconView("icons/class/package-flat.png");
193193
cell.setContextMenu(setupMenu(cell, pi).ofPackage(pi.getPackageName()));
194194
cell.getStyleClass().add("tree-cell-directory");
195-
cell.getStyleClass().add("monospaced");
195+
cell.getStyleClass().add("monospaced-tree");
196196
cell.setGraphic(g);
197197
cell.setText(text);
198198
});
@@ -202,7 +202,7 @@ private static GuiController getController() {
202202
String text = di.getLocalName();
203203
Node g = new IconView("icons/class/package-flat.png");
204204
cell.getStyleClass().add("tree-cell-directory");
205-
cell.getStyleClass().add("monospaced");
205+
cell.getStyleClass().add("monospaced-tree");
206206
cell.setGraphic(g);
207207
cell.setText(text);
208208
});

src/main/java/me/coley/recaf/ui/controls/view/ClassViewport.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import javafx.application.Platform;
44
import javafx.scene.input.KeyEvent;
5+
import me.coley.recaf.config.ConfigManager;
56
import me.coley.recaf.control.gui.GuiController;
67
import me.coley.recaf.decompile.DecompileImpl;
78
import me.coley.recaf.plugin.PluginKeybinds;
89
import me.coley.recaf.ui.controls.ClassEditor;
10+
import me.coley.recaf.ui.controls.FontSlider;
911
import me.coley.recaf.ui.controls.HexEditor;
1012
import me.coley.recaf.ui.controls.popup.SuggestionWindow;
1113
import me.coley.recaf.ui.controls.node.ClassNodeEditorPane;
@@ -59,10 +61,24 @@ protected void handleKeyReleased(KeyEvent e) {
5961
}
6062
});
6163

62-
if(controller.config().keys().swapview.match(e)) {
64+
ConfigManager config = controller.config();
65+
66+
if(config.keys().swapview.match(e)) {
6367
setOverrideMode(ClassMode.values()[(getClassMode().ordinal() + 1) % ClassMode.values().length]);
6468
requestFocus();
6569
}
70+
71+
if(config.keys().incFontSize.match(e)) {
72+
config.display().monoFontSize++;
73+
FontSlider.update(controller);
74+
config.save();
75+
}
76+
77+
if(config.keys().decFontSize.match(e)) {
78+
config.display().monoFontSize--;
79+
FontSlider.update(controller);
80+
config.save();
81+
}
6682
}
6783

6884
@Override

src/main/resources/style/base.css

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@
3636
.monospaced {
3737
-fx-font-family: 'monospaced';
3838
}
39+
40+
/* Separate class for tree cells, they need to use the ui font size */
41+
.monospaced-tree {
42+
-fx-font-family: 'monospaced';
43+
}
44+
3945
.drag-target {
4046
-fx-effect: innershadow(one-pass-box, rgba(15, 200, 255), 50, 0.333, 0, 0);
4147
}

src/main/resources/translations/en.json

+4
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,10 @@
531531
"binding.gotodef.desc": "Jump to the definition of the selected item.",
532532
"binding.swapview.name": "Swap view",
533533
"binding.swapview.desc": "Swaps your view to the next available viewport type.",
534+
"binding.incfontsize.name": "Increase editor font size",
535+
"binding.incfontsize.desc": "Increases the editor's font size.",
536+
"binding.decfontsize.name": "Decrease editor font size",
537+
"binding.decfontsize.desc": "Decreases the editor's font size.",
534538

535539
"backend": "Backend / Private",
536540

0 commit comments

Comments
 (0)