java.awt.FontMetrics#getStringBounds ( )源码实例Demo

下面列出了java.awt.FontMetrics#getStringBounds ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: littleluck   文件: DemoPanel.java
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g.create();
    Dimension size = getSize();

    Color textColor = Utilities.deriveColorHSB(getBackground(), 0, 0, -.3f);
    Color dotColor = Utilities.deriveColorHSB(textColor, 0, .2f, -.08f);
    g2.setColor(textColor);
    g2.setFont(UIManager.getFont("Label.font").deriveFont(32f));
    FontMetrics metrics = g2.getFontMetrics();
    Rectangle2D rect = metrics.getStringBounds(message, g2);
    Rectangle2D dotRect = metrics.getStringBounds(".", g2);
    float x = (float) (size.width - (rect.getWidth() + 3 * dotRect.getWidth())) / 2;
    float y = (float) (size.height - rect.getHeight()) / 2;
    g2.drawString(message, x, y);
    int tri = getTriState();
    float dx = 0;
    for (int i = 0; i < 3; i++) {
        g2.setColor(animator.isRunning() && i == tri ?
                dotColor :
                textColor);
        g2.drawString(".", x + (float) (rect.getWidth() + dx), y);
        dx += dotRect.getWidth();
    }
}
 
源代码2 项目: astor   文件: TextUtilities.java
/**
 * Returns the bounds for the specified text.
 *
 * @param text  the text (<code>null</code> permitted).
 * @param g2  the graphics context (not <code>null</code>).
 * @param fm  the font metrics (not <code>null</code>).
 *
 * @return The text bounds (<code>null</code> if the <code>text</code>
 *         argument is <code>null</code>).
 */
public static Rectangle2D getTextBounds(String text, Graphics2D g2,
        FontMetrics fm) {

    final Rectangle2D bounds;
    if (TextUtilities.useFontMetricsGetStringBounds) {
        bounds = fm.getStringBounds(text, g2);
        // getStringBounds() can return incorrect height for some Unicode
        // characters...see bug parade 6183356, let's replace it with
        // something correct
        LineMetrics lm = fm.getFont().getLineMetrics(text,
                g2.getFontRenderContext());
        bounds.setRect(bounds.getX(), bounds.getY(), bounds.getWidth(),
                lm.getHeight());
    }
    else {
        double width = fm.stringWidth(text);
        double height = fm.getHeight();
        bounds = new Rectangle2D.Double(0.0, -fm.getAscent(), width,
                height);
    }
    return bounds;
}
 
源代码3 项目: runelite   文件: Perspective.java
/**
 * Calculates text position and centers on minimap depending on string length.
 *
 * @param client the game client
 * @param graphics the game graphics
 * @param localLocation local location of the tile
 * @param text string for width measurement
 * @return a {@link Point} on screen corresponding to the given
 * localLocation.
 */
public static Point getCanvasTextMiniMapLocation(
	@Nonnull Client client,
	@Nonnull Graphics2D graphics,
	@Nonnull LocalPoint localLocation,
	@Nonnull String text)
{
	Point p = Perspective.localToMinimap(client, localLocation);

	if (p == null)
	{
		return null;
	}

	FontMetrics fm = graphics.getFontMetrics();
	Rectangle2D bounds = fm.getStringBounds(text, graphics);
	int xOffset = p.getX() - (int) (bounds.getWidth() / 2);
	int yOffset = p.getY() - (int) (bounds.getHeight() / 2) + fm.getAscent();

	return new Point(xOffset, yOffset);
}
 
源代码4 项目: beautyeye   文件: DemoPanel.java
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g.create();
    Dimension size = getSize();

    Color textColor = Utilities.deriveColorHSB(getBackground(), 0, 0, -.3f);
    Color dotColor = Utilities.deriveColorHSB(textColor, 0, .2f, -.08f);
    g2.setColor(textColor);
    g2.setFont(UIManager.getFont("Label.font").deriveFont(32f));
    FontMetrics metrics = g2.getFontMetrics();
    Rectangle2D rect = metrics.getStringBounds(message, g2);
    Rectangle2D dotRect = metrics.getStringBounds(".", g2);
    float x = (float) (size.width - (rect.getWidth() + 3 * dotRect.getWidth())) / 2;
    float y = (float) (size.height - rect.getHeight()) / 2;
    g2.drawString(message, x, y);
    int tri = getTriState();
    float dx = 0;
    for (int i = 0; i < 3; i++) {
        g2.setColor(animator.isRunning() && i == tri ?
                dotColor :
                textColor);
        g2.drawString(".", x + (float) (rect.getWidth() + dx), y);
        dx += dotRect.getWidth();
    }
}
 
源代码5 项目: ccu-historian   文件: TextUtilities.java
/**
 * Returns the bounds for the specified text.
 *
 * @param text  the text (<code>null</code> permitted).
 * @param g2  the graphics context (not <code>null</code>).
 * @param fm  the font metrics (not <code>null</code>).
 *
 * @return The text bounds (<code>null</code> if the <code>text</code>
 *         argument is <code>null</code>).
 */
public static Rectangle2D getTextBounds(String text, Graphics2D g2, 
        FontMetrics fm) {

    Rectangle2D bounds;
    if (TextUtilities.useFontMetricsGetStringBounds) {
        bounds = fm.getStringBounds(text, g2);
        // getStringBounds() can return incorrect height for some Unicode
        // characters...see bug parade 6183356, let's replace it with
        // something correct
        LineMetrics lm = fm.getFont().getLineMetrics(text,
                g2.getFontRenderContext());
        bounds.setRect(bounds.getX(), bounds.getY(), bounds.getWidth(),
                lm.getHeight());
    }
    else {
        double width = fm.stringWidth(text);
        double height = fm.getHeight();
        if (logger.isDebugEnabled()) {
            logger.debug("Height = " + height);
        }
        bounds = new Rectangle2D.Double(0.0, -fm.getAscent(), width,
                height);
    }
    return bounds;
}
 
源代码6 项目: runelite   文件: PestControlOverlay.java
private void renderProgressWidget(Graphics2D graphics)
{
	Widget bar = client.getWidget(WidgetInfo.PEST_CONTROL_ACTIVITY_BAR).getChild(0);
	Rectangle2D bounds = bar.getBounds().getBounds2D();

	Widget prgs = client.getWidget(WidgetInfo.PEST_CONTROL_ACTIVITY_PROGRESS).getChild(0);
	int perc = (int) ((prgs.getBounds().getWidth() / bounds.getWidth()) * 100);

	Color color = Color.GREEN;
	if (perc < 25)
	{
		color = Color.RED;
	}

	String text = String.valueOf(perc) + "%";

	FontMetrics fm = graphics.getFontMetrics();
	Rectangle2D textBounds = fm.getStringBounds(text, graphics);
	int x = (int) (bounds.getX() - textBounds.getWidth());
	int y = (int) (bounds.getY() + fm.getHeight() - 2);

	graphics.setColor(Color.BLACK);
	graphics.drawString(text, x + 1, y + 1);
	graphics.setColor(color);
	graphics.drawString(text, x, y);
}
 
源代码7 项目: ShootPlane   文件: GameButton.java
@Override
   protected void paintComponent(Graphics g) {
super.paintComponent(g);
Image buttonBgImg = null;
if (this.buttonStatus.equals(BUTTON_NORMAL)) {
    buttonBgImg = new ImageIcon(Config.BUTTON_BG_IMG).getImage();
} else if (this.buttonStatus.equals(BUTTON_HOVER)) {
    buttonBgImg = new ImageIcon(Config.BUTTON_HOVER_BG_IMG).getImage();
}
int buttonWidth = buttonBgImg.getWidth(this);
int buttonHeight = buttonBgImg.getHeight(this);

this.setSize(buttonWidth, buttonHeight);
this.setPreferredSize(new Dimension(buttonWidth, buttonHeight));

Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(buttonBgImg, 0, 0, buttonWidth, buttonHeight, this);
FontMetrics metric = g.getFontMetrics();
Rectangle2D rect = metric.getStringBounds(text, g);
g2d.drawString(text, (float) (buttonWidth / 2 - rect.getWidth() / 2),
	(float) ((buttonHeight / 2) + ((metric.getAscent() + metric.getDescent()) / 2 - metric.getDescent())));
   }
 
源代码8 项目: plugins   文件: DevToolsOverlay.java
private void renderInventory(Graphics2D graphics)
{
	Widget inventoryWidget = client.getWidget(WidgetInfo.INVENTORY);
	if (inventoryWidget == null || inventoryWidget.isHidden())
	{
		return;
	}

	for (WidgetItem item : inventoryWidget.getWidgetItems())
	{
		Rectangle slotBounds = item.getCanvasBounds();

		String idText = "" + item.getId();
		FontMetrics fm = graphics.getFontMetrics();
		Rectangle2D textBounds = fm.getStringBounds(idText, graphics);

		int textX = (int) (slotBounds.getX() + (slotBounds.getWidth() / 2) - (textBounds.getWidth() / 2));
		int textY = (int) (slotBounds.getY() + (slotBounds.getHeight() / 2) + (textBounds.getHeight() / 2));

		graphics.setColor(new Color(255, 255, 255, 65));
		graphics.fill(slotBounds);

		graphics.setColor(Color.BLACK);
		graphics.drawString(idText, textX + 1, textY + 1);
		graphics.setColor(YELLOW);
		graphics.drawString(idText, textX, textY);
	}
}
 
源代码9 项目: plugins   文件: WidgetOverlay.java
private void renderProgressWidget(Graphics2D graphics)
{
	String text;
	int percentage;

	Widget bar = client.getWidget(WidgetInfo.PEST_CONTROL_ACTIVITY_BAR).getChild(0);
	Rectangle2D bounds = bar.getBounds().getBounds2D();

	Widget prgs = client.getWidget(WidgetInfo.PEST_CONTROL_ACTIVITY_PROGRESS).getChild(0);

	// At 0% the inner widget changes and your progress will not increase anymore
	if ((int) (prgs.getBounds().getX()) - bounds.getX() != 2)
	{
		percentage = 0;
		text = "FAILED";
	}
	else
	{
		percentage = (int) ((prgs.getBounds().getWidth() / bounds.getWidth()) * 100);
		text = percentage + "%";
	}

	Color color = Color.GREEN;
	if (percentage < 25)
	{
		color = Color.RED;
	}

	FontMetrics fm = graphics.getFontMetrics();
	Rectangle2D textBounds = fm.getStringBounds(text, graphics);
	int x = (int) (bounds.getX() - textBounds.getWidth() - 4);
	int y = (int) (bounds.getY() + fm.getHeight() - 2);

	graphics.setColor(Color.BLACK);
	graphics.drawString(text, x + 1, y + 1);
	graphics.setColor(color);
	graphics.drawString(text, x, y);
}
 
源代码10 项目: snap-desktop   文件: DiagramCanvas.java
private void drawTextBox(Graphics2D g2D, String text, int x0, int y0, Color color) {

        final FontMetrics fontMetrics = g2D.getFontMetrics();
        final Rectangle2D textBounds = fontMetrics.getStringBounds(text, g2D);
        x0 -= textBounds.getWidth() / 2;
        textBounds.setRect(textBounds.getX() - 1, textBounds.getY(), textBounds.getWidth(), textBounds.getHeight());
        Rectangle2D.Double r = new Rectangle2D.Double(x0 + textBounds.getX() - 2.0,
                                                      y0 + textBounds.getY() - 2.0,
                                                      textBounds.getWidth() + 4.0,
                                                      textBounds.getHeight() + 4.0);

        if (r.getMaxX() > getWidth()) {
            r.setRect(getWidth() - r.getWidth(), r.getY(), r.getWidth(), r.getHeight());
        }
        if (r.getMinX() < 0) {
            r.setRect(0, r.getY(), r.getWidth(), r.getHeight());
        }
        if (r.getMaxY() > getHeight()) {
            r.setRect(r.getX(), getHeight() - r.getHeight(), r.getWidth(), r.getHeight());
        }
        if (r.getMinY() < 0) {
            r.setRect(r.getX(), 0, r.getWidth(), r.getHeight());
        }
        g2D.setColor(color);
        g2D.fill(r);
        g2D.setColor(Color.black);
        g2D.draw(r);
        g2D.drawString(text, x0, y0);
    }
 
源代码11 项目: netbeans   文件: LineNumbersActionsBar.java
private boolean checkLinesWidth(Graphics g) {
    FontMetrics fm = g.getFontMetrics(getLinesFont());
    Rectangle2D rect = fm.getStringBounds(Integer.toString(linesCount), g);
    linesWidth = (int) rect.getWidth() + LINES_BORDER_WIDTH * 2;
    if (linesWidth != oldLinesWidth) {
        oldLinesWidth = linesWidth;
        revalidate();
        repaint();
        return true;
    }
    return false;
}
 
源代码12 项目: MtgDesktopCompanion   文件: DisplayableCard.java
private void drawString(Graphics g, String s, Color background, Color foreground, int x, int y) {
	g.setFont(new Font("default", Font.BOLD, 12));
	g.setColor(background);
	FontMetrics fm = g.getFontMetrics();
	Rectangle2D rect = fm.getStringBounds(s, g);
	g.fillRect(x, y - fm.getAscent(), (int) rect.getWidth(), (int) rect.getHeight());
	g.setColor(foreground);
	g.drawString(s, x, y);
}
 
源代码13 项目: pumpernickel   文件: PlafPaintUtils.java
/**
 * Paint a String centered at a given (x,y) coordinate.
 */
public static void paintCenteredString(Graphics2D g, String str, Font font,
		int centerX, int centerY) {
	g.setFont(font);
	FontMetrics fm = g.getFontMetrics();
	Rectangle2D r = fm.getStringBounds(str, g);
	float x = (float) (centerX - r.getWidth() / 2);
	float y = (float) (centerY - r.getHeight() / 2 - r.getY());
	g.drawString(str, x, y);
}
 
源代码14 项目: runelite   文件: WidgetInspectorOverlay.java
private void renderWiw(Graphics2D g, Object wiw, Color color)
{
	g.setColor(color);

	if (wiw instanceof WidgetItem)
	{
		WidgetItem wi = (WidgetItem) wiw;
		Rectangle bounds = wi.getCanvasBounds();
		g.draw(bounds);

		String text = wi.getId() + "";
		FontMetrics fm = g.getFontMetrics();
		Rectangle2D textBounds = fm.getStringBounds(text, g);

		int textX = (int) (bounds.getX() + (bounds.getWidth() / 2) - (textBounds.getWidth() / 2));
		int textY = (int) (bounds.getY() + (bounds.getHeight() / 2) + (textBounds.getHeight() / 2));

		g.setColor(Color.BLACK);
		g.drawString(text, textX + 1, textY + 1);
		g.setColor(Color.ORANGE);
		g.drawString(text, textX, textY);
	}
	else
	{
		Widget w = (Widget) wiw;
		g.draw(w.getBounds());
	}
}
 
源代码15 项目: ReactionDecoder   文件: AbstractAWTLayout.java
/**
 *
 * @param g
 * @param text
 * @param cX
 * @param cY
 * @return
 */
public Point2f getTextPoint(Graphics g, String text, double cX, double cY) {
    FontMetrics metrics = g.getFontMetrics();
    Rectangle2D stringBounds = metrics.getStringBounds(text, g);
    double halfWidth = stringBounds.getWidth() / 2;
    double halfHeight = stringBounds.getHeight() / 2;
    double ascent = metrics.getAscent();
    float x = (float) (cX - halfWidth);
    float y = (float) (cY - halfHeight + ascent);
    return new Point2f(x, y);
}
 
源代码16 项目: plugins   文件: WorldMapRegionOverlay.java
private void drawRegionOverlay(Graphics2D graphics)
{
	RenderOverview ro = client.getRenderOverview();
	Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
	float pixelsPerTile = ro.getWorldMapZoom();

	if (map == null)
	{
		return;
	}

	Rectangle worldMapRect = map.getBounds();
	graphics.setClip(worldMapRect);

	int widthInTiles = (int) Math.ceil(worldMapRect.getWidth() / pixelsPerTile);
	int heightInTiles = (int) Math.ceil(worldMapRect.getHeight() / pixelsPerTile);

	Point worldMapPosition = ro.getWorldMapPosition();

	// Offset in tiles from anchor sides
	int yTileMin = worldMapPosition.getY() - heightInTiles / 2;
	int xRegionMin = (worldMapPosition.getX() - widthInTiles / 2) & REGION_TRUNCATE;
	int xRegionMax = ((worldMapPosition.getX() + widthInTiles / 2) & REGION_TRUNCATE) + REGION_SIZE;
	int yRegionMin = (yTileMin & REGION_TRUNCATE);
	int yRegionMax = ((worldMapPosition.getY() + heightInTiles / 2) & REGION_TRUNCATE) + REGION_SIZE;
	int regionPixelSize = (int) Math.ceil(REGION_SIZE * pixelsPerTile);

	for (int x = xRegionMin; x < xRegionMax; x += REGION_SIZE)
	{
		for (int y = yRegionMin; y < yRegionMax; y += REGION_SIZE)
		{
			graphics.setColor(WHITE_TRANSLUCENT);

			int yTileOffset = -(yTileMin - y);
			int xTileOffset = x + widthInTiles / 2 - worldMapPosition.getX();

			int xPos = ((int) (xTileOffset * pixelsPerTile)) + (int) worldMapRect.getX();
			int yPos = (worldMapRect.height - (int) (yTileOffset * pixelsPerTile)) + (int) worldMapRect.getY();
			// Offset y-position by a single region to correct for drawRect starting from the top
			yPos -= regionPixelSize;

			graphics.drawRect(xPos, yPos, regionPixelSize, regionPixelSize);

			int regionId = ((x >> 6) << 8) | (y >> 6);
			String regionText = String.valueOf(regionId);
			FontMetrics fm = graphics.getFontMetrics();
			Rectangle2D textBounds = fm.getStringBounds(regionText, graphics);
			int labelWidth = (int) textBounds.getWidth() + 2 * LABEL_PADDING;
			int labelHeight = (int) textBounds.getHeight() + 2 * LABEL_PADDING;
			graphics.fillRect(xPos, yPos, labelWidth, labelHeight);
			graphics.setColor(Color.BLACK);
			graphics.drawString(regionText, xPos + LABEL_PADDING, yPos + (int) textBounds.getHeight() + LABEL_PADDING);
		}
	}
}
 
源代码17 项目: radiance   文件: ReflectedImageLabel.java
/** 
 * Paints the component
 * 
 * @param graphics The graphics context
 */
public void paintComponent(Graphics graphics) {
    // Don't paint if I'm off screen
    if ((getX() + getWidth() < 0) && (getY() + getHeight() < 0)) {
        return;
    }

    Graphics2D g = (Graphics2D) graphics;
    Image image = bufferedImage;

    int drawHeight = (int) ((double) getHeight() / 1.5);

    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
            RenderingHints.VALUE_INTERPOLATION_BILINEAR);

    // SiAlphaCompositemple scale only
    Composite oldAc = g.getComposite();
    g.setComposite(alphaComposite);
    g.drawImage(image, 0, 0, getWidth(), getHeight(), 0, 0, image
            .getWidth(null), image.getHeight(null), null);
    // Draw text if there is any...
    if ((text != null) && (text.length() > 0)) {
        Graphics2D g2d = (Graphics2D) graphics;
        Rectangle2D bounds = reference.getStringBounds(text, g2d
                .getFontRenderContext());
        double scaleFactor = (double) getWidth() / image.getWidth(null);
        double scaleFactor2 = (double) getWidth() / bounds.getWidth();
        int fontSize = (int) Math.min(25.0 * scaleFactor,
                14.0 * scaleFactor2);
        Font font = new Font("Arial", Font.BOLD, fontSize);
        g2d.setFont(font);
        int dx = (getWidth() - (int) font.getStringBounds(text,
                g2d.getFontRenderContext()).getWidth()) / 2;
        int dy = drawHeight + 2 * (int) (bounds.getHeight() * scaleFactor);
        Color background = this.getBackground();
        int red = background.getRed();
        int green = background.getRed();
        int blue = background.getRed();
        graphics.setColor(new Color(red,green,blue,96));
        FontMetrics fm = g2d.getFontMetrics();
        Rectangle2D rect = fm.getStringBounds(text,graphics);
       
        graphics.fillRoundRect(dx-(int)rect.getHeight()/2, dy - (int) g2d.getFontMetrics().getAscent(),
                (int)rect.getWidth()+((int)rect.getHeight()), fm.getAscent() + fm.getDescent(),(int)rect.getHeight(),(int)rect.getHeight());
        graphics.setColor(this.getForeground());
        graphics.drawString(text, dx, dy);
    }
    g.setComposite(oldAc);

}
 
源代码18 项目: PolyGlot   文件: PButton.java
@Override
public void paintComponent(Graphics g) {
    boolean enabled = isEnabled();
    Color bgColor;
    Color fontColor;
    final int thisHeight = getHeight();
    final int thisWidth = getWidth();
    
    if (!enabled) {
        bgColor = PGTUtil.COLOR_DISABLED_BG;
        fontColor = PGTUtil.COLOR_DISABLED_FOREGROUND;
    } else if (mousePressed && mouseEntered) {
        bgColor = PGTUtil.COLOR_SELECTED_BG;
        fontColor = getForeground();
    } else {
        bgColor = PGTUtil.COLOR_ENABLED_BG;
        fontColor = getForeground();
    }
    
    if (activeSelected) {
        g.setColor(Color.black);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
    
    // turn on anti-alias mode
    Graphics2D antiAlias = (Graphics2D) g;
    antiAlias.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    g.setColor(bgColor);
    
    g.fillRect(2, 2, thisWidth - 4, thisHeight - 4);

    // draw black border on mouseover if button enabled
    if (mouseEntered && enabled) {
        g.setColor(PGTUtil.COLOR_MOUSEOVER_BORDER);
        g.drawRect(1, 1, thisWidth - 3, thisHeight - 3);
    }
    
    g.setColor(fontColor);
    g.setFont(getFont());
    
    char[] text = getText().toCharArray();
    FontMetrics fm = g.getFontMetrics(getFont());
    Rectangle2D rec = fm.getStringBounds(getText(), g);
    int stringW = (int) Math.round(rec.getWidth());
    int stringH = (int) Math.round(rec.getHeight());
    g.drawChars(text, 0, text.length, (thisWidth/2) - (stringW/2), thisHeight/2 + stringH/4);
    
    Icon icon = this.getIcon();
    if (icon != null) {
        icon.paintIcon(this, g, (thisWidth -icon.getIconWidth())/2, (thisHeight - icon.getIconHeight())/2);
    }
}
 
源代码19 项目: WhiteRabbit   文件: LabeledRectangle.java
public void paint(Graphics g) {
	if (!isVisible)
		return;		
	
	Graphics2D g2d = (Graphics2D) g.create();		
	
	g2d.setColor(transparentColor);
	g2d.fillRect(x, y, width, height);
	if (isSelected) {
		g2d.setColor(Color.BLACK);
		g2d.setStroke(dashed);
	} else {
		g2d.setColor(baseColor);
		g2d.setStroke(stroke);
	}
	g2d.drawRect(x, y, width, height);
	g2d.setColor(Color.BLACK);

	g2d.setFont(new Font("default", Font.PLAIN, FONT_SIZE));
	FontMetrics fm = g2d.getFontMetrics();

	Rectangle2D r = fm.getStringBounds(item.outputName(), g2d);
	if (r.getWidth() >= width) {
		int breakPoint = 0;
		int index = nextBreakPoint(item.outputName(), 0);
		double midPoint = item.outputName().length() / 2d;
		while (index != -1) {
			if (Math.abs(index - midPoint) < Math.abs(breakPoint - midPoint))
				breakPoint = index;
			index = nextBreakPoint(item.outputName(), index + 1);
		}
		if (breakPoint == 0) {
			breakPoint = (int) midPoint + 1;
		} else {
			breakPoint++;
		}
		String line1 = item.outputName().substring(0, breakPoint);
		String line2 = item.outputName().substring(breakPoint);

		Rectangle2D r1 = fm.getStringBounds(line1, g2d);
		Rectangle2D r2 = fm.getStringBounds(line2, g2d);
		if (r1.getWidth() >= width) {
			line1 = item.outputName().substring(0, (int) midPoint);
			line2 = item.outputName().substring((int) midPoint);
			r1 = fm.getStringBounds(line1, g2d);
			r2 = fm.getStringBounds(line2, g2d);
		} else if (r2.getWidth() >= width) {
			line1 = item.outputName().substring(0, (int) midPoint);
			line2 = item.outputName().substring((int) midPoint);
			r1 = fm.getStringBounds(line1, g2d);
			r2 = fm.getStringBounds(line2, g2d);
		}
		// If both lines are too wide, then the text will still go out of bounds
		int textX1 = (this.getWidth() - (int) r1.getWidth()) / 2;
		int textY1 = (this.getHeight() / 2 - (int) r1.getHeight()) / 2 + fm.getAscent();
		g2d.drawString(line1, x + textX1, y + textY1);

		int textX2 = (this.getWidth() - (int) r2.getWidth()) / 2;
		int textY2 = (int) Math.round(this.getHeight() * 1.5 - (int) r2.getHeight()) / 2 + fm.getAscent();
		g2d.drawString(line2, x + textX2, y + textY2);
	} else {
		int textX = (this.getWidth() - (int) r.getWidth()) / 2;
		int textY = (this.getHeight() - (int) r.getHeight()) / 2 + fm.getAscent();
		g2d.drawString(item.outputName(), x + textX, y + textY);
	}
}
 
源代码20 项目: runelite   文件: WorldMapRegionOverlay.java
private void drawRegionOverlay(Graphics2D graphics)
{
	RenderOverview ro = client.getRenderOverview();
	Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
	Float pixelsPerTile = ro.getWorldMapZoom();

	if (map == null)
	{
		return;
	}

	Rectangle worldMapRect = map.getBounds();
	graphics.setClip(worldMapRect);

	int widthInTiles = (int) Math.ceil(worldMapRect.getWidth() / pixelsPerTile);
	int heightInTiles = (int) Math.ceil(worldMapRect.getHeight() / pixelsPerTile);

	Point worldMapPosition = ro.getWorldMapPosition();

	// Offset in tiles from anchor sides
	int yTileMin = worldMapPosition.getY() - heightInTiles / 2;
	int xRegionMin = (worldMapPosition.getX() - widthInTiles / 2) & REGION_TRUNCATE;
	int xRegionMax = ((worldMapPosition.getX() + widthInTiles / 2) & REGION_TRUNCATE) + REGION_SIZE;
	int yRegionMin = (yTileMin & REGION_TRUNCATE);
	int yRegionMax = ((worldMapPosition.getY() + heightInTiles / 2) & REGION_TRUNCATE) + REGION_SIZE;
	int regionPixelSize = (int) Math.ceil(REGION_SIZE * pixelsPerTile);

	for (int x = xRegionMin; x < xRegionMax; x += REGION_SIZE)
	{
		for (int y = yRegionMin; y < yRegionMax; y += REGION_SIZE)
		{
			graphics.setColor(WHITE_TRANSLUCENT);

			int yTileOffset = -(yTileMin - y);
			int xTileOffset = x + widthInTiles / 2 - worldMapPosition.getX();

			int xPos = ((int) (xTileOffset * pixelsPerTile)) + (int) worldMapRect.getX();
			int yPos = (worldMapRect.height - (int) (yTileOffset * pixelsPerTile)) + (int) worldMapRect.getY();
			// Offset y-position by a single region to correct for drawRect starting from the top
			yPos -= regionPixelSize;

			graphics.drawRect(xPos, yPos, regionPixelSize, regionPixelSize);

			int regionId = ((x >> 6) << 8) | (y >> 6);
			String regionText = String.valueOf(regionId);
			FontMetrics fm = graphics.getFontMetrics();
			Rectangle2D textBounds = fm.getStringBounds(regionText, graphics);
			int labelWidth = (int) textBounds.getWidth() + 2 * LABEL_PADDING;
			int labelHeight = (int) textBounds.getHeight() + 2 * LABEL_PADDING;
			graphics.fillRect(xPos, yPos, labelWidth, labelHeight);
			graphics.setColor(Color.BLACK);
			graphics.drawString(regionText, xPos + LABEL_PADDING, yPos + (int) textBounds.getHeight() + LABEL_PADDING);
		}
	}
}