Skip to content

Commit b6d7c68

Browse files
committed
NumberingPane: Respect icon width when calculating numbering position
This also improves the font choice for numbering panes on windows. Fixes #251
1 parent 39dfba2 commit b6d7c68

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

core/src/main/java/com/github/weisj/darklaf/components/text/NumberingPane.java

+6
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package com.github.weisj.darklaf.components.text;
2323

24+
import java.awt.Font;
2425
import java.util.*;
2526
import java.util.stream.Collectors;
2627

@@ -45,6 +46,11 @@ public NumberingPane() {
4546
updateUI();
4647
}
4748

49+
@Override
50+
public void setFont(Font font) {
51+
super.setFont(font);
52+
}
53+
4854
@Override
4955
public void updateUI() {
5056
setUI(UIManager.getUI(this));

core/src/main/java/com/github/weisj/darklaf/task/FontDefaultsInitTask.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public class FontDefaultsInitTask implements DefaultsInitTask {
7676
private static final String MAC_OS_CATALINA_FONT_NAME_FALLBACK = "Helvetica Neue";
7777
private static final String MAC_OS_FONT_NAME = ".SF NS Text";
7878
private static final String WINDOWS_10_FONT_NAME = "Segoe UI";
79+
private static final String WINDOWS_10_MONO_FONT_NAME = "Consolas";
7980

8081
@Override
8182
public void run(final Theme currentTheme, final UIDefaults defaults) {
@@ -182,15 +183,21 @@ private void loadFontProperties(final UIDefaults defaults) {
182183

183184
private void patchOSFonts(final UIDefaults defaults, final Function<Map.Entry<Object, Font>, Font> mapper) {
184185
PropertyLoader.replacePropertyEntriesOfType(Font.class, defaults,
185-
e -> isDefaultFont(e.getValue()), mapper);
186+
e -> isDefaultFont(e.getValue()) || isMonospaceDefault(e.getValue()), mapper);
186187
}
187188

188189
private boolean isDefaultFont(final Font font) {
189190
return Font.DIALOG.equals(font.getFamily());
190191
}
191192

193+
private boolean isMonospaceDefault(final Font font) {
194+
return Font.MONOSPACED.equals(font.getFamily());
195+
}
196+
192197
private Font mapMacOSFont(final Map.Entry<Object, Font> entry) {
193198
Font font = entry.getValue();
199+
if (isMonospaceDefault(font)) return font;
200+
194201
String fontName = SystemInfo.isMacOSCatalina
195202
? MAC_OS_CATALINA_FONT_NAME_FALLBACK
196203
: MAC_OS_FONT_NAME;
@@ -205,7 +212,10 @@ private Font mapMacOSFont(final Map.Entry<Object, Font> entry) {
205212
private Font mapWindowsFont(final Map.Entry<Object, Font> entry) {
206213
Font font = entry.getValue();
207214
if (!SystemInfo.isWindowsVista) return font;
208-
Font windowsFont = FontUtil.createFont(WINDOWS_10_FONT_NAME, font.getStyle(), font.getSize());
215+
String fontName = isMonospaceDefault(font)
216+
? WINDOWS_10_MONO_FONT_NAME
217+
: WINDOWS_10_FONT_NAME;
218+
Font windowsFont = FontUtil.createFont(fontName, font.getStyle(), font.getSize());
209219
if (font instanceof UIResource) {
210220
windowsFont = new DarkFontUIResource(windowsFont);
211221
}

core/src/main/java/com/github/weisj/darklaf/ui/numberingpane/DarkNumberingPaneUI.java

+11-12
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import javax.swing.event.ChangeEvent;
3737
import javax.swing.event.ChangeListener;
3838
import javax.swing.plaf.ComponentUI;
39+
import javax.swing.plaf.UIResource;
3940
import javax.swing.text.*;
4041

4142
import com.github.weisj.darklaf.components.text.IconListener;
@@ -190,7 +191,7 @@ protected void drawNumbering(final Graphics g, final int startLine, final int en
190191
GraphicsContext config = GraphicsUtil.setupAntialiasing(g);
191192
g.setColor(numberingPane.getForeground());
192193

193-
Font font = getNumberingFont(numberingPane.getTextComponent(), g);
194+
Font font = getNumberingFont(numberingPane.getTextComponent(), g, numberingPane.getFont());
194195
g.setFont(font);
195196
FontMetrics fm = numberingPane.getFontMetrics(font);
196197

@@ -201,20 +202,23 @@ protected void drawNumbering(final Graphics g, final int startLine, final int en
201202
String numberStr = String.valueOf(i);
202203
Rectangle lineRect = textComponent.modelToView(off);
203204
g.setColor(lineRect.y == yCur ? foregroundHighlight : numberingPane.getForeground());
204-
g.drawString(numberStr, width - OUTER_PAD - fm.stringWidth(numberStr),
205+
g.drawString(numberStr, width - OUTER_PAD - fm.stringWidth(numberStr) - maxIconWidth,
205206
lineRect.y + lineRect.height - descent);
206207
} catch (final BadLocationException ignored) {
207208
}
208209
}
209210
config.restore();
210211
}
211212

212-
private Font getNumberingFont(final JComponent c, final Graphics g) {
213-
Font font = c.getFont();
214-
if (font != null) {
215-
float newSize = (float) font.getSize() - 1;
213+
private Font getNumberingFont(final JComponent c, final Graphics g, final Font f) {
214+
Font baseFont = c.getFont();
215+
Font font = f;
216+
if (font instanceof UIResource) {
217+
int newSize = baseFont.getSize() - 1;
216218
if (newSize > 0) {
217-
font = font.deriveFont(newSize);
219+
font = font.deriveFont((float) newSize);
220+
} else {
221+
font = font.deriveFont(baseFont.getSize2D());
218222
}
219223
} else {
220224
font = g.getFont();
@@ -355,9 +359,6 @@ public void propertyChange(final PropertyChangeEvent evt) {
355359
((Caret) newCaret).addChangeListener(currentLinePainter);
356360
}
357361
}
358-
} else if (PropertyKey.FONT.equals(key)) {
359-
Font font = textComponent.getFont();
360-
numberingPane.setFont(font.deriveFont(Math.max(font.getSize() - 1, 1.0f)));
361362
} else if (NumberingPane.KEY_EDITOR.equals(key)) {
362363
Object newPane = evt.getNewValue();
363364
if (textComponent != null) {
@@ -378,8 +379,6 @@ public void propertyChange(final PropertyChangeEvent evt) {
378379
}
379380
textComponent.addPropertyChangeListener(getPropertyChangeListener());
380381
textComponent.getCaret().addChangeListener(getChangeListener());
381-
Font font = textComponent.getFont();
382-
numberingPane.setFont(font.deriveFont(Math.max(font.getSize() - 1, 1.0f)));
383382
oldBackground = textComponent.getBackground();
384383
textComponent.setBackground(UIManager.getColor("NumberingPane.textBackground"));
385384
}

0 commit comments

Comments
 (0)