Java Code Examples for java.awt.Graphics2D#getFont()

The following examples show how to use java.awt.Graphics2D#getFont() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: WindowResizingOnMovingToAnotherDisplay.java    From openjdk-jdk9 with GNU General Public License v2.0 6 votes vote down vote up
@Override
public Image getResolutionVariant(double destImageWidth, double destImageHeight) {

    int w = (int) destImageWidth;
    int h = (int) destImageHeight;

    BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = img.createGraphics();
    g.scale(scaleX, scaleY);
    int red = (int) (255 / scaleX);
    int green = (int) (250 / scaleX);
    int blue = (int) (20 / scaleX);
    g.setColor(new Color(red, green, blue));
    g.fillRect(0, 0, width, height);

    g.setColor(Color.decode("#87CEFA"));
    Font f = g.getFont();
    g.setFont(new Font(f.getName(), Font.BOLD, 24));
    g.drawString(String.format("scales: [%1.2fx, %1.2fx]", scaleX, scaleY),
            width / 6, height / 2);

    g.dispose();
    return img;
}
 
Example 2
Source File: CharBox.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
public void draw(Graphics2D g2, float x, float y) {
    drawDebug(g2, x, y);
    AffineTransform at = g2.getTransform();
    g2.translate(x, y);
    Font font = FontInfo.getFont(cf.fontId);

    if (Math.abs(size - TeXFormula.FONT_SCALE_FACTOR) > TeXFormula.PREC) {
        g2.scale(size / TeXFormula.FONT_SCALE_FACTOR,
                 size / TeXFormula.FONT_SCALE_FACTOR);
    }

    if (g2.getFont() != font) {
        g2.setFont(font);
    }

    arr[0] = cf.c;
    g2.drawChars(arr, 0, 1, 0, 0);
    g2.setTransform(at);
}
 
Example 3
Source File: XAxisOverlayViewLabel.java    From ET_Redux with Apache License 2.0 6 votes vote down vote up
/**
 * 
 * @param g2d
 */
@Override
public void paint ( Graphics2D g2d ) {
    paintInit( g2d );

    String label = "Elapsed Seconds:";
    TextLayout mLayout = //
            new TextLayout(
            label, g2d.getFont(), g2d.getFontRenderContext() );

    Rectangle2D bounds = mLayout.getBounds();

    g2d.drawString( label,//
            getWidth() - (float) (bounds.getWidth()) - 2f,//
            (float) mapY( getRangeY_Display() / 2.0 ) + (float)(bounds.getHeight() / 2f) );

}
 
Example 4
Source File: DataPresentationModeChooserPanel.java    From ET_Redux with Apache License 2.0 6 votes vote down vote up
@Override
public void paint(Graphics2D g2d) {
    paintInit(g2d);

    setBackground(new Color(250, 240, 230));

    String label = "for ALL Ratios";
    TextLayout mLayout = //
            new TextLayout(
                    label, g2d.getFont(), g2d.getFontRenderContext());

    Rectangle2D bounds = mLayout.getBounds();

    g2d.drawString(label,//
            10,// (getWidth() - (float) (bounds.getWidth())) / 2f,//
            10);

}
 
Example 5
Source File: TitlePart.java    From phoebus with Eclipse Public License 1.0 6 votes vote down vote up
public void paint(final Graphics2D gc, final Font font)
{
    final String text = getName();
    if (text.isEmpty())
        return;

    final Font orig_font = gc.getFont();
    gc.setFont(font);
    super.paint(gc);
    
    final Color old_fg = gc.getColor();
    gc.setColor(GraphicsUtils.convert(getColor()));

    final Rectangle bounds = getBounds();
    final Rectangle metrics = GraphicsUtils.measureText(gc, text);
    
    final int tx = bounds.x + (bounds.width - metrics.width) / 2;
    final int ty = bounds.y + metrics.y + (bounds.height - metrics.height) / 2;
    gc.drawString(text, tx, ty);
    gc.setColor(old_fg);
    gc.setFont(orig_font);
}
 
Example 6
Source File: RenderToCustomBufferTest.java    From hottub with GNU General Public License v2.0 5 votes vote down vote up
private static void renderTo(BufferedImage dst) {
    System.out.println("The buffer: " + dst);
    Graphics2D g = dst.createGraphics();

    final int w = dst.getWidth();
    final int h = dst.getHeight();

    g.setColor(Color.blue);
    g.fillRect(0, 0, w, h);

    g.setColor(Color.red);
    Font f = g.getFont();
    g.setFont(f.deriveFont(48f));

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    // NB: this clip ctriggers the problem
    g.setClip(50, 50, 200, 100);

    g.drawString("AA Text", 52, 90);

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

    // NB: this clip ctriggers the problem
    g.setClip(50, 100, 100, 100);
    g.drawString("Text", 52, 148);

    g.dispose();
}
 
Example 7
Source File: AbstractDataView.java    From ET_Redux with Apache License 2.0 5 votes vote down vote up
protected double calculateLengthOfStringPlot(Graphics2D g2d, String label) {
    TextLayout mLayout
            = new TextLayout(
                    label, g2d.getFont(), g2d.getFontRenderContext());

    Rectangle2D bounds = mLayout.getBounds();
    return bounds.getWidth();
}
 
Example 8
Source File: XYAxis.java    From osp with GNU General Public License v3.0 5 votes vote down vote up
protected void drawMultiplier(int xpix, int ypix, int exponent, Graphics2D g2) {
  Font oldFont = g2.getFont();
  g2.drawString("10", xpix, ypix);             //$NON-NLS-1$
  g2.setFont(g2.getFont().deriveFont(Font.PLAIN, 9.0f));
  g2.drawString(""+exponent, xpix+16, ypix-6); //$NON-NLS-1$
  g2.setFont(oldFont);
}
 
Example 9
Source File: RenderToCustomBufferTest.java    From openjdk-8 with GNU General Public License v2.0 5 votes vote down vote up
private static void renderTo(BufferedImage dst) {
    System.out.println("The buffer: " + dst);
    Graphics2D g = dst.createGraphics();

    final int w = dst.getWidth();
    final int h = dst.getHeight();

    g.setColor(Color.blue);
    g.fillRect(0, 0, w, h);

    g.setColor(Color.red);
    Font f = g.getFont();
    g.setFont(f.deriveFont(48f));

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    // NB: this clip ctriggers the problem
    g.setClip(50, 50, 200, 100);

    g.drawString("AA Text", 52, 90);

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

    // NB: this clip ctriggers the problem
    g.setClip(50, 100, 100, 100);
    g.drawString("Text", 52, 148);

    g.dispose();
}
 
Example 10
Source File: RenderToCustomBufferTest.java    From dragonwell8_jdk with GNU General Public License v2.0 5 votes vote down vote up
private static void renderTo(BufferedImage dst) {
    System.out.println("The buffer: " + dst);
    Graphics2D g = dst.createGraphics();

    final int w = dst.getWidth();
    final int h = dst.getHeight();

    g.setColor(Color.blue);
    g.fillRect(0, 0, w, h);

    g.setColor(Color.red);
    Font f = g.getFont();
    g.setFont(f.deriveFont(48f));

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    // NB: this clip ctriggers the problem
    g.setClip(50, 50, 200, 100);

    g.drawString("AA Text", 52, 90);

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

    // NB: this clip ctriggers the problem
    g.setClip(50, 100, 100, 100);
    g.drawString("Text", 52, 148);

    g.dispose();
}
 
Example 11
Source File: RenderToCustomBufferTest.java    From jdk8u60 with GNU General Public License v2.0 5 votes vote down vote up
private static void renderTo(BufferedImage dst) {
    System.out.println("The buffer: " + dst);
    Graphics2D g = dst.createGraphics();

    final int w = dst.getWidth();
    final int h = dst.getHeight();

    g.setColor(Color.blue);
    g.fillRect(0, 0, w, h);

    g.setColor(Color.red);
    Font f = g.getFont();
    g.setFont(f.deriveFont(48f));

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    // NB: this clip ctriggers the problem
    g.setClip(50, 50, 200, 100);

    g.drawString("AA Text", 52, 90);

    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
           RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

    // NB: this clip ctriggers the problem
    g.setClip(50, 100, 100, 100);
    g.drawString("Text", 52, 148);

    g.dispose();
}
 
Example 12
Source File: LabelMapLayer.java    From mars-sim with GNU General Public License v3.0 5 votes vote down vote up
/**
 * Draws a label to the right of an X, Y location.
 * @param g2d the graphics 2D context.
 * @param label the label string.
 * @param xLoc the X location from center of settlement (meters).
 * @param yLoc the y Location from center of settlement (meters).
 * @param labelColor the color of the label.
 * @param labelOutlineColor the color of the outline of the label.
 * @param xOffset the X pixel offset from the center point.
 * @param yOffset the Y pixel offset from the center point.
 */
private void drawLabelRight(
	Graphics2D g2d, String label, double xLoc, double yLoc,
	Color labelColor, Color labelOutlineColor, int xOffset, int yOffset
) {

	// Save original graphics transforms.
	AffineTransform saveTransform = g2d.getTransform();
	Font saveFont = g2d.getFont();

	// Get the label image.
	Font font = g2d.getFont().deriveFont(Font.BOLD, 12F);
	g2d.setFont(font);
	BufferedImage labelImage = getLabelImage(
		label, font, g2d.getFontRenderContext(),
		labelColor, labelOutlineColor
	);

	// Determine transform information.
	double centerX = labelImage.getWidth() / 2D;
	double centerY = labelImage.getHeight() / 2D;
	double translationX = (-1D * xLoc * mapPanel.getScale()) - centerX;
	double translationY = (-1D * yLoc * mapPanel.getScale()) - centerY;

	// Apply graphic transforms for label.
	AffineTransform newTransform = new AffineTransform(saveTransform);
	newTransform.translate(translationX, translationY);
	newTransform.rotate(mapPanel.getRotation() * -1D, centerX, centerY);
	g2d.setTransform(newTransform);

	// Draw image label.
	int totalRightOffset = (labelImage.getWidth() / 2) + xOffset;
	g2d.drawImage(labelImage, totalRightOffset, yOffset, mapPanel);

	// Restore original graphic transforms.
	g2d.setTransform(saveTransform);
	g2d.setFont(saveFont);
}
 
Example 13
Source File: SplineOverDispersionChooserPanel.java    From ET_Redux with Apache License 2.0 5 votes vote down vote up
@Override
public void paint ( Graphics2D g2d ) {
    paintInit( g2d );

    g2d.drawRect( 0, 0, getWidth() - 1, getHeight() - 1 );

    g2d.setFont( new Font(
            "SansSerif",
            Font.BOLD,
            9 ) );
    
    if ( tics != null ) {
        g2d.setStroke( new BasicStroke( 0.3f ) );
        g2d.setPaint( Color.BLACK );
        for (int i = 0; i < tics.length; i ++) {
            try {
                Shape ticMark = new Line2D.Double( //
                        15, mapY( getTics()[i].doubleValue() ), getWidth(), mapY( getTics()[i].doubleValue() ) );
                g2d.draw( ticMark );

                TextLayout mLayout = //
                        new TextLayout(
                        getTics()[i].toPlainString(), g2d.getFont(), g2d.getFontRenderContext() );

                Rectangle2D bounds = mLayout.getBounds();

                g2d.drawString( getTics()[i].toPlainString(),//
                        (float) 13 - (float) bounds.getWidth(),//
                        (float) mapY( getTics()[i].doubleValue() ) + (float) bounds.getHeight() / 2.0f );
            } catch (Exception e) {
            }
        }
    }
}
 
Example 14
Source File: TextBox.java    From osp with GNU General Public License v3.0 4 votes vote down vote up
public void draw(DrawingPanel panel, Graphics g) {
  String tempText = text; // local reference for thread safety
  if(tempText==null) {
    return;
  }
  Graphics2D g2 = (Graphics2D) g;
  g2.setColor(color);
  Font oldFont = g2.getFont();
  g2.setFont(font);
  FontMetrics fm = g.getFontMetrics();
  int sh = fm.getAscent()+2;           // current string height
  int sw = fm.stringWidth(tempText)+6; // current string width
  boxHeight = Math.max(boxHeight, sh);
  boxWidth = Math.max(boxWidth, sw);
  switch(placement_mode) {
     case PIXEL_PLACEMENT :
       xpix = (int) x;
       ypix = (int) y;
       break;
     case RELATIVE_PLACEMENT :
       xpix = (int) (x*panel.getWidth());
       ypix = (int) ((1-y)*panel.getHeight());
       break;
     case TOP_LEFT_PLACEMENT :
       xpix = 0;
       ypix = 0;
       break;
     case TOP_LEFT_GUTTER_PLACEMENT :
       xpix = panel.getLeftGutter();
       ypix = panel.getTopGutter();
       break;
     case BOTTOM_LEFT_PLACEMENT :
       xpix = 0;
       ypix = panel.getHeight()-boxHeight-yoffset-1;
       break;
     case BOTTOM_LEFT_GUTTER_PLACEMENT :
       xpix = panel.getLeftGutter();
       ypix = panel.getHeight()-boxHeight-yoffset-1-panel.getBottomGutter();
       break;
     case TOP_RIGHT_PLACEMENT :
       xpix = panel.getWidth()-boxWidth-1;
       ypix = 0;
       break;
     case TOP_RIGHT_GUTTER_PLACEMENT :
       xpix = panel.getWidth()-boxWidth-1-panel.getRightGutter();
       ypix = panel.getTopGutter();
       break;
     case BOTTOM_RIGHT_PLACEMENT :
       xpix = panel.getWidth()-boxWidth-1;
       ypix = panel.getHeight()-boxHeight-yoffset-1;
       break;
     case BOTTOM_RIGHT_GUTTER_PLACEMENT :
       xpix = panel.getWidth()-boxWidth-1-panel.getRightGutter();
       ypix = panel.getHeight()-boxHeight-yoffset-1-panel.getBottomGutter();
       break;
     default :
       xpix = panel.xToPix(x);
       ypix = panel.yToPix(y);
       break;
  }
  int xoffset = this.xoffset, yoffset = this.yoffset;
  if(this.alignment_mode==TOP_CENTER_ALIGNMENT) {
    xoffset -= boxWidth/2;
  }
  Shape clipShape = g2.getClip();
  g2.setClip(0, 0, panel.getWidth(), panel.getHeight());
  g2.setColor(Color.yellow);
  g2.fillRect(xpix+xoffset, ypix+yoffset, boxWidth, boxHeight);
  g2.setColor(Color.black);
  g2.drawRect(xpix+xoffset, ypix+yoffset, boxWidth, boxHeight);
  g2.drawString(tempText, xpix+3+xoffset, ypix+boxHeight-2+yoffset);
  g2.setFont(oldFont);
  g2.setClip(clipShape);
}
 
Example 15
Source File: TextUtils.java    From buffer_bci with GNU General Public License v3.0 4 votes vote down vote up
/**
 * A utility method that calculates the anchor offsets for a string.
 * Normally, the (x, y) coordinate for drawing text is a point on the
 * baseline at the left of the text string.  If you add these offsets to
 * (x, y) and draw the string, then the anchor point should coincide with
 * the (x, y) point.
 *
 * @param g2  the graphics device (not <code>null</code>).
 * @param text  the text.
 * @param anchor  the anchor point.
 * @param textBounds  the text bounds (if not <code>null</code>, this
 *                    object will be updated by this method to match the
 *                    string bounds).
 *
 * @return  The offsets.
 */
private static float[] deriveTextBoundsAnchorOffsets(Graphics2D g2,
        String text, TextAnchor anchor, Rectangle2D textBounds) {

    float[] result = new float[3];
    FontRenderContext frc = g2.getFontRenderContext();
    Font f = g2.getFont();
    FontMetrics fm = g2.getFontMetrics(f);
    Rectangle2D bounds = getTextBounds(text, fm);
    LineMetrics metrics = f.getLineMetrics(text, frc);
    float ascent = metrics.getAscent();
    result[2] = -ascent;
    float halfAscent = ascent / 2.0f;
    float descent = metrics.getDescent();
    float leading = metrics.getLeading();
    float xAdj = 0.0f;
    float yAdj = 0.0f;

    if (anchor.isHorizontalCenter()) {
        xAdj = (float) -bounds.getWidth() / 2.0f;
    }
    else if (anchor.isRight()) {
        xAdj = (float) -bounds.getWidth();
    }

    if (anchor.isTop()) {
        yAdj = -descent - leading + (float) bounds.getHeight();
    }
    else if (anchor.isHalfAscent()) {
        yAdj = halfAscent;
    }
    else if (anchor.isHorizontalCenter()) {
        yAdj = -descent - leading + (float) (bounds.getHeight() / 2.0);
    }
    else if (anchor.isBaseline()) {
        yAdj = 0.0f;
    }
    else if (anchor.isBottom()) {
        yAdj = -metrics.getDescent() - metrics.getLeading();
    }
    if (textBounds != null) {
        textBounds.setRect(bounds);
    }
    result[0] = xAdj;
    result[1] = yAdj;
    return result;
}
 
Example 16
Source File: FreeForm.java    From dsworkbench with Apache License 2.0 4 votes vote down vote up
@Override
public void renderForm(Graphics2D g2d) {
    if (points.size() < 1) {
        return;
    }
    //store properties
    Stroke sBefore = g2d.getStroke();
    Color cBefore = g2d.getColor();
    Composite coBefore = g2d.getComposite();
    Font fBefore = g2d.getFont();
    //draw
    g2d.setStroke(getStroke());
    checkShowMode(g2d, drawColor);
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, drawAlpha));

    Point2D.Double pp = MapPanel.getSingleton().virtualPosToSceenPosDouble(points.get(0).getX(), points.get(0).getY());
    GeneralPath p = new GeneralPath();
    p.moveTo(pp.x, pp.y);
    for (int i = 1; i < points.size(); i++) {
        pp = MapPanel.getSingleton().virtualPosToSceenPosDouble(points.get(i).getX(), points.get(i).getY());
        p.lineTo(pp.x, pp.y);
    }
    java.awt.Rectangle mapBounds = MapPanel.getSingleton().getBounds();
    if (mapBounds.intersects(p.getBounds())) {
        setVisibleOnMap(true);
    } else {
        setVisibleOnMap(false);
        return;
    }
    if (filled) {
        g2d.fill(p);
    } else {
        g2d.draw(p);
    }

    if (drawName) {
        g2d.setColor(getTextColor());
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getTextAlpha()));
        g2d.setFont(fBefore.deriveFont((float) getTextSize()));
        Rectangle2D textBounds = g2d.getFontMetrics().getStringBounds(getFormName(), g2d);
        java.awt.Rectangle bounds = p.getBounds();
        g2d.drawString(getFormName(), (int) Math.rint(bounds.getX() + bounds.getWidth() / 2 - textBounds.getWidth() / 2), (int) Math.rint(bounds.getY() + bounds.getHeight() / 2 + textBounds.getHeight() / 2));
    }

    //restore properties
    g2d.setStroke(sBefore);
    g2d.setColor(cBefore);
    g2d.setComposite(coBefore);
    g2d.setFont(fBefore);
}
 
Example 17
Source File: RTMeter.java    From phoebus with Eclipse Public License 1.0 4 votes vote down vote up
/** Draw needle and label for current value */
private void drawValue(final Graphics2D gc)
{
    gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    gc.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
    gc.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
    gc.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

    // Needle
    final double angle = Math.toRadians(scale.getAngle(value));
    final Stroke orig_stroke = gc.getStroke();
    gc.setStroke(AxisPart.TICK_STROKE);

    final int[] nx = new int[]
    {
        (int) (scale.getCenterX() + scale.getRadiusX() * Math.cos(angle) + 0.5),
        (int) (scale.getCenterX() + NEEDLE_BASE * Math.cos(angle + Math.PI/2) + 0.5),
        (int) (scale.getCenterX() + NEEDLE_BASE * Math.cos(angle - Math.PI/2) + 0.5),
    };
    final int[] ny = new int[]
    {
        (int) (scale.getCenterY() - scale.getRadiusY() * Math.sin(angle) + 0.5),
        (int) (scale.getCenterY() - NEEDLE_BASE * Math.sin(angle + Math.PI/2) + 0.5),
        (int) (scale.getCenterY() - NEEDLE_BASE * Math.sin(angle - Math.PI/2) + 0.5),
    };
    gc.setColor(needle);
    gc.fillPolygon(nx, ny, 3);

    gc.setColor(knob);
    gc.fillOval(scale.getCenterX()-NEEDLE_BASE, scale.getCenterY()-NEEDLE_BASE, 2*NEEDLE_BASE, 2*NEEDLE_BASE);

    gc.setStroke(orig_stroke);

    // Label
    gc.setColor(foreground);
    final Font orig_font = gc.getFont();
    gc.setFont(font);
    final Rectangle metrics = GraphicsUtils.measureText(gc, label);
    final Rectangle area_copy = area;
    final int tx = (area_copy.width - metrics.width)/2;
    final int ty = 2*(area_copy.height + metrics.height)/3;
    gc.drawString(label, tx, ty);
    gc.setFont(orig_font);
}
 
Example 18
Source File: TextUtils.java    From buffer_bci with GNU General Public License v3.0 4 votes vote down vote up
/**
 * A utility method that calculates the anchor offsets for a string.
 * Normally, the (x, y) coordinate for drawing text is a point on the
 * baseline at the left of the text string.  If you add these offsets to
 * (x, y) and draw the string, then the anchor point should coincide with
 * the (x, y) point.
 *
 * @param g2  the graphics device (not <code>null</code>).
 * @param text  the text.
 * @param anchor  the anchor point.
 *
 * @return  The offsets.
 */
private static float[] deriveTextBoundsAnchorOffsets(Graphics2D g2,
        String text, TextAnchor anchor) {

    float[] result = new float[2];
    FontRenderContext frc = g2.getFontRenderContext();
    Font f = g2.getFont();
    FontMetrics fm = g2.getFontMetrics(f);
    Rectangle2D bounds = getTextBounds(text, fm);
    LineMetrics metrics = f.getLineMetrics(text, frc);
    float ascent = metrics.getAscent();
    float halfAscent = ascent / 2.0f;
    float descent = metrics.getDescent();
    float leading = metrics.getLeading();
    float xAdj = 0.0f;
    float yAdj = 0.0f;

    if (anchor.isHorizontalCenter()) {
        xAdj = (float) -bounds.getWidth() / 2.0f;
    }
    else if (anchor.isRight()) {
        xAdj = (float) -bounds.getWidth();
    }

    if (anchor.isTop()) {
        yAdj = -descent - leading + (float) bounds.getHeight();
    }
    else if (anchor.isHalfAscent()) {
        yAdj = halfAscent;
    }
    else if (anchor.isVerticalCenter()) {
        yAdj = -descent - leading + (float) (bounds.getHeight() / 2.0);
    }
    else if (anchor.isBaseline()) {
        yAdj = 0.0f;
    }
    else if (anchor.isBottom()) {
        yAdj = -metrics.getDescent() - metrics.getLeading();
    }
    result[0] = xAdj;
    result[1] = yAdj;
    return result;

}
 
Example 19
Source File: DisplayRectangular.java    From mars-sim with GNU General Public License v3.0 4 votes vote down vote up
@Override
protected void paintComponent(Graphics g) {
    if (!isInitialized()) {
        return;
    }

    final Graphics2D G2 = (Graphics2D) g.create();

    G2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    G2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    //G2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
    //G2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
    //G2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
    G2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
    //G2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    G2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    G2.translate(getInnerBounds().x, getInnerBounds().y);

    // Draw the frame
    if (isFrameVisible()) {
        G2.drawImage(frameImage, 0, 0, null);
    }

    // Draw the background
    if (isBackgroundVisible()) {
        G2.drawImage(backgroundImage, 0, 0, null);
    }

    // Draw LCD display
    if (isLcdVisible()) {
        int offset = 0;
        if (isFrameVisible()) {
            offset = 18;
        }

        G2.drawImage(lcdImage, offset, offset, null);

        if (getLcdColor() == LcdColor.CUSTOM) {
            G2.setColor(getCustomLcdForeground());
        } else {
            G2.setColor(getLcdColor().TEXT_COLOR);
        }
        G2.setFont(getLcdUnitFont());
        final double UNIT_STRING_WIDTH;
        if (isLcdUnitStringVisible()) {
            unitLayout = new TextLayout(getLcdUnitString(), G2.getFont(), RENDER_CONTEXT);
            UNIT_BOUNDARY.setFrame(unitLayout.getBounds());
            G2.drawString(getLcdUnitString(), (int) ((lcdImage.getWidth() - UNIT_BOUNDARY.getWidth()) - lcdImage.getWidth() * 0.03f) + offset, (int) (lcdImage.getHeight() * 0.76f) + offset);
            UNIT_STRING_WIDTH = UNIT_BOUNDARY.getWidth();
        } else {
            UNIT_STRING_WIDTH = 0;
        }
        G2.setFont(getLcdValueFont());
        valueLayout = new TextLayout(formatLcdValue(getLcdValue()), G2.getFont(), RENDER_CONTEXT);
        VALUE_BOUNDARY.setFrame(valueLayout.getBounds());
        G2.drawString(formatLcdValue(getLcdValue()), (int) ((lcdImage.getWidth() - UNIT_STRING_WIDTH - VALUE_BOUNDARY.getWidth()) - lcdImage.getWidth() * 0.09) + offset, (int) (lcdImage.getHeight() * 0.76f) + offset);
    }

    // Draw the foreground
    if (isForegroundVisible()) {
        G2.drawImage(foregroundImage, 0, 0, null);
    }

    if (!isEnabled()) {
        G2.drawImage(disabledImage, 0, 0, null);
    }

    G2.translate(-getInnerBounds().x, -getInnerBounds().y);

    G2.dispose();
}
 
Example 20
Source File: TextUtils.java    From openstock with GNU General Public License v3.0 4 votes vote down vote up
/**
 * A utility method that calculates the anchor offsets for a string.
 * Normally, the (x, y) coordinate for drawing text is a point on the
 * baseline at the left of the text string.  If you add these offsets to
 * (x, y) and draw the string, then the anchor point should coincide with
 * the (x, y) point.
 *
 * @param g2  the graphics device (not <code>null</code>).
 * @param text  the text.
 * @param anchor  the anchor point.
 * @param textBounds  the text bounds (if not <code>null</code>, this
 *                    object will be updated by this method to match the
 *                    string bounds).
 *
 * @return  The offsets.
 */
private static float[] deriveTextBoundsAnchorOffsets(Graphics2D g2,
        String text, TextAnchor anchor, Rectangle2D textBounds) {

    float[] result = new float[3];
    FontRenderContext frc = g2.getFontRenderContext();
    Font f = g2.getFont();
    FontMetrics fm = g2.getFontMetrics(f);
    Rectangle2D bounds = getTextBounds(text, fm);
    LineMetrics metrics = f.getLineMetrics(text, frc);
    float ascent = metrics.getAscent();
    result[2] = -ascent;
    float halfAscent = ascent / 2.0f;
    float descent = metrics.getDescent();
    float leading = metrics.getLeading();
    float xAdj = 0.0f;
    float yAdj = 0.0f;

    if (anchor.isHorizontalCenter()) {
        xAdj = (float) -bounds.getWidth() / 2.0f;
    }
    else if (anchor.isRight()) {
        xAdj = (float) -bounds.getWidth();
    }

    if (anchor.isTop()) {
        yAdj = -descent - leading + (float) bounds.getHeight();
    }
    else if (anchor.isHalfAscent()) {
        yAdj = halfAscent;
    }
    else if (anchor.isHorizontalCenter()) {
        yAdj = -descent - leading + (float) (bounds.getHeight() / 2.0);
    }
    else if (anchor.isBaseline()) {
        yAdj = 0.0f;
    }
    else if (anchor.isBottom()) {
        yAdj = -metrics.getDescent() - metrics.getLeading();
    }
    if (textBounds != null) {
        textBounds.setRect(bounds);
    }
    result[0] = xAdj;
    result[1] = yAdj;
    return result;
}