16
16
17
17
import javax .swing .JTextPane ;
18
18
import javax .swing .border .MatteBorder ;
19
+ import javax .swing .text .AttributeSet ;
19
20
import javax .swing .text .SimpleAttributeSet ;
20
21
import javax .swing .text .StyleConstants ;
21
22
23
+ import processing .app .Preferences ;
24
+
22
25
public class TextAreaLineNumbers extends JTextPane {
23
26
24
27
private final int LEFT_INDENT = 6 ;
@@ -34,26 +37,30 @@ public class TextAreaLineNumbers extends JTextPane {
34
37
private int currEndNum = 0 ;
35
38
private int currNumDigits = MIN_NUM_DIGITS ;
36
39
37
- public TextAreaLineNumbers (Font font , Color bgcolor , Color fgcolor , int preferredHeight ) {
38
- setFont (font );
39
- setBackground (bgcolor );
40
- setForeground (fgcolor );
40
+ public TextAreaLineNumbers (TextAreaDefaults defaults , int preferredHeight ) {
41
+ setBackground (defaults .bgcolor );
42
+ setForeground (defaults .fgcolor );
41
43
setOpaque (true );
42
44
setEditable (false );
43
45
setEnabled (false );
44
46
setBorder (new MatteBorder (0 , 0 , 0 , 1 , new Color (240 , 240 , 240 )));
45
-
46
- SimpleAttributeSet attribs = new SimpleAttributeSet ();
47
- StyleConstants .setAlignment (attribs , StyleConstants .ALIGN_RIGHT );
48
- StyleConstants .setLeftIndent (attribs , 6 );
49
- StyleConstants .setRightIndent (attribs , 6 );
50
- setParagraphAttributes (attribs ,true );
47
+ setTextFont (Preferences .getFont ("editor.font" ));
51
48
52
49
DIGIT_WIDTH = getFontMetrics (getFont ()).stringWidth ("0" );
53
50
MIN_WIDTH = DIGIT_WIDTH * MIN_NUM_DIGITS + PADDING_WIDTH ;
54
51
55
52
setPreferredSize (new Dimension (MIN_WIDTH , preferredHeight ));
56
53
}
54
+
55
+ public void setTextFont (Font font ) {
56
+ setFont (font );
57
+ SimpleAttributeSet attribs = new SimpleAttributeSet ();
58
+ StyleConstants .setAlignment (attribs , StyleConstants .ALIGN_RIGHT );
59
+ StyleConstants .setLeftIndent (attribs , 6 );
60
+ StyleConstants .setRightIndent (attribs , 6 );
61
+ StyleConstants .setFontSize (attribs , getFont ().getSize ());
62
+ setParagraphAttributes (attribs ,true );
63
+ }
57
64
58
65
public void updateLineNumbers (int startNum , int endNum ) {
59
66
if (currStartNum == startNum && currEndNum == endNum ) {
@@ -68,7 +75,7 @@ public void updateLineNumbers(int startNum, int endNum) {
68
75
}
69
76
sb .append (endNum );
70
77
setText (sb .toString ());
71
-
78
+
72
79
invalidate ();
73
80
}
74
81
@@ -78,8 +85,21 @@ public void updateWidthForNumDigits(int numDigits) {
78
85
}
79
86
currNumDigits = numDigits ;
80
87
81
- setBounds (new Rectangle (Math .max (MIN_WIDTH , DIGIT_WIDTH * numDigits + PADDING_WIDTH ), getHeight ()));
88
+ updateBounds ();
89
+ invalidate ();
90
+ }
91
+
92
+ public void setDisplayLineNumbers (boolean displayLineNumbers ) {
93
+ setVisible (displayLineNumbers );
94
+ if (displayLineNumbers ) {
95
+ updateBounds ();
96
+ } else {
97
+ setBounds (new Rectangle (0 , getHeight ()));
98
+ }
82
99
invalidate ();
83
100
}
84
101
102
+ private void updateBounds () {
103
+ setBounds (new Rectangle (Math .max (MIN_WIDTH , DIGIT_WIDTH * currNumDigits + PADDING_WIDTH ), getHeight ()));
104
+ }
85
105
}
0 commit comments