// and Howard Hughes Medical Institute
// Copyright (C) 2003-2007 Ethalinda K.S. Cannon
// All rights reserved
-//
+//
// This 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
// 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 this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
//
// Contact: phylosoft @ gmail . com
-// WWW: www.phylosoft.org/forester
+// WWW: https://sites.google.com/site/cmzmasek/home/software/forester
package org.forester.archaeopteryx;
-import java.awt.Component;
import java.awt.Font;
import java.awt.FontMetrics;
*/
public final class TreeFontSet {
- private final static String DEFAULT_FONT = "Verdana";
- private final static float FONT_SIZE_CHANGE_STEP = 1.0f;
- static final int BOLD_AND_ITALIC = Font.BOLD + Font.ITALIC;
+ final static float SMALL_FONTS_BASE = 8;
+ private final static String DEFAULT_FONT = "Verdana";
+ final static float FONT_SIZE_CHANGE_STEP = 1.0f;
+ static final int BOLD_AND_ITALIC = Font.BOLD + Font.ITALIC;
// the owner (needed to get font metrics)
- private final Component _owner;
+ private final MainPanel _owner;
// The fonts
private Font _small_font;
private Font _large_font;
private Font _small_italic_font;
private Font _large_italic_font;
private Font _base_font;
+ private Font _small_font_system;
+ private Font _large_font_system;
+ private Font _small_italic_font_system;
+ private Font _large_italic_font_system;
+ private Font _small_font_memory;
+ private Font _large_font_memory;
+ private Font _small_italic_font_memory;
+ private Font _large_italic_font_memory;
// Handy holders for font metrics
public FontMetrics _fm_small;
FontMetrics _fm_large;
FontMetrics _fm_large_italic;
FontMetrics _fm_large_italic_bold;
// hold font measurements
- int _small_max_descent = 0;
- int _small_max_ascent = 0;
+ int _small_max_descent = 0;
+ int _small_max_ascent = 0;
+ private final int _min;
+ private final int _max;
+ private boolean _decreased_size_by_system = false;
- TreeFontSet( final Component owner ) {
+ TreeFontSet( final MainPanel owner ) {
_owner = owner;
+ _min = _owner.getConfiguration().getMinBaseFontSize();
+ _max = _owner.getConfiguration().getMinBaseFontSize();
setBaseFont( new Font( DEFAULT_FONT, Font.PLAIN, 10 ) );
}
- void decreaseFontSize() {
- if ( _large_font.getSize() > 0 ) {
+ public Font getSmallFont() {
+ return _small_font;
+ }
+
+ void decreaseFontSize( final int min, final boolean decreased_size_by_system ) {
+ if ( decreased_size_by_system && !isDecreasedSizeBySystem() ) {
+ _small_font_memory = _small_font;
+ _large_font_memory = _large_font;
+ _small_italic_font_memory = _small_italic_font;
+ _large_italic_font_memory = _large_italic_font;
+ }
+ setDecreasedSizeBySystem( decreased_size_by_system );
+ if ( _large_font.getSize() >= min ) {
_small_font = _small_font.deriveFont( _small_font.getSize() - FONT_SIZE_CHANGE_STEP );
_large_font = _large_font.deriveFont( _large_font.getSize() - FONT_SIZE_CHANGE_STEP );
_small_italic_font = _small_italic_font.deriveFont( _small_italic_font.getSize() - FONT_SIZE_CHANGE_STEP );
}
}
+ Font getLargeFontMemory() {
+ return _large_font_memory;
+ }
+
Font getBaseFont() {
return _base_font;
}
return _large_italic_font;
}
- public Font getSmallFont() {
- return _small_font;
+ Font getLargeItalicFontSystem() {
+ return _large_italic_font_system;
+ }
+
+ Font getSmallFontSystem() {
+ return _small_font_system;
}
Font getSmallItalicFont() {
return _small_italic_font;
}
+ Font getSmallItalicFontSystem() {
+ return _small_italic_font_system;
+ }
+
void increaseFontSize() {
_small_font = _small_font.deriveFont( _small_font.getSize() + FONT_SIZE_CHANGE_STEP );
_large_font = _large_font.deriveFont( _large_font.getSize() + FONT_SIZE_CHANGE_STEP );
setupFontMetrics();
}
- private void intializeFonts() {
- final int small_size = getBaseFont().getSize() - 1;
- int italic = Font.ITALIC;
- if ( getBaseFont().getStyle() == Font.BOLD ) {
- italic = italic + Font.BOLD;
- }
- _small_font = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), small_size );
- _large_font = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), getBaseFont().getSize() );
- _small_italic_font = new Font( getBaseFont().getFontName(), italic, small_size );
- _large_italic_font = new Font( getBaseFont().getFontName(), italic, getBaseFont().getSize() );
- setupFontMetrics();
+ boolean isDecreasedSizeBySystem() {
+ return _decreased_size_by_system;
}
void largeFonts() {
+ setDecreasedSizeBySystem( false );
_small_font = _small_font.deriveFont( 12f );
_large_font = _large_font.deriveFont( 14f );
_small_italic_font = _small_italic_font.deriveFont( 12f );
}
void mediumFonts() {
+ setDecreasedSizeBySystem( false );
_small_font = _small_font.deriveFont( 8f );
_large_font = _large_font.deriveFont( 10f );
_small_italic_font = _small_italic_font.deriveFont( 8f );
setupFontMetrics();
}
+ void reset() {
+ _large_font_system = _large_font;
+ }
+
void setBaseFont( final Font base_font ) {
_base_font = base_font;
intializeFonts();
}
- private void setupFontMetrics() {
- _fm_small = _owner.getFontMetrics( _small_font );
- _fm_large = _owner.getFontMetrics( _large_font );
- _fm_small_italic = _owner.getFontMetrics( _small_italic_font );
- _fm_small_italic_bold = _owner.getFontMetrics( _small_italic_font.deriveFont( Font.BOLD ) );
- _fm_large_italic = _owner.getFontMetrics( _large_italic_font );
- _fm_large_italic_bold = _owner.getFontMetrics( _large_italic_font.deriveFont( Font.BOLD ) );
- _small_max_descent = _fm_small.getMaxDescent();
- _small_max_ascent = _fm_small.getMaxAscent() + 1;
- }
-
void smallFonts() {
- _small_font = _small_font.deriveFont( 7f );
- _large_font = _large_font.deriveFont( 8f );
- _small_italic_font = _small_italic_font.deriveFont( 7f );
- _large_italic_font = _large_italic_font.deriveFont( 8f );
+ setDecreasedSizeBySystem( false );
+ _small_font = _small_font.deriveFont( SMALL_FONTS_BASE - 1 );
+ _large_font = _large_font.deriveFont( SMALL_FONTS_BASE );
+ _small_italic_font = _small_italic_font.deriveFont( SMALL_FONTS_BASE - 1 );
+ _large_italic_font = _large_italic_font.deriveFont( SMALL_FONTS_BASE );
setupFontMetrics();
}
void superTinyFonts() {
+ setDecreasedSizeBySystem( false );
_small_font = _small_font.deriveFont( 2f );
_large_font = _large_font.deriveFont( 3f );
_small_italic_font = _small_italic_font.deriveFont( 2f );
}
void tinyFonts() {
+ setDecreasedSizeBySystem( false );
_small_font = _small_font.deriveFont( 5f );
_large_font = _large_font.deriveFont( 6f );
_small_italic_font = _small_italic_font.deriveFont( 5f );
_large_italic_font = _large_italic_font.deriveFont( 6f );
setupFontMetrics();
}
+
+ private Font getLargeFontSystem() {
+ return _large_font_system;
+ }
+
+ private void intializeFonts() {
+ final int small_size = getBaseFont().getSize() - 1;
+ int italic = Font.ITALIC;
+ if ( getBaseFont().getStyle() == Font.BOLD ) {
+ italic = italic + Font.BOLD;
+ }
+ _small_font = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), small_size );
+ _large_font = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), getBaseFont().getSize() );
+ _small_italic_font = new Font( getBaseFont().getFontName(), italic, small_size );
+ _large_italic_font = new Font( getBaseFont().getFontName(), italic, getBaseFont().getSize() );
+ _small_font_system = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), small_size );
+ _large_font_system = new Font( getBaseFont().getFontName(), getBaseFont().getStyle(), getBaseFont().getSize() );
+ _small_italic_font_system = new Font( getBaseFont().getFontName(), italic, small_size );
+ _large_italic_font_system = new Font( getBaseFont().getFontName(), italic, getBaseFont().getSize() );
+ _small_font_memory = _small_font;
+ _large_font_memory = _large_font;
+ _small_italic_font_memory = _small_italic_font;
+ _large_italic_font_memory = _large_italic_font;
+ setupFontMetrics();
+ }
+
+ private void setDecreasedSizeBySystem( final boolean decreased_size_by_system ) {
+ _decreased_size_by_system = decreased_size_by_system;
+ }
+
+ private void setupFontMetrics() {
+ _fm_small = _owner.getFontMetrics( _small_font );
+ _fm_large = _owner.getFontMetrics( _large_font );
+ _fm_small_italic = _owner.getFontMetrics( _small_italic_font );
+ _fm_small_italic_bold = _owner.getFontMetrics( _small_italic_font.deriveFont( Font.BOLD ) );
+ _fm_large_italic = _owner.getFontMetrics( _large_italic_font );
+ _fm_large_italic_bold = _owner.getFontMetrics( _large_italic_font.deriveFont( Font.BOLD ) );
+ _small_max_descent = _fm_small.getMaxDescent();
+ _small_max_ascent = _fm_small.getMaxAscent() + 1;
+ }
}