The attached patch makes the BeanShell JConsole work quite well (ok, slow
and ugly, but anyway ;-) ). Thanks to Lillian and Anthony for making
this possible with their work on DefaultStyledDocument.

2006-02-06  Roman Kennke  <[EMAIL PROTECTED]>

        * javax/swing/text/GlyphView.java:
        (DefaultGlyphPainter.paint): Store/restore Graphics color setting.
        Only fill background if there is a background set on the view.
        Call Utilities.drawTabbedText with the baseline height, rather
than
        the upper left corner of the view rectangle.
        (getBackground): Return null if no background is set.
        * javax/swing/text/GlyphView.java:
        (setPropertiesFromAttributes): Use null for background when no
        background is set. StyleConstants.getBackground() doesn't work
        for this, because it returns Color.BLACK in that case.


/Roman
Index: javax/swing/text/GlyphView.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/GlyphView.java,v
retrieving revision 1.13
diff -u -r1.13 GlyphView.java
--- javax/swing/text/GlyphView.java	23 Nov 2005 14:23:14 -0000	1.13
+++ javax/swing/text/GlyphView.java	6 Feb 2006 16:32:46 -0000
@@ -277,35 +277,38 @@
     public void paint(GlyphView view, Graphics g, Shape a, int p0,
                       int p1)
     {
+      Color oldColor = g.getColor();
       int height = (int) getHeight(view);
       Segment txt = view.getText(p0, p1);
       Rectangle bounds = a.getBounds();
-
       TabExpander tabEx = null;
       View parent = view.getParent();
       if (parent instanceof TabExpander)
         tabEx = (TabExpander) parent;
 
-      // Fill the background of the text run.
-      Color background = view.getBackground();
-      g.setColor(background);
       int width = Utilities.getTabbedTextWidth(txt, g.getFontMetrics(),
                                                bounds.x, tabEx, txt.offset);
-      g.fillRect(bounds.x, bounds.y, width, height);
-
+      // Fill the background of the text run.
+      Color background = view.getBackground();
+      if (background != null)
+        {
+          g.setColor(background);
+          g.fillRect(bounds.x, bounds.y, width, height);
+        }
       // Draw the actual text.
       g.setColor(view.getForeground());
       g.setFont(view.getFont());
+      int ascent = g.getFontMetrics().getAscent();
       if (view.isSuperscript())
         // TODO: Adjust font for superscripting.
-        Utilities.drawTabbedText(txt, bounds.x, bounds.y - height / 2, g, tabEx,
-                                   txt.offset);
+        Utilities.drawTabbedText(txt, bounds.x, bounds.y + ascent - height / 2,
+                                 g, tabEx, txt.offset);
       else if (view.isSubscript())
         // TODO: Adjust font for subscripting.
-        Utilities.drawTabbedText(txt, bounds.x, bounds.y + height / 2, g, tabEx,
-                                 txt.offset);
+        Utilities.drawTabbedText(txt, bounds.x, bounds.y + ascent + height / 2,
+                                 g, tabEx, txt.offset);
       else
-        Utilities.drawTabbedText(txt, bounds.x, bounds.y, g, tabEx,
+        Utilities.drawTabbedText(txt, bounds.x, bounds.y + ascent, g, tabEx,
                                  txt.offset);
 
       if (view.isStikeThrough())
@@ -320,6 +323,7 @@
           g.drawLine(bounds.x, bounds.y + lineHeight, bounds.height + width,
                      bounds.y + lineHeight);
         }
+      g.setColor(oldColor);
     }
 
     /**
@@ -771,7 +775,11 @@
   {
     Element el = getElement();
     AttributeSet atts = el.getAttributes();
-    return StyleConstants.getBackground(atts);
+    // We cannot use StyleConstants.getBackground() here, because that returns
+    // BLACK as default (when background == null). What we need is the
+    // background setting of the text component instead, which is what we get
+    // when background == null anyway.
+    return (Color) atts.getAttribute(StyleConstants.Background);
   }
 
   /**
Index: javax/swing/text/LabelView.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/LabelView.java,v
retrieving revision 1.2
diff -u -r1.2 LabelView.java
--- javax/swing/text/LabelView.java	5 Oct 2005 15:03:46 -0000	1.2
+++ javax/swing/text/LabelView.java	6 Feb 2006 16:32:46 -0000
@@ -109,7 +109,11 @@
   {
     Element el = getElement();
     AttributeSet atts = el.getAttributes();
-    background = StyleConstants.getBackground(atts);
+    // We cannot use StyleConstants.getBackground() here, because that returns
+    // BLACK as default (when background == null). What we need is the
+    // background setting of the text component instead, which is what we get
+    // when background == null anyway.
+    background = (Color) atts.getAttribute(StyleConstants.Background);
     foreground = StyleConstants.getForeground(atts);
     strikeThrough = StyleConstants.isStrikeThrough(atts);
     subscript = StyleConstants.isSubscript(atts);

Reply via email to