FileDocCategorySizeDatePackage
SynthGraphicsUtils.javaAPI DocJava SE 6 API17211Tue Jun 10 00:26:54 BST 2008javax.swing.plaf.synth

SynthGraphicsUtils

public class SynthGraphicsUtils extends Object
Wrapper for primitive graphics calls.
version
1.19, 11/30/05
since
1.5
author
Scott Violet

Fields Summary
private Rectangle
paintIconR
private Rectangle
paintTextR
private Rectangle
paintViewR
private Insets
paintInsets
private Rectangle
iconR
private Rectangle
textR
private Rectangle
viewR
private Insets
viewSizingInsets
Constructors Summary
public SynthGraphicsUtils()
Creates a SynthGraphicsUtils.


            
      
    
Methods Summary
public intcomputeStringWidth(javax.swing.plaf.synth.SynthContext ss, java.awt.Font font, java.awt.FontMetrics metrics, java.lang.String text)
Returns the size of the passed in string.

param
ss SynthContext
param
font Font to use
param
metrics FontMetrics, may be ignored
param
text Text to get size of.

        return SwingUtilities2.stringWidth(ss.getComponent(), metrics,
                                          text);
    
public voiddrawLine(javax.swing.plaf.synth.SynthContext context, java.lang.Object paintKey, java.awt.Graphics g, int x1, int y1, int x2, int y2)
Draws a line between the two end points.

param
context Identifies hosting region.
param
paintKey Identifies the portion of the component being asked to paint, may be null.
param
g Graphics object to paint to
param
x1 x origin
param
y1 y origin
param
x2 x destination
param
y2 y destination

        g.drawLine(x1, y1, x2, y2);
    
public voiddrawLine(javax.swing.plaf.synth.SynthContext context, java.lang.Object paintKey, java.awt.Graphics g, int x1, int y1, int x2, int y2, java.lang.Object styleKey)
Draws a line between the two end points.

This implementation supports only one line style key, "dashed". The "dashed" line style is applied only to vertical and horizontal lines.

Specifying null or any key different from "dashed" will draw solid lines.

param
context identifies hosting region
param
paintKey identifies the portion of the component being asked to paint, may be null
param
g Graphics object to paint to
param
x1 x origin
param
y1 y origin
param
x2 x destination
param
y2 y destination
param
styleKey identifies the requested style of the line (e.g. "dashed")
since
1.6

        if ("dashed".equals(styleKey)) {
            // draw vertical line
            if (x1 == x2) {
                y1 += (y1 % 2);

                for (int y = y1; y <= y2; y+=2) {
                    g.drawLine(x1, y, x2, y);
                }
            // draw horizontal line
            } else if (y1 == y2) {
                x1 += (x1 % 2);

                for (int x = x1; x <= x2; x+=2) {
                    g.drawLine(x, y1, x, y2);
                }
            // oblique lines are not supported
            }
        } else {
            drawLine(context, paintKey, g, x1, y1, x2, y2);
        }
    
public intgetMaximumCharHeight(javax.swing.plaf.synth.SynthContext context)
Returns the maximum height of the the Font from the passed in SynthContext.

param
context SynthContext used to determine font.
return
maximum height of the characters for the font from the passed in context.

        FontMetrics fm = context.getComponent().getFontMetrics(
            context.getStyle().getFont(context));
        return (fm.getAscent() + fm.getDescent());
    
public java.awt.DimensiongetMaximumSize(javax.swing.plaf.synth.SynthContext ss, java.awt.Font font, java.lang.String text, javax.swing.Icon icon, int hAlign, int vAlign, int hTextPosition, int vTextPosition, int iconTextGap, int mnemonicIndex)
Returns the maximum size needed to properly render an icon and text.

param
ss SynthContext
param
font Font to use
param
text Text to layout
param
icon Icon to layout
param
hAlign horizontal alignment
param
vAlign vertical alignment
param
hTextPosition horizontal text position
param
vTextPosition vertical text position
param
iconTextGap gap between icon and text
param
mnemonicIndex Index into text to render the mnemonic at, -1 indicates no mnemonic.

        JComponent c = ss.getComponent();
        Dimension size = getPreferredSize(ss, font, text, icon, hAlign,
                                          vAlign, hTextPosition, vTextPosition,
                                          iconTextGap, mnemonicIndex);
	View v = (View) c.getClientProperty(BasicHTML.propertyKey);

	if (v != null) {
	    size.width += v.getMaximumSpan(View.X_AXIS) -
                          v.getPreferredSpan(View.X_AXIS);
	}
        return size;
    
public java.awt.DimensiongetMinimumSize(javax.swing.plaf.synth.SynthContext ss, java.awt.Font font, java.lang.String text, javax.swing.Icon icon, int hAlign, int vAlign, int hTextPosition, int vTextPosition, int iconTextGap, int mnemonicIndex)
Returns the minimum size needed to properly render an icon and text.

param
ss SynthContext
param
font Font to use
param
text Text to layout
param
icon Icon to layout
param
hAlign horizontal alignment
param
vAlign vertical alignment
param
hTextPosition horizontal text position
param
vTextPosition vertical text position
param
iconTextGap gap between icon and text
param
mnemonicIndex Index into text to render the mnemonic at, -1 indicates no mnemonic.

        JComponent c = ss.getComponent();
        Dimension size = getPreferredSize(ss, font, text, icon, hAlign,
                                          vAlign, hTextPosition, vTextPosition,
                                          iconTextGap, mnemonicIndex);
	View v = (View) c.getClientProperty(BasicHTML.propertyKey);

	if (v != null) {
	    size.width -= v.getPreferredSpan(View.X_AXIS) -
                          v.getMinimumSpan(View.X_AXIS);
	}
        return size;
    
public java.awt.DimensiongetPreferredSize(javax.swing.plaf.synth.SynthContext ss, java.awt.Font font, java.lang.String text, javax.swing.Icon icon, int hAlign, int vAlign, int hTextPosition, int vTextPosition, int iconTextGap, int mnemonicIndex)
Returns the preferred size needed to properly render an icon and text.

param
ss SynthContext
param
font Font to use
param
text Text to layout
param
icon Icon to layout
param
hAlign horizontal alignment
param
vAlign vertical alignment
param
hTextPosition horizontal text position
param
vTextPosition vertical text position
param
iconTextGap gap between icon and text
param
mnemonicIndex Index into text to render the mnemonic at, -1 indicates no mnemonic.

        JComponent c = ss.getComponent();
        Insets insets = c.getInsets(viewSizingInsets);
        int dx = insets.left + insets.right;
        int dy = insets.top + insets.bottom;

        if (icon == null && (text == null || font == null)) {
            return new Dimension(dx, dy);
        }
        else if ((text == null) || ((icon != null) && (font == null))) {
            return new Dimension(SynthIcon.getIconWidth(icon, ss) + dx, 
                                 SynthIcon.getIconHeight(icon, ss) + dy);
        }
        else {
            FontMetrics fm = c.getFontMetrics(font);

            iconR.x = iconR.y = iconR.width = iconR.height = 0;
            textR.x = textR.y = textR.width = textR.height = 0;
            viewR.x = dx;
            viewR.y = dy;
            viewR.width = viewR.height = Short.MAX_VALUE;

            layoutText(ss, fm, text, icon, hAlign, vAlign,
                   hTextPosition, vTextPosition, viewR, iconR, textR,
                   iconTextGap);
            int x1 = Math.min(iconR.x, textR.x);
            int x2 = Math.max(iconR.x + iconR.width, textR.x + textR.width);
            int y1 = Math.min(iconR.y, textR.y);
            int y2 = Math.max(iconR.y + iconR.height, textR.y + textR.height);
            Dimension rv = new Dimension(x2 - x1, y2 - y1);

            rv.width += dx;
            rv.height += dy;
            return rv;
        }
    
public java.lang.StringlayoutText(javax.swing.plaf.synth.SynthContext ss, java.awt.FontMetrics fm, java.lang.String text, javax.swing.Icon icon, int hAlign, int vAlign, int hTextPosition, int vTextPosition, java.awt.Rectangle viewR, java.awt.Rectangle iconR, java.awt.Rectangle textR, int iconTextGap)
Lays out text and an icon returning, by reference, the location to place the icon and text.

param
ss SynthContext
param
fm FontMetrics for the Font to use, this may be ignored
param
text Text to layout
param
icon Icon to layout
param
hAlign horizontal alignment
param
vAlign vertical alignment
param
hTextPosition horizontal text position
param
vTextPosition vertical text position
param
viewR Rectangle to layout text and icon in.
param
iconR Rectangle to place icon bounds in
param
textR Rectangle to place text in
param
iconTextGap gap between icon and text

        if (icon instanceof SynthIcon) {
            SynthIconWrapper wrapper = SynthIconWrapper.get((SynthIcon)icon,
                                                            ss);
            String formattedText = SwingUtilities.layoutCompoundLabel(
                      ss.getComponent(), fm, text, wrapper, vAlign, hAlign,
                      vTextPosition, hTextPosition, viewR, iconR, textR,
                      iconTextGap);
            SynthIconWrapper.release(wrapper);
            return formattedText;
        }
        return SwingUtilities.layoutCompoundLabel(
                      ss.getComponent(), fm, text, icon, vAlign, hAlign,
                      vTextPosition, hTextPosition, viewR, iconR, textR,
                      iconTextGap);
    
public voidpaintText(javax.swing.plaf.synth.SynthContext ss, java.awt.Graphics g, java.lang.String text, java.awt.Rectangle bounds, int mnemonicIndex)
Paints text at the specified location. This will not attempt to render the text as html nor will it offset by the insets of the component.

param
ss SynthContext
param
g Graphics used to render string in.
param
text Text to render
param
bounds Bounds of the text to be drawn.
param
mnemonicIndex Index to draw string at.

        paintText(ss, g, text, bounds.x, bounds.y, mnemonicIndex);
    
public voidpaintText(javax.swing.plaf.synth.SynthContext ss, java.awt.Graphics g, java.lang.String text, int x, int y, int mnemonicIndex)
Paints text at the specified location. This will not attempt to render the text as html nor will it offset by the insets of the component.

param
ss SynthContext
param
g Graphics used to render string in.
param
text Text to render
param
x X location to draw text at.
param
y Upper left corner to draw text at.
param
mnemonicIndex Index to draw string at.

        if (text != null) {
            JComponent c = ss.getComponent();
            SynthStyle style = ss.getStyle();
            FontMetrics fm = SwingUtilities2.getFontMetrics(c, g);

            y += fm.getAscent();
            SwingUtilities2.drawString(c, g, text, x, y);
            if (mnemonicIndex >= 0 && mnemonicIndex < text.length()) {
                int underlineX = x + SwingUtilities2.stringWidth(
                             c, fm, text.substring(0, mnemonicIndex));
                int underlineY = y;
                int underlineWidth = fm.charWidth(text.charAt(mnemonicIndex));
                int underlineHeight = 1;

                g.fillRect(underlineX, underlineY + fm.getDescent() - 1,
                           underlineWidth, underlineHeight);
            }
        }
    
public voidpaintText(javax.swing.plaf.synth.SynthContext ss, java.awt.Graphics g, java.lang.String text, javax.swing.Icon icon, int hAlign, int vAlign, int hTextPosition, int vTextPosition, int iconTextGap, int mnemonicIndex, int textOffset)
Paints an icon and text. This will render the text as html, if necessary, and offset the location by the insets of the component.

param
ss SynthContext
param
g Graphics to render string and icon into
param
text Text to layout
param
icon Icon to layout
param
hAlign horizontal alignment
param
vAlign vertical alignment
param
hTextPosition horizontal text position
param
vTextPosition vertical text position
param
iconTextGap gap between icon and text
param
mnemonicIndex Index into text to render the mnemonic at, -1 indicates no mnemonic.
param
textOffset Amount to offset the text when painting

        if ((icon == null) && (text == null)) {
            return;
        }
        JComponent c = ss.getComponent();
        FontMetrics fm = SwingUtilities2.getFontMetrics(c, g);
        Insets insets = SynthLookAndFeel.getPaintingInsets(ss, paintInsets);

        paintViewR.x = insets.left;
        paintViewR.y = insets.top;
        paintViewR.width = c.getWidth() - (insets.left + insets.right);
        paintViewR.height = c.getHeight() - (insets.top + insets.bottom);

        paintIconR.x = paintIconR.y = paintIconR.width = paintIconR.height = 0;
        paintTextR.x = paintTextR.y = paintTextR.width = paintTextR.height = 0;

        String clippedText = 
            layoutText(ss, fm, text, icon, hAlign, vAlign,
                   hTextPosition, vTextPosition, paintViewR, paintIconR,
                   paintTextR, iconTextGap);

        if (icon != null) {
            Color color = g.getColor();
            paintIconR.x += textOffset;
            paintIconR.y += textOffset;
            SynthIcon.paintIcon(icon, ss, g, paintIconR.x, paintIconR.y,
                                paintIconR.width, paintIconR.height);
            g.setColor(color);
        }

        if (text != null) {
	    View v = (View) c.getClientProperty(BasicHTML.propertyKey);

	    if (v != null) {
		v.paint(g, paintTextR);
	    } else {
                paintTextR.x += textOffset;
                paintTextR.y += textOffset;

                paintText(ss, g, clippedText, paintTextR, mnemonicIndex);
	    }
        }