*/
public final class TreeFontSet {
- final static float SMALL_FONTS_BASE = 8;
- 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;
+ static final int BOLD_AND_ITALIC = Font.BOLD + Font.ITALIC;
+ final static float FONT_SIZE_CHANGE_STEP = 1.0f;
+ final static float SMALL_FONTS_BASE = 8;
+ private final static String DEFAULT_FONT = "Verdana";
+ private Font _base_font;
+ private boolean _decreased_size_by_system = false;
+ private FontMetrics _fm_large;
+ // Handy holders for font metrics
+ private FontMetrics _fm_small;
+ private Font _large_font;
+ private Font _large_font_memory;
+ private Font _large_font_system;
+ private final int _max;
+ private final int _min;
// the owner (needed to get font metrics)
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_memory;
private Font _small_font_system;
- private Font _large_font_system;
- private Font _small_italic_font_system;
- private Font _large_italic_font_system;
- // Handy holders for font metrics
- public FontMetrics _fm_small;
- FontMetrics _fm_large;
- FontMetrics _fm_small_italic;
- FontMetrics _fm_small_italic_bold;
- FontMetrics _fm_large_italic;
- FontMetrics _fm_large_italic_bold;
+ private int _small_max_ascent = 0;
// hold font measurements
- int _small_max_descent = 0;
- int _small_max_ascent = 0;
- private final int _min;
- private final int _max;
+ private int _small_max_descent = 0;
TreeFontSet( final MainPanel owner ) {
_owner = owner;
setBaseFont( new Font( DEFAULT_FONT, Font.PLAIN, 10 ) );
}
+ public FontMetrics getFontMetricsLarge() {
+ return _fm_large;
+ }
+
+ public FontMetrics getFontMetricsSmall() {
+ return _fm_small;
+ }
+
public Font getSmallFont() {
return _small_font;
}
- public Font getSmallFontSystem() {
- return _small_font_system;
+ public int getSmallMaxAscent() {
+ return _small_max_ascent;
+ }
+
+ public int getSmallMaxDescent() {
+ return _small_max_descent;
}
- void decreaseFontSize( final int min ) {
+ 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;
+ }
+ 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 );
- _large_italic_font = _large_italic_font.deriveFont( _large_italic_font.getSize() - FONT_SIZE_CHANGE_STEP );
setupFontMetrics();
}
}
return _large_font;
}
- Font getLargeItalicFont() {
- return _large_italic_font;
- }
-
- Font getLargeItalicFontSystem() {
- return _large_italic_font_system;
+ Font getLargeFontMemory() {
+ return _large_font_memory;
}
- Font getSmallItalicFont() {
- return _small_italic_font;
- }
-
- Font getSmallItalicFontSystem() {
- return _small_italic_font_system;
+ Font getSmallFontSystem() {
+ return _small_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 );
- _small_italic_font = _small_italic_font.deriveFont( _small_italic_font.getSize() + FONT_SIZE_CHANGE_STEP );
- _large_italic_font = _large_italic_font.deriveFont( _large_italic_font.getSize() + FONT_SIZE_CHANGE_STEP );
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 );
- _large_italic_font = _large_italic_font.deriveFont( 14f );
setupFontMetrics();
}
void mediumFonts() {
+ setDecreasedSizeBySystem( false );
_small_font = _small_font.deriveFont( 8f );
_large_font = _large_font.deriveFont( 10f );
- _small_italic_font = _small_italic_font.deriveFont( 8f );
- _large_italic_font = _large_italic_font.deriveFont( 10f );
setupFontMetrics();
}
}
void smallFonts() {
- _small_font = _small_font.deriveFont( SMALL_FONTS_BASE - 1 );
+ setDecreasedSizeBySystem( false );
+ _small_font = _small_font.deriveFont( SMALL_FONTS_BASE - 2 );
_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 );
- _large_italic_font = _large_italic_font.deriveFont( 3f );
+ _large_font = _large_font.deriveFont( 4f );
setupFontMetrics();
}
void tinyFonts() {
- _small_font = _small_font.deriveFont( 5f );
+ setDecreasedSizeBySystem( false );
+ _small_font = _small_font.deriveFont( 4f );
_large_font = _large_font.deriveFont( 6f );
- _small_italic_font = _small_italic_font.deriveFont( 5f );
- _large_italic_font = _large_italic_font.deriveFont( 6f );
setupFontMetrics();
}
}
private void intializeFonts() {
- final int small_size = getBaseFont().getSize() - 1;
+ final int small_size = getBaseFont().getSize() - 2;
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;
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;
}