From 4b8bd5ec58cb2edfb51bd9ee930beb9c539a8a0b Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Fri, 1 Apr 2011 06:48:52 +0200
Subject: Final core and demo changes for jogl merge

Core:
- Region: Cleanup up constant names
- Renderer: Add getRenderType()
- TextRenderer: Add cache size limit
- JavaFontLoader: Add FIXME 'Add cache size to limit memory usage'
- UbuntuFontLoader: Add cache and FIXME 'Add cache size to limit memory usage'
- TypecastFont: Add FIXME 'Add cache size to limit memory usage ??'

Demos:
- Relocated and split (main/listener) for jogl merge
- Add 's' for screenshot
- Text:
  - Add 'i' for live editing mode (until CR, backspace supported)
---
 src/jogamp/graph/font/JavaFontLoader.java        | 43 +++++++++++++++---------
 src/jogamp/graph/font/UbuntuFontLoader.java      | 35 ++++++++++++++-----
 src/jogamp/graph/font/typecast/TypecastFont.java |  2 ++
 3 files changed, 55 insertions(+), 25 deletions(-)

(limited to 'src/jogamp/graph/font')

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) {
-- 
cgit v1.2.3