diff options
Diffstat (limited to 'src/jogamp/graph/font')
-rw-r--r-- | src/jogamp/graph/font/JavaFontLoader.java | 43 | ||||
-rw-r--r-- | src/jogamp/graph/font/UbuntuFontLoader.java | 35 | ||||
-rw-r--r-- | src/jogamp/graph/font/typecast/TypecastFont.java | 2 |
3 files changed, 55 insertions, 25 deletions
diff --git a/src/jogamp/graph/font/JavaFontLoader.java b/src/jogamp/graph/font/JavaFontLoader.java index 6769a691a..33505e797 100644 --- a/src/jogamp/graph/font/JavaFontLoader.java +++ b/src/jogamp/graph/font/JavaFontLoader.java @@ -58,8 +58,13 @@ public class JavaFontLoader implements FontSet { javaFontPath = System.getProperty("java.home") + "/lib/fonts/"; } + // FIXME: Add cache size to limit memory usage static final IntObjectHashMap fontMap = new IntObjectHashMap(); + static boolean is(int bits, int bit) { + return 0 != ( bits & bit ) ; + } + public Font getDefault() { return get(FAMILY_REGULAR, 0) ; // Sans Serif Regular } @@ -71,12 +76,13 @@ public class JavaFontLoader implements FontSet { } // 1st process Sans Serif (2 fonts) - if( 0 == ( style & STYLE_SERIF ) ) { - if( 0 != ( style & STYLE_BOLD ) ) { - font = abspath(availableFontFileNames[5]); + if( is(style, STYLE_SERIF) ) { + if( is(style, STYLE_BOLD) ) { + font = abspath(availableFontFileNames[5], family, style); } else { - font = abspath(availableFontFileNames[4]); + font = abspath(availableFontFileNames[4], family, style); } + fontMap.put( ( family << 8 ) | style, font ); return font; } @@ -86,24 +92,24 @@ public class JavaFontLoader implements FontSet { case FAMILY_MEDIUM: case FAMILY_CONDENSED: case FAMILY_REGULAR: - if( 0 != ( style & STYLE_BOLD ) ) { - if( 0 != ( style & STYLE_ITALIC ) ) { - font = abspath(availableFontFileNames[3]); + if( is(style, STYLE_BOLD) ) { + if( is(style, STYLE_ITALIC) ) { + font = abspath(availableFontFileNames[3], family, style); } else { - font = abspath(availableFontFileNames[2]); + font = abspath(availableFontFileNames[2], family, style); } - } else if( 0 != ( style & STYLE_ITALIC ) ) { - font = abspath(availableFontFileNames[1]); + } else if( is(style, STYLE_ITALIC) ) { + font = abspath(availableFontFileNames[1], family, style); } else { - font = abspath(availableFontFileNames[0]); + font = abspath(availableFontFileNames[0], family, style); } break; case FAMILY_MONOSPACED: - if( 0 != ( style & STYLE_BOLD ) ) { - font = abspath(availableFontFileNames[7]); + if( is(style, STYLE_BOLD) ) { + font = abspath(availableFontFileNames[7], family, style); } else { - font = abspath(availableFontFileNames[6]); + font = abspath(availableFontFileNames[6], family, style); } break; } @@ -111,8 +117,13 @@ public class JavaFontLoader implements FontSet { return font; } - Font abspath(String fname) { - return FontFactory.getFontConstr().create(javaFontPath+fname); + Font abspath(String fname, int family, int style) { + final Font f = FontFactory.getFontConstr().create(javaFontPath+fname); + if(null != f) { + fontMap.put( ( family << 8 ) | style, f ); + } + return f; + } } diff --git a/src/jogamp/graph/font/UbuntuFontLoader.java b/src/jogamp/graph/font/UbuntuFontLoader.java index 77d2cea03..e09ea85e5 100644 --- a/src/jogamp/graph/font/UbuntuFontLoader.java +++ b/src/jogamp/graph/font/UbuntuFontLoader.java @@ -27,6 +27,7 @@ */ package jogamp.graph.font; +import com.jogamp.common.util.IntObjectHashMap; import com.jogamp.graph.font.Font; import com.jogamp.graph.font.FontSet; import com.jogamp.graph.font.FontFactory; @@ -58,6 +59,9 @@ public class UbuntuFontLoader implements FontSet { private UbuntuFontLoader() { } + // FIXME: Add cache size to limit memory usage + static final IntObjectHashMap fontMap = new IntObjectHashMap(); + static boolean is(int bits, int bit) { return 0 != ( bits & bit ) ; } @@ -68,7 +72,10 @@ public class UbuntuFontLoader implements FontSet { public Font get(int family, int style) { - Font font = null; + Font font = (Font)fontMap.get( ( family << 8 ) | style ); + if (font != null) { + return font; + } switch (family) { case FAMILY_MONOSPACED: @@ -76,30 +83,30 @@ public class UbuntuFontLoader implements FontSet { case FAMILY_REGULAR: if( is(style, STYLE_BOLD) ) { if( is(style, STYLE_ITALIC) ) { - font = abspath(availableFontFileNames[3]); + font = abspath(availableFontFileNames[3], family, style); } else { - font = abspath(availableFontFileNames[2]); + font = abspath(availableFontFileNames[2], family, style); } } else if( is(style, STYLE_ITALIC) ) { - font = abspath(availableFontFileNames[1]); + font = abspath(availableFontFileNames[1], family, style); } else { - font = abspath(availableFontFileNames[0]); + font = abspath(availableFontFileNames[0], family, style); } break; case FAMILY_LIGHT: if( is(style, STYLE_ITALIC) ) { - font = abspath(availableFontFileNames[5]); + font = abspath(availableFontFileNames[5], family, style); } else { - font = abspath(availableFontFileNames[4]); + font = abspath(availableFontFileNames[4], family, style); } break; case FAMILY_MEDIUM: if( is(style, STYLE_ITALIC) ) { - font = abspath(availableFontFileNames[6]); + font = abspath(availableFontFileNames[6], family, style); } else { - font = abspath(availableFontFileNames[7]); + font = abspath(availableFontFileNames[7], family, style); } break; } @@ -110,6 +117,16 @@ public class UbuntuFontLoader implements FontSet { Font abspath(String fname) { return FontFactory.getFontConstr().create( Locator.getResource(UbuntuFontLoader.class, relPath+fname).getPath() ); + } + + Font abspath(String fname, int family, int style) { + final Font f = FontFactory.getFontConstr().create( + Locator.getResource(UbuntuFontLoader.class, relPath+fname).getPath() ); + if(null != f) { + fontMap.put( ( family << 8 ) | style, f ); + } + return f; } + } diff --git a/src/jogamp/graph/font/typecast/TypecastFont.java b/src/jogamp/graph/font/typecast/TypecastFont.java index 546eb85e3..0d018a314 100644 --- a/src/jogamp/graph/font/typecast/TypecastFont.java +++ b/src/jogamp/graph/font/typecast/TypecastFont.java @@ -49,6 +49,8 @@ class TypecastFont implements FontInt { TypecastHMetrics metrics; final CmapFormat cmapFormat; int cmapentries; + + // FIXME: Add cache size to limit memory usage ?? IntObjectHashMap char2Glyph; public TypecastFont(OTFontCollection fontset) { |