/* * Copyright (c) 2005-2016 Substance Kirill Grouchnikov. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of Substance Kirill Grouchnikov nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.pushingpixels.substance.internal.utils; import java.awt.Component; import java.awt.Insets; import java.awt.Toolkit; import javax.swing.border.Border; import javax.swing.plaf.BorderUIResource; import org.pushingpixels.lafwidget.contrib.intellij.UIUtil; import org.pushingpixels.substance.api.SubstanceConstants; import org.pushingpixels.substance.api.SubstanceLookAndFeel; import org.pushingpixels.substance.api.fonts.FontPolicy; import org.pushingpixels.substance.api.fonts.FontSet; import org.pushingpixels.substance.api.shaper.ClassicButtonShaper; import org.pushingpixels.substance.internal.fonts.DefaultGnomeFontPolicy; /** * This class is responsible for computing DPI-aware insets, stroke widths, * paddings, icon sizes etc. This class if for internal use only. * * @author Kirill Grouchnikov */ public class SubstanceSizeUtils { /** * Cached control font size. */ private static int controlFontSize = -1; /** * The points to pixels ratio of the current font policy. */ private static double pointsToPixelsRatio = 1.0; /** * Gets the current control font size. * * @return Control font size. */ public static int getControlFontSize() { if (controlFontSize > 0) return controlFontSize; FontPolicy fPolicy = SubstanceLookAndFeel.getFontPolicy(); FontSet fSet = fPolicy.getFontSet("Substance", null); controlFontSize = fSet.getControlFont().getSize(); return controlFontSize; } /** * Sets the new value for the control font size. * * @param size * Control font size. */ public static void setControlFontSize(int size) { controlFontSize = size; } /** * Computes the font size for the specified component. If the component is * <code>null</code> or doesn't have font set ({@link Component#getFont()} * returns <code>null</code>), this method returns the default control font * size from {@link #getControlFontSize()}. * * @param c * Component. * @return Font size for the specified component */ public static int getComponentFontSize(Component c) { return ((c == null) || (c.getFont() == null)) ? getControlFontSize() : c.getFont().getSize(); } /** * Gets the adjusted size. The basic functionality of this method is as * follows: * * <ul> * <li>The <code>baseSize</code> parameter specifies the base value</li> * <li>The <code>forEachBase</code> and <code>toAdjustBy</code> specify how * to adjust the resulting value based on the passed <code>fontSize</code>.</li> * </ul> * * For example, if you want base value to be 1.2 pixels, and have it grow by * 0.1 pixel for every additional pixel in the font size, call this method * with the following values: * * <ul> * <li><code>baseSize</code> = 1.2</li> * <li><code>forEachBase</code> = 1</li> * <li><code>toAdjustBy</code> = 0.1</li> * </ul> * * @param fontSize * Font size. * @param baseSize * The base value. * @param forEachBase * Base units for computing the adjustment. * @param toAdjustBy * Adjustment amount for computing the adjustment. * @return Adjusted size. */ public static float getAdjustedSize(int fontSize, float baseSize, int forEachBase, float toAdjustBy) { int delta = fontSize - 11; if (delta <= 0) return baseSize; float result = baseSize + delta * toAdjustBy / forEachBase; return result; } /** * Gets the adjusted size. The basic functionality of this method is as * follows: * * <ul> * <li>The <code>baseSize</code> parameter specifies the base value</li> * <li>The <code>forEachBase</code> and <code>toAdjustBy</code> specify how * to adjust the resulting value based on the passed <code>fontSize</code>.</li> * </ul> * * For example, if you want base value to be 4 pixels, and have it grow by 1 * pixel for every 3 additional pixels in the font size, call this method * with the following values: * * <ul> * <li><code>baseSize</code> = 4</li> * <li><code>forEachBase</code> = 3</li> * <li><code>toAdjustBy</code> = 1</li> * </ul> * * @param fontSize * Font size. * @param baseSize * The base value. * @param forEachBase * Base units for computing the adjustment. * @param toAdjustBy * Adjustment amount for computing the adjustment. * @param toRoundAsEven * If <code>true</code>, the final value will be rounded down to * the closest even value. * @return Adjusted size. */ public static int getAdjustedSize(int fontSize, int baseSize, int forEachBase, int toAdjustBy, boolean toRoundAsEven) { int delta = fontSize - 11; if (delta <= 0) return baseSize; int result = baseSize + delta * toAdjustBy / forEachBase; if (toRoundAsEven && (result % 2 != 0)) result--; return result; } /** * Returns the height of arrow icons under the specified font size. * * @param fontSize * Font size. * @return Height of arrow icons under the specified font size. */ public static float getArrowIconHeight(int fontSize) { if (fontSize < 12) return 0.5f + fontSize * 0.5f; return fontSize * 0.6f; } /** * Returns the width of arrow icons under the specified font size. * * @param fontSize * Font size. * @return Width of arrow icons under the specified font size. */ public static float getArrowIconWidth(int fontSize) { int result = 2 * fontSize / 3; return result + 2; } /** * Returns the stroke width of arrow icons under the specified font size. * * @param fontSize * Font size. * @return Stroke width of arrow icons under the specified font size. */ public static float getArrowStrokeWidth(int fontSize) { return fontSize / 6.0f; } /** * Returns the stroke width of borders under the specified font size. * * @param fontSize * Font size. * @return Stroke width of borders under the specified font size. */ public static float getBorderStrokeWidth() { return UIUtil.isRetina() ? 0.5f : 1.0f; } /** * Returns the button insets under the specified font size. * * @param fontSize * Font size. * @return Button insets under the specified font size. */ public static Insets getButtonInsets(int fontSize) { // Special handling to make buttons // have the same height as text components. // We subtract the border stroke width - since the new // text component border appearance has a lighter "halo" // around the darker inner border. Insets textInsets = getTextBorderInsets(fontSize); int borderStroke = (int) getBorderStrokeWidth(); int topDelta = textInsets.top - borderStroke; int bottomDelta = textInsets.bottom - borderStroke; int lrInset = SubstanceSizeUtils.getAdjustedSize(fontSize, 4, 4, 1, false); return new Insets(topDelta, lrInset, bottomDelta, lrInset); } /** * Returns the border for check boxes under the specified font size. * * @param fontSize * Font size. * @return Border for check boxes under the specified font size. */ public static Border getCheckBoxBorder(int fontSize, boolean ltr) { // The base insets are 2,3,3,5. We add one pixel for // each 3 extra points in base control size. int tInset = getAdjustedSize(fontSize, 2, 3, 1, false); int bInset = getAdjustedSize(fontSize, 3, 3, 1, false); if (fontSize == 11) { tInset = 2; bInset = 2; } int leadingInset = getAdjustedSize(fontSize, 3, 3, 1, false); int trailingInset = getAdjustedSize(fontSize, 5, 3, 1, false); return new BorderUIResource.EmptyBorderUIResource(tInset, ltr ? leadingInset : trailingInset, bInset, ltr ? trailingInset : leadingInset); } /** * Returns the check mark size for check boxes under the specified font * size. * * @param fontSize * Font size. * @return Check mark size for check boxes under the specified font size. */ public static int getCheckBoxMarkSize(int fontSize) { return 3 + fontSize; } /** * Returns the corner radius for {@link ClassicButtonShaper} under the * specified font size. * * @param fontSize * Font size. * @return Corner radius for {@link ClassicButtonShaper} under the specified * font size. */ public static float getClassicButtonCornerRadius(int fontSize) { return getAdjustedSize(fontSize, 3, 6, 1, false); } /** * Returns the combo box border insets under the specified font size. * * @param fontSize * Font size. * @return Combo box border insets under the specified font size. */ public static Insets getComboBorderInsets(int fontSize) { // The base insets are 1,2,1,2. We add one pixel for // each 3 extra points in base control size. int tbInset = getAdjustedSize(fontSize, 1, 3, 1, false); int lrInset = getAdjustedSize(fontSize, 2, 3, 1, false); return new Insets(tbInset, lrInset, tbInset, lrInset); } /** * Returns the combo box border insets under the specified font size. * * @param fontSize * Font size. * @return Combo box border insets under the specified font size. */ public static Insets getComboLayoutInsets(int fontSize) { // The base insets are 2,2,2,2. We add one pixel for // each 4 extra points in base control size. int tbInset = getAdjustedSize(fontSize, 2, 4, 1, false); int lrInset = getAdjustedSize(fontSize, 2, 4, 1, false); return new Insets(tbInset, lrInset, tbInset, lrInset); } // /** // * Returns the combo box border insets under the specified font size. // * // * @param fontSize // * Font size. // * @return Combo box border insets under the specified font size. // */ // public static Insets getEditableComboBorderInsets(int fontSize) { // // The base insets are 2,2,2,2. We add one pixel for // // each 4 extra points in base control size. // int tbInset = getAdjustedSize(fontSize, 2, 4, 1, false); // int lrInset = getAdjustedSize(fontSize, 2, 4, 1, false); // return new Insets(tbInset, lrInset, tbInset, lrInset); // } /** * Returns the combo box text border insets under the specified font size. * * @param fontSize * Font size. * @return Combo box text border insets under the specified font size. */ public static Insets getComboTextBorderInsets(int fontSize) { // the following makes sure that the text components // and combos have the same height and text alignment // under all font sizes. Insets textInsets = getTextBorderInsets(fontSize); Insets comboInsets = getComboBorderInsets(fontSize); int topDelta = textInsets.top - comboInsets.top;// - 1; int bottomDelta = textInsets.bottom - comboInsets.bottom;// - 1; int lrInset = getAdjustedSize(fontSize, 3, 4, 1, false); return new Insets(topDelta, lrInset, bottomDelta, lrInset); } /** * Returns the default border insets under the specified font size. * * @param fontSize * Font size. * @return Default border insets under the specified font size. */ public static Insets getDefaultBorderInsets(int fontSize) { // The base insets are 2,2,2,2. We add one pixel for // each 3 extra points in base control size. int inset = getAdjustedSize(fontSize, 2, 3, 1, false); return new Insets(inset, inset, inset, inset); } /** * Returns the stroke width of double arrow icons under the specified font * size. * * @param fontSize * Font size. * @return Stroke width of double arrow icons under the specified font size. */ public static float getDoubleArrowStrokeWidth(int fontSize) { return fontSize / 8.0f; } /** * Returns the diameter of a drag bump dot under the specified font size. * * @param fontSize * Font size. * @return Diameter of a drag bump dot under the specified font size. */ public static int getDragBumpDiameter(int fontSize) { return getAdjustedSize(fontSize, 2, 4, 1, false); } /** * Returns the diameter of a big drag bump dot under the specified font * size. * * @param fontSize * Font size. * @return Diameter of a big drag bump dot under the specified font size. */ public static int getBigDragBumpDiameter(int fontSize) { int result = getAdjustedSize(fontSize, 3, 3, 1, false); if (result % 2 != 0) result++; return result; } /** * Returns the extra padding amount under the specified font size. * * @param fontSize * Font size. * @return Extra padding amount under the specified font size. */ public static int getExtraPadding(int fontSize) { if (fontSize < 14) return 0; return (int) SubstanceSizeUtils.getAdjustedSize(fontSize, 0, 3, 1.2f); } /** * Returns the focus ring padding amount under the specified font size. * * @param fontSize * Font size. * @return Focus ring padding amount under the specified font size. */ public static int getFocusRingPadding(int fontSize) { if (fontSize < 14) return 2; return 3 + (int) SubstanceSizeUtils.getAdjustedSize(fontSize, 0, 3, 0.8f); } /** * Returns the stroke width of focus rings. */ public static float getFocusStrokeWidth() { return UIUtil.isRetina() ? 0.5f : 1.0f; } /** * Returns the stroke width of close icon under the specified font size. * * @param fontSize * Font size. * @return Stroke width of close icon under the specified font size. */ public static float getCloseIconStrokeWidth(int fontSize) { return Math.max(1.0f, fontSize / 10.0f); } /** * Returns the list cell renderer insets under the specified font size. * * @param fontSize * Font size. * @return List cell renderer insets under the specified font size. */ public static Insets getListCellRendererInsets(int fontSize) { // Special handling to make non-editable combo boxes // have the same height as text components. The combo box // uses list cell renderer, so to compute the top and // bottom insets of a list cell renderer, we subtract the // insets of combo box from the insets of text component. // We also subtract the border stroke width - since the new // text component border appearance has a lighter "halo" // around the darker inner border. Insets textInsets = getTextBorderInsets(fontSize); Insets comboInsets = getComboBorderInsets(fontSize); int borderStroke = (int) getBorderStrokeWidth(); int topDelta = textInsets.top - comboInsets.top - borderStroke; int bottomDelta = textInsets.bottom - comboInsets.bottom - borderStroke; int lrInset = SubstanceSizeUtils.getAdjustedSize(fontSize, 4, 4, 1, false); return new Insets(topDelta, lrInset, bottomDelta, lrInset); } /** * Returns the check mark size of check box menu items and radio button menu * items under the specified font size. * * @param fontSize * Font size. * @return Check mark size of check box menu items and radio button menu * items under the specified font size. */ public static int getMenuCheckMarkSize(int fontSize) { int result = fontSize - 2; if (result % 2 == 0) result--; return result; } /** * Returns the margin for menu items under the specified font size. * * @param fontSize * Font size. * @return Margin for menu items under the specified font size. */ public static int getMenuItemMargin(int fontSize) { return getAdjustedSize(fontSize, 2, 4, 1, false); } /** * Returns the gap between text and icon in buttons and menu items under the * specified font size. * * @param fontSize * Font size. * @return Gap between text and icon in button menu items under the * specified font size. */ public static int getTextIconGap(int fontSize) { return getAdjustedSize(fontSize, 4, 3, 1, false); } /** * Returns the maximum button height under the specified font size. * * @param fontSize * Font size. * @return Maximum button height under the specified font size. */ public static int getMinButtonWidth(int fontSize) { return 5 * fontSize + 12; } /** * Returns the password dot diameter for password fields under the specified * font size. * * @param fontSize * Font size. * @return Password dot diameter for password fields under the specified * font size. */ public static int getPasswordDotDiameter(int fontSize) { return getAdjustedSize(fontSize, 7, 2, 1, false); } /** * Returns the password dot gap for password fields under the specified font * size. * * @param fontSize * Font size. * @return Password dot gap for password fields under the specified font * size. */ public static int getPasswordDotGap(int fontSize) { return (fontSize - 6) / 3; } /** * Returns the border for radio buttons under the specified font size. * * @param fontSize * Font size. * @return Border for radio buttons under the specified font size. */ public static Border getRadioButtonBorder(int fontSize, boolean ltr) { Border checkBoxBorder = getCheckBoxBorder(fontSize, ltr); Insets checkBoxInsets = checkBoxBorder.getBorderInsets(null); return new BorderUIResource.EmptyBorderUIResource(checkBoxInsets.top, checkBoxInsets.left - (ltr ? 0 : 2), checkBoxInsets.bottom, checkBoxInsets.right - (ltr ? 2 : 0)); } /** * Returns the check mark size for radio buttons under the specified font * size. * * @param fontSize * Font size. * @return Check mark size for radio buttons under the specified font size. */ public static int getRadioButtonMarkSize(int fontSize) { int result = fontSize; return result; } /** * Returns the width of scroll bars under the specified font size. * * @param fontSize * Font size. * @return Width of scroll bars under the specified font size. */ public static int getScrollBarWidth(int fontSize) { int result = (int) (getArrowIconWidth(fontSize) * 3 / 2) + 2; if (result % 2 == 1) result--; return result; } /** * Returns the slider thumb icon size under the specified font size. * * @param fontSize * Font size. * @return Slider thumb icon size under the specified font size. */ public static int getSliderIconSize(int fontSize) { int result = fontSize + 5; if (result % 2 != 0) result--; return result; } /** * Returns the slider tick size under the specified font size. * * @param fontSize * Font size. * @return Slider tick size under the specified font size. */ public static int getSliderTickSize(int fontSize) { return Math.max(7, fontSize - 3); } /** * Returns the slider track size under the specified font size. * * @param fontSize * Font size. * @return Slider track size under the specified font size. */ public static int getSliderTrackSize(int fontSize) { return SubstanceSizeUtils.getAdjustedSize(fontSize, 5, 4, 1, false); } /** * Returns the height of small arrow icons under the specified font size. * * @param fontSize * Font size. * @return Height of small arrow icons under the specified font size. */ public static float getSmallArrowIconHeight(int fontSize) { return getArrowIconHeight(fontSize) - 1; } /** * Returns the width of small arrow icons under the specified font size. * * @param fontSize * Font size. * @return Width of small arrow icons under the specified font size. */ public static float getSmallArrowIconWidth(int fontSize) { return getArrowIconWidth(fontSize) - 2; } /** * Returns the height of spinner arrow icons under the specified font size. * * @param fontSize * Font size. * @return Height of spinner arrow icons under the specified font size. */ public static float getSpinnerArrowIconHeight(int fontSize) { float result = SubstanceSizeUtils.getArrowIconHeight(fontSize) + SubstanceSizeUtils .getAdjustedSize(fontSize + 1, 0, 1, -0.25f); return result; } /** * Returns the width of spinner arrow icons under the specified font size. * * @param fontSize * Font size. * @return Width of spinner arrow icons under the specified font size. */ public static float getSpinnerArrowIconWidth(int fontSize) { int result = (int) (SubstanceSizeUtils.getArrowIconWidth(fontSize) + SubstanceSizeUtils .getAdjustedSize(fontSize, 1, 1, -0.15f)); if (result % 2 == 0) result--; return result; } /** * Returns the spinner border insets under the specified font size. * * @param fontSize * Font size. * @return Spinner border insets under the specified font size. */ public static Insets getSpinnerBorderInsets(int fontSize) { // make sure that spinners and combos have the same height and text // alignment under all font sizes. Insets comboInsets = getComboBorderInsets(fontSize); return new Insets(comboInsets.top + 1, comboInsets.left, comboInsets.bottom + 1, comboInsets.right); } /** * Returns the spinner arrow button insets under the specified font size. * * @param fontSize * Font size. * @return Spinner arrow button insets under the specified font size. */ public static Insets getSpinnerArrowButtonInsets(int fontSize) { int borderStrokeWidth = (int) Math.floor(getBorderStrokeWidth()); return new Insets(borderStrokeWidth, borderStrokeWidth, borderStrokeWidth, borderStrokeWidth); } // /** // * Returns the spinner button width under the specified font size. // * // * @param fontSize // * Font size. // * @return Spinner button width under the specified font size. // */ // public static int getSpinnerButtonWidth(int fontSize) { // return (int)(getArrowIconWidth(fontSize) * 3 / 2); // } /** * Returns the spinner text border insets under the specified font size. * * @param fontSize * Font size. * @return Spinner text border insets under the specified font size. */ public static Insets getSpinnerTextBorderInsets(int fontSize) { Insets textInsets = getComboTextBorderInsets(fontSize); return new Insets(textInsets.top - 1, textInsets.left, textInsets.bottom - 1, textInsets.right); } /** * Returns the height of split pane divider arrow icons under the specified * font size. * * @param fontSize * Font size. * @return Height of split pane divider arrow icons under the specified font * size. */ public static float getSplitPaneArrowIconHeight(int fontSize) { float result = SubstanceSizeUtils.getArrowIconHeight(fontSize) + SubstanceSizeUtils.getAdjustedSize(fontSize, -2, 1, -0.3f); return result; } /** * Returns the width of split pane divider arrow icons under the specified * font size. * * @param fontSize * Font size. * @return Width of split pane divider arrow icons under the specified font * size. */ public static float getSplitPaneArrowIconWidth(int fontSize) { float result = SubstanceSizeUtils.getArrowIconWidth(fontSize) + SubstanceSizeUtils.getAdjustedSize(fontSize, -2, 1, -0.25f); if (result % 2 == 0) result--; return result; } /** * Returns the offset of the first split pane divider button under the * specified font size. * * @param fontSize * Font size. * @return Offset of the first split pane divider button under the specified * font size. */ public static int getSplitPaneButtonOffset(int fontSize) { return getAdjustedSize(fontSize, 2, 3, 1, false); } /** * Returns the tabbed pane content insets under the specified size. The * {@link SubstanceConstants.TabContentPaneBorderKind#SINGLE_FULL} is * assumed. * * @param fontSize * Font size. * @return Tabbed pane content insets under the specified size. */ public static Insets getTabbedPaneContentInsets() { float borderStrokeWidth = getBorderStrokeWidth(); int inset = (int) Math.ceil(borderStrokeWidth + 0.5f); return new Insets(inset, inset, inset, inset); } /** * Returns the stroke width of tab close buttons under the specified size. * * @param fontSize * Font size. * @return Stroke width of tab close buttons under the specified size. */ public static float getTabCloseButtonStrokeWidth() { return getBorderStrokeWidth(); } /** * Returns the icon size of tab close buttons under the specified size. * * @param fontSize * Font size. * @return Icon size of tab close buttons under the specified size. */ public static int getTabCloseIconSize(int fontSize) { return fontSize - 2; } /** * Returns the table cell renderer insets under the specified font size. * * @param fontSize * Font size. * @return Table cell renderer insets under the specified font size. */ public static Insets getTableCellRendererInsets(int fontSize) { Insets textInsets = getTextBorderInsets(fontSize); Insets comboInsets = getComboBorderInsets(fontSize); int topDelta = textInsets.top - comboInsets.top - 1; int bottomDelta = textInsets.bottom - comboInsets.bottom - 2; if (fontSize == 11) { bottomDelta++; } int lrInset = SubstanceSizeUtils.getAdjustedSize(fontSize, 2, 4, 1, false); return new Insets(topDelta, lrInset, bottomDelta, lrInset); } /** * Returns the text border insets under the specified font size. * * @param fontSize * Font size. * @return Text border insets under the specified font size. */ public static Insets getTextBorderInsets(int fontSize) { // The base insets are 3,5,4,5. We add one pixel for // each 3 extra points in base control size. int tInset = getAdjustedSize(fontSize, 3, 3, 1, false); int bInset = getAdjustedSize(fontSize, 4, 3, 1, false); if (fontSize == 11) { tInset = 3; bInset = 3; } int lrInset = getAdjustedSize(fontSize, 5, 3, 1, false); return new Insets(tInset, lrInset, bInset, lrInset); } /** * Returns the text button padding amount on left and right sides under the * specified font size. * * @param fontSize * Font size. * @return Text button padding amount on left and right sides under the * specified font size. */ public static int getTextButtonLRPadding(int fontSize) { return SubstanceSizeUtils.getAdjustedSize(fontSize, 3, 2, 1, false); } /** * Returns the icon size of title pane buttons under the specified size. * * @param fontSize * Font size. * @return Icon size of title pane buttons under the specified size. */ public static int getTitlePaneIconSize() { return 5 + getControlFontSize(); } /** * Returns the tool bar drag inset under the specified font size. * * @param fontSize * Font size. * @return Tool bar drag inset under the specified font size. */ public static int getToolBarDragInset(int fontSize) { return fontSize + 5; } /** * Returns the tool bar insets under the specified font size. * * @param fontSize * Font size. * @return Tool bar insets under the specified font size. */ public static Insets getToolBarInsets(int fontSize) { int lbrInset = getAdjustedSize(fontSize, 2, 3, 1, false); int tInset = getAdjustedSize(fontSize, 1, 3, 1, false); return new Insets(tInset, lbrInset, lbrInset, lbrInset); } /** * Returns the tooltip border insets under the specified font size. * * @param fontSize * Font size. * @return Tooltip border insets under the specified font size. */ public static Insets getToolTipBorderInsets(int fontSize) { // The base insets are 1,1,1,1. We add one pixel for // each 3 extra points in base control size. int inset = getAdjustedSize(fontSize, 1, 3, 1, false); return new Insets(inset, inset, inset, inset); } /** * Returns the tree cell renderer insets under the specified font size. * * @param fontSize * Font size. * @return Tree cell renderer insets under the specified font size. */ public static Insets getTreeCellRendererInsets(int fontSize) { Insets listCellInsets = getListCellRendererInsets(fontSize); return new Insets(listCellInsets.top - 1, listCellInsets.left - 2, listCellInsets.bottom - 1, listCellInsets.right - 2); } /** * Returns the icon size of tree expand / collapse icons under the specified * size. * * @param fontSize * Font size. * @return Icon size of tree expand / collapse icons under the specified * size. */ public static int getTreeIconSize(int fontSize) { int extraPadding = SubstanceSizeUtils.getExtraPadding(fontSize); int extraPadding2 = 2 * extraPadding; return 10 + extraPadding2; } /** * Returns the points to pixels ratio of the current font policy. * * @return The points to pixels ratio of the current font policy. */ public static double getPointsToPixelsRatio() { return pointsToPixelsRatio; } /** * Resets the points to pixels ratio based on the specified font policy. * * @param fontPolicy * Font policy. */ public static void resetPointsToPixelsRatio(FontPolicy fontPolicy) { if (fontPolicy instanceof DefaultGnomeFontPolicy) { pointsToPixelsRatio = DefaultGnomeFontPolicy .getPointsToPixelsRatio(); } else { pointsToPixelsRatio = Toolkit.getDefaultToolkit() .getScreenResolution() / 72.0; } } }