Get Max Fitting FontSize
/** * The utillib library. * More information is available at http://www.jinchess.com/. * Copyright (C) 2002 Alexander Maryanovsky. * All rights reserved. * * The utillib library is free software; you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * The utillib library is distributed in the hope that it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with utillib library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ import java.awt.*; /** * Provides graphics related utilities. */ public class GraphicsUtilities{ /** * Calculates the largest size of the given font for which the given string * will fit into the given size. This method uses the default toolkit. */ public static int getMaxFittingFontSize(Graphics g, Font font, String string, Dimension size){ return getMaxFittingFontSize(g, font, string, size.width, size.height); } /** * Calculates the largest size of the given font for which the given string * will fit into the given size. */ public static int getMaxFittingFontSize(Graphics g, Font font, String string, int width, int height){ int minSize = 0; int maxSize = 288; int curSize = font.getSize(); while (maxSize - minSize > 2){ FontMetrics fm = g.getFontMetrics(new Font(font.getName(), font.getStyle(), curSize)); int fontWidth = fm.stringWidth(string); int fontHeight = fm.getLeading() + fm.getMaxAscent() + fm.getMaxDescent(); if ((fontWidth > width) || (fontHeight > height)){ maxSize = curSize; curSize = (maxSize + minSize) / 2; } else{ minSize = curSize; curSize = (minSize + maxSize) / 2; } } return curSize; } /** * Returns the <code>FontMetrics</code> for the specified <code>Font</code>. */ public static FontMetrics getFontMetrics(Font font){ return Toolkit.getDefaultToolkit().getFontMetrics(font); // DEPRECATED } /** * Returns <code>true</code> if the first rectangle completely contains the * second one. Returns <code>false</code> otherwise. This method is needed * because there is no Rectangle.contains(Rectangle) method in JDK 1.1 * (unlike claimed in the 1.2 documentation). */ public static boolean contains(Rectangle rect1, Rectangle rect2){ return (rect2.x >= rect1.x) && (rect2.y >= rect1.y) && (rect2.x+rect2.width <= rect1.x+rect1.width) && (rect2.y+rect2.height <= rect1.y+rect1.height); } /** * Returns true if the two specified rectangles intersect. Two rectangles * intersect if their intersection is nonempty. This method is not really * needed because Rectangle.intersects(Rectangle) exists in JDK1.1, but I * still like having it here for symmetry. */ public static boolean intersect(Rectangle rect1, Rectangle rect2){ return rect1.intersects(rect2); } }