/*
* Freeplane - mind map editor
* Copyright (C) 2012 Freeplane team and others
*
* this file is created by Dimitry Polivaev in 2012.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.core.ui.components.html;
import java.awt.Font;
import javax.swing.text.AttributeSet;
import javax.swing.text.html.CSS;
import javax.swing.text.html.StyleSheet;
import org.freeplane.core.ui.components.UITools;
public class ScaledStyleSheet extends StyleSheet{
/**
*
*/
private static final long serialVersionUID = 1L;
public Font getFont(AttributeSet a) {
final Font font = super.getFont(a);
final float fontScaleFactor = getFontScaleFactor(a);
return super.getFont(font.getFamily(), font.getStyle(), Math.round(font.getSize2D() * fontScaleFactor));
}
private float getFontScaleFactor(AttributeSet a) {
final Object attribute = a.getAttribute(CSS.Attribute.FONT_SIZE);
if(attribute == null)
return UITools.FONT_SCALE_FACTOR;
final String fontSize = attribute.toString();
final int fsLength = fontSize.length();
if(fsLength <= 1
|| Character.isDigit(fontSize.charAt(fsLength-1))
|| fontSize.endsWith("pt"))
return UITools.FONT_SCALE_FACTOR;
if(fontSize.endsWith("px"))
return 1/1.3f;
if(fontSize.endsWith("%") || fontSize.endsWith("em") || fontSize.endsWith("ex")
|| fontSize.endsWith("er"))
return getFontScaleFactor(a.getResolveParent());
return UITools.FONT_SCALE_FACTOR;
}
}