1616
1717import javax .swing .JTextPane ;
1818import javax .swing .border .MatteBorder ;
19+ import javax .swing .text .AttributeSet ;
1920import javax .swing .text .SimpleAttributeSet ;
2021import javax .swing .text .StyleConstants ;
2122
23+ import processing .app .Preferences ;
24+
2225public class TextAreaLineNumbers extends JTextPane {
2326
2427 private final int LEFT_INDENT = 6 ;
@@ -34,26 +37,30 @@ public class TextAreaLineNumbers extends JTextPane {
3437 private int currEndNum = 0 ;
3538 private int currNumDigits = MIN_NUM_DIGITS ;
3639
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 );
4143 setOpaque (true );
4244 setEditable (false );
4345 setEnabled (false );
4446 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" ));
5148
5249 DIGIT_WIDTH = getFontMetrics (getFont ()).stringWidth ("0" );
5350 MIN_WIDTH = DIGIT_WIDTH * MIN_NUM_DIGITS + PADDING_WIDTH ;
5451
5552 setPreferredSize (new Dimension (MIN_WIDTH , preferredHeight ));
5653 }
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+ }
5764
5865 public void updateLineNumbers (int startNum , int endNum ) {
5966 if (currStartNum == startNum && currEndNum == endNum ) {
@@ -68,7 +75,7 @@ public void updateLineNumbers(int startNum, int endNum) {
6875 }
6976 sb .append (endNum );
7077 setText (sb .toString ());
71-
78+
7279 invalidate ();
7380 }
7481
@@ -78,8 +85,21 @@ public void updateWidthForNumDigits(int numDigits) {
7885 }
7986 currNumDigits = numDigits ;
8087
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+ }
8299 invalidate ();
83100 }
84101
102+ private void updateBounds () {
103+ setBounds (new Rectangle (Math .max (MIN_WIDTH , DIGIT_WIDTH * currNumDigits + PADDING_WIDTH ), getHeight ()));
104+ }
85105}
0 commit comments