xlfont load true type fonts by filename
Allan Cornet [Sun, 24 Aug 2008 17:30:27 +0000 (17:30 +0000)]
xlfont('reset') default values

TODO : see Sylvestre & J-B about how to put scilab symbols font
SCI/thirdparty/fonts ?

17 files changed:
scilab/RELEASE_NOTES
scilab/Scilab.sln
scilab/Scilab_f2c.sln
scilab/modules/graphics/Makefile.am
scilab/modules/graphics/graphics.vcproj
scilab/modules/graphics/help/en_US/xlfont.xml
scilab/modules/graphics/sci_gateway/c/sci_xlfont.c
scilab/modules/graphics/tests/unit_tests/xlfont.dia.ref
scilab/modules/graphics/tests/unit_tests/xlfont.tst
scilab/modules/gui/sci_gateway/c/sci_helpbrowser.c
scilab/modules/renderer/includes/RendererFontManager.h
scilab/modules/renderer/src/cpp/RendererFontManager.cpp
scilab/modules/renderer/src/java/org/scilab/modules/renderer/utils/textRendering/FontManager.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/utils/textRendering/XlFontManager.java
scilab/modules/renderer/src/jni/XlFontManager.cpp
scilab/modules/renderer/src/jni/XlFontManager.giws.xml
scilab/modules/renderer/src/jni/XlFontManager.hxx

index 32caadc..d0cce35 100644 (file)
@@ -25,7 +25,6 @@ List of missing/buggy features:
       Errors often appear on ATI and Intel cards under Linux and also with 
       old Nvidia drivers.
       A solution should be added in Scilab RC1
-    * The Symbol font is not compatible with the one used in Scilab 4.
     * By default arcs and circles are now approximated using a constant number of lines.
       To switch to real arcs, set their arc_drawing_method property to "nurbs".
     * Sector boundary angles of arc objects are now specified in degree whereas it used to
index a6b23db..cada616 100644 (file)
@@ -134,6 +134,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics", "modules\graphic
        ProjectSection(ProjectDependencies) = postProject
                {69296D00-0DE1-4F4B-B0CE-FE4F3CB43923} = {69296D00-0DE1-4F4B-B0CE-FE4F3CB43923}
                {2DAEC214-B0B4-4BC3-96B2-77C6AD1450CD} = {2DAEC214-B0B4-4BC3-96B2-77C6AD1450CD}
+               {4FC72D4A-80EE-4B1A-8724-0201C1A35621} = {4FC72D4A-80EE-4B1A-8724-0201C1A35621}
                {ED02137F-0A4F-4EF0-AC58-97ACE37FA89D} = {ED02137F-0A4F-4EF0-AC58-97ACE37FA89D}
                {6A84AD8C-BA18-4A3F-9C72-EC3DF0939E9E} = {6A84AD8C-BA18-4A3F-9C72-EC3DF0939E9E}
                {8BA2DDA8-BD04-4D4D-8EE6-6CAA955F7470} = {8BA2DDA8-BD04-4D4D-8EE6-6CAA955F7470}
index e6112a9..775adf6 100644 (file)
@@ -119,6 +119,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics", "modules\graphic
        ProjectSection(ProjectDependencies) = postProject
                {69296D00-0DE1-4F4B-B0CE-FE4F3CB43923} = {69296D00-0DE1-4F4B-B0CE-FE4F3CB43923}
                {2DAEC214-B0B4-4BC3-96B2-77C6AD1450CD} = {2DAEC214-B0B4-4BC3-96B2-77C6AD1450CD}
+               {4FC72D4A-80EE-4B1A-8724-0201C1A35621} = {4FC72D4A-80EE-4B1A-8724-0201C1A35621}
                {ED02137F-0A4F-4EF0-AC58-97ACE37FA89D} = {ED02137F-0A4F-4EF0-AC58-97ACE37FA89D}
                {6A84AD8C-BA18-4A3F-9C72-EC3DF0939E9E} = {6A84AD8C-BA18-4A3F-9C72-EC3DF0939E9E}
                {8BA2DDA8-BD04-4D4D-8EE6-6CAA955F7470} = {8BA2DDA8-BD04-4D4D-8EE6-6CAA955F7470}
index 6d3f24e..47f7013 100644 (file)
@@ -10,6 +10,7 @@ libscigraphics_la_CFLAGS = -I$(top_srcdir)/libs/doublylinkedlist/includes \
        -Isrc/c/ \
        -Isrc/c/getHandleProperty/ \
        -I$(top_srcdir)/modules/gui/includes/ \
+       -I$(top_srcdir)/modules/fileio/includes/ \
        -I$(top_srcdir)/modules/string/includes/
 
 if GUI
@@ -415,7 +416,7 @@ libscigraphics_la_CXXFLAGS =        -Iincludes/ \
 
 libscigraphics_la_SOURCES = $(GRAPHICS_C_SOURCES) $(GATEWAY_C_SOURCES) $(GRAPHICS_CPP_SOURCES)
 
-libscigraphics_la_LIBADD =  $(top_builddir)/libs/hashtable/libscihashtable.la $(top_builddir)/modules/action_binding/libsciaction_binding.la $(top_builddir)/modules/elementary_functions/libscielementary_functions.la $(top_builddir)/modules/renderer/libscirenderer.la $(top_builddir)/modules/tclsci/libscitclsci.la $(top_builddir)/modules/gui/libscigui.la $(top_builddir)/libs/doublylinkedlist/libscidoublylinkedlist.la $(top_builddir)/modules/core/libscicore.la $(top_builddir)/libs/MALLOC/libscimalloc.la $(top_builddir)/modules/output_stream/libscioutput_stream.la
+libscigraphics_la_LIBADD =  $(top_builddir)/libs/hashtable/libscihashtable.la $(top_builddir)/modules/action_binding/libsciaction_binding.la $(top_builddir)/modules/elementary_functions/libscielementary_functions.la $(top_builddir)/modules/renderer/libscirenderer.la $(top_builddir)/modules/tclsci/libscitclsci.la $(top_builddir)/modules/gui/libscigui.la $(top_builddir)/libs/doublylinkedlist/libscidoublylinkedlist.la $(top_builddir)/modules/core/libscicore.la $(top_builddir)/libs/MALLOC/libscimalloc.la $(top_builddir)/modules/output_stream/libscioutput_stream.la $(top_builddir)/modules/fileio/libscifileio.la
 
 
 if USE_EMBEDDED_LAPACK
index d1349e4..1a2e809 100644 (file)
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="Windows-1252"?>
 <VisualStudioProject
        ProjectType="Visual C++"
-       Version="9.00"
+       Version="9,00"
        Name="graphics"
        ProjectGUID="{8CCDD3C2-B025-4A12-A986-1AA28D7C0C33}"
        RootNamespace="graphics"
        Keyword="Win32Proj"
-       
+       TargetFrameworkVersion="0"
        >
        <Platforms>
                <Platform
@@ -44,7 +44,7 @@
                        <Tool
                                Name="VCCLCompilerTool"
                                Optimization="0"
-                               AdditionalIncludeDirectories="includes;../../java/jdk/include;../../java/jdk/include/win32;../output_stream/includes;../gui/includes;../core/includes;../localization/includes;../../libs/MALLOC/includes;../../libs/intl;../../libs/doublylinkedlist/includes;../../libs/hashtable;src/c;src/c/getHandleProperty;../renderer/includes;../jvm/includes;includes/handleDrawing;../action_binding/includes;../graphic_export/includes;../string/includes;../windows_tools/includes;../../../jvm/includes"
+                               AdditionalIncludeDirectories="includes;../../java/jdk/include;../../java/jdk/include/win32;../output_stream/includes;../fileio/includes;../gui/includes;../core/includes;../localization/includes;../../libs/MALLOC/includes;../../libs/intl;../../libs/doublylinkedlist/includes;../../libs/hashtable;src/c;src/c/getHandleProperty;../renderer/includes;../jvm/includes;includes/handleDrawing;../action_binding/includes;../graphic_export/includes;../string/includes;../windows_tools/includes;../../../jvm/includes"
                                PreprocessorDefinitions="FORDLL;_DEBUG;_WINDOWS;_USRDLL;GRAPHICS_EXPORTS;_CRT_SECURE_NO_DEPRECATE"
                                MinimalRebuild="true"
                                BasicRuntimeChecks="0"
index 4bf199a..bfb0970 100644 (file)
     <title>Calling Sequence</title>
 
     <synopsis>xlfont(font-name)
+xlfont(font-filename)
+xlfont('reset')
 xlfont(font-name,font-id)
+xlfont(font-filename,font-id)
 xlfont(font-name,font-id,bold)
 xlfont(font-name,font-id,bold,italic)
 fonts=xlfont('AVAILABLE_FONTS')
@@ -54,6 +57,14 @@ fonts=xlfont()</synopsis>
       </varlistentry>
 
       <varlistentry>
+        <term>font-filename</term>
+
+        <listitem>
+          <para>string, filename of a true type font.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term>font-id</term>
 
         <listitem>
@@ -80,6 +91,8 @@ fonts=xlfont()</synopsis>
     <para>xlfont('AVAILABLE_FONTS') returns list of fonts available on your
     system.</para>
 
+    <para>xlfont('reset') reset to initial index list of fonts.</para>
+
     <para>With arguments, <literal>xlfont</literal> is used to load a new font
     at different sizes in the graphics context.</para>
 
index f3ecf8b..228f870 100644 (file)
@@ -27,6 +27,7 @@
 #include "freeArrayOfString.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "FileExist.h"
 /*--------------------------------------------------------------------------*/
 static int xlfont_no_rhs(char * fname);
 static int xlfont_one_rhs(char * fname);
@@ -88,6 +89,12 @@ static int xlfont_one_rhs(char * fname)
                        LhsVar(1) = Rhs+1 ;
                        return 0;
                }
+               else if ( strcmp(cstk(l1),"reset")==0)
+               {
+                       resetFontManager();
+                       LhsVar(1) = 0 ;
+                       return 0;
+               }
                else
                {
                        if (isAvailableFontsName(cstk(l1)))
@@ -101,6 +108,17 @@ static int xlfont_one_rhs(char * fname)
                                LhsVar(1) = Rhs+1 ;
                                return 0;
                        }
+                       else if (FileExist(cstk(l1)))
+                       {
+                               int fontID = addFontFromFilename(cstk(l1));
+
+                               m1 = 1; n1 = 1; l1 = 0;
+                               CreateVar( Rhs+1, MATRIX_OF_INTEGER_DATATYPE, &m1, &n1, &l1 );
+                               *istk(l1) = fontID ;
+
+                               LhsVar(1) = Rhs+1 ;
+                               return 0;
+                       }
                        else
                        {
                                Scierror(999,_("%s: Wrong value for input argument #%d: A valid fontname expected.\n"),fname,1);
@@ -163,7 +181,16 @@ static int xlfont_n_rhs(char * fname)
                                return 0;
                        }
 
-                       if ( isAvailableFontsName(fontname) )
+                       if ( (Rhs == 2) && FileExist(fontname) )
+                       {
+                               int Id = changeFontFromFilename(index,fontname);
+                               m1 = 1; n1 = 1; l1 = 0;
+                               CreateVar( Rhs+1, MATRIX_OF_INTEGER_DATATYPE, &m1, &n1, &l1 );
+                               *istk(l1) = Id ;
+
+                               LhsVar(1) = Rhs+1 ;
+                       }
+                       else if ( isAvailableFontsName(fontname) )
                        {
                                int Id = changeFontWithProperty(index,fontname,isBold,isItalic);
                                m1 = 1; n1 = 1; l1 = 0;
index 9c85b8e..735e4ba 100644 (file)
@@ -1,44 +1,23 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO - Allan CORNET
+// Copyright (C) 2008 - INRIA - Allan CORNET
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- TEST WITH GRAPHIC -->
-fonts = xlfont();
-if size(fonts,'*') <> 11 then bugmes();quit;end
-default_fonts = [ "Monospaced" , ..
-"Symbol" , ..
-"Serif" , ..
-"Serif" , ..
-"Serif" , ..
-"Serif" , ..
-"SansSerif" , ..
-"SansSerif" , ..
-"SansSerif" , ..
-"SansSerif" , ..
-"SansSerif" ];
-if ~MSDOS then
-default_fonts = strsubst(default_fonts,'Symbol','OpenSymbol');
-end
-if ( or(fonts <> default_fonts) ) then bugmes();quit;end
+initialfonts = xlfont();
+if size(initialfonts,'*') <> 11 then bugmes();quit;end
 availablefonts = xlfont('AVAILABLE_FONTS');
 if size(availablefonts,'*') < 11 then bugmes();quit;end
-for i=0:size(fonts,'*')-1
-  xlfont(default_fonts(1),i);
+for i=1:11:1
+  xlfont(availablefonts(i),i);
 end
-ref = emptystr(1:size(fonts,'*')) + default_fonts(1);
-fonts = xlfont();
-if ( and(fonts <> default_fonts) ) then bugmes();quit;end
-for i=0:size(fonts,'*')-1
-  xlfont(default_fonts(2),i,%t);
+for i=1:11:1
+  xlfont(availablefonts(i),i,%t,%f);
 end
-ref = emptystr(1:size(fonts,'*')) + default_fonts(2);
-fonts = xlfont();
-if ( and(fonts <> default_fonts) ) then bugmes();quit;end
-for i=0:size(fonts,'*')-1
-  xlfont(default_fonts(2),i,%t,%t);
+for i=1:11:1
+  xlfont(availablefonts(i),i,%t);
 end
-ref = emptystr(1:size(fonts,'*')) + default_fonts(2);
-fonts = xlfont();
-if ( and(fonts <> default_fonts) ) then bugmes();quit;end
+xlfont('reset');
+afterresetfonts = xlfont();
+if ~and(initialfonts == afterresetfonts) then bugmes();quit;end
index abd362c..f0cdfb6 100644 (file)
@@ -1,6 +1,6 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO - Allan CORNET
+// Copyright (C) 2008 - INRIA - Allan CORNET
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -8,51 +8,27 @@
 
 // <-- TEST WITH GRAPHIC -->
 
-fonts = xlfont();
-if size(fonts,'*') <> 11 then pause,end
-
-default_fonts = [ "Monospaced" , ..
-"Symbol" , ..
-"Serif" , ..
-"Serif" , ..
-"Serif" , ..
-"Serif" , ..
-"SansSerif" , ..
-"SansSerif" , ..
-"SansSerif" , ..
-"SansSerif" , ..
-"SansSerif" ];
-
-if ~MSDOS then 
-default_fonts = strsubst(default_fonts,'Symbol','OpenSymbol');
-end
-
-if ( or(fonts <> default_fonts) ) then pause,end
+initialfonts = xlfont();
+if size(initialfonts,'*') <> 11 then pause,end
 
 availablefonts = xlfont('AVAILABLE_FONTS');
 if size(availablefonts,'*') < 11 then pause,end
 
-for i=0:size(fonts,'*')-1
-  xlfont(default_fonts(1),i);
-end  
-ref = emptystr(1:size(fonts,'*')) + default_fonts(1);
-fonts = xlfont();
+for i=1:11:1
+  xlfont(availablefonts(i),i);
+end
 
-if ( and(fonts <> default_fonts) ) then pause,end
+for i=1:11:1
+  xlfont(availablefonts(i),i,%t,%f);
+end
 
-for i=0:size(fonts,'*')-1
-  xlfont(default_fonts(2),i,%t);
-end  
-ref = emptystr(1:size(fonts,'*')) + default_fonts(2);
-fonts = xlfont();
+for i=1:11:1
+  xlfont(availablefonts(i),i,%t);
+end
 
-if ( and(fonts <> default_fonts) ) then pause,end
+xlfont('reset');
 
-for i=0:size(fonts,'*')-1
-  xlfont(default_fonts(2),i,%t,%t);
-end  
-ref = emptystr(1:size(fonts,'*')) + default_fonts(2);
-fonts = xlfont();
+afterresetfonts = xlfont();
+if ~and(initialfonts == afterresetfonts) then pause,end
 
-if ( and(fonts <> default_fonts) ) then pause,end
 
index a052002..6b418da 100644 (file)
@@ -76,11 +76,11 @@ int sci_helpbrowser(char *fname,unsigned long fname_len)
 
       if (helpAdr == NULL) /* No toolboxes loaded */
         {
-          launchHelpBrowser(NULL, nbRowHelp*nbColHelp, getStringMatrixFromStack(languageAdr)[0]);
+          launchHelpBrowser(NULL, nbRowHelp*nbColHelp, getStringMatrixFromStack((int)languageAdr)[0]);
         }
       else
         {
-          launchHelpBrowser(getStringMatrixFromStack((int)helpAdr), nbRowHelp*nbColHelp, getStringMatrixFromStack(languageAdr)[0]);
+          launchHelpBrowser(getStringMatrixFromStack((int)helpAdr), nbRowHelp*nbColHelp, getStringMatrixFromStack((int)languageAdr)[0]);
         }
     }
   else if (Rhs == 4)
@@ -132,11 +132,11 @@ int sci_helpbrowser(char *fname,unsigned long fname_len)
       
       if (helpAdr == NULL) /* No toolboxes loaded */
         {
-          searchKeyword(NULL, nbRowHelp*nbColHelp, getStringMatrixFromStack((int)keywordAdr)[0], getStringMatrixFromStack(languageAdr)[0], *istk(fullTextAdr)==1);
+          searchKeyword(NULL, nbRowHelp*nbColHelp, getStringMatrixFromStack((int)keywordAdr)[0], getStringMatrixFromStack((int)languageAdr)[0], *istk(fullTextAdr)==1);
         }
       else
         {
-          searchKeyword(getStringMatrixFromStack((int)helpAdr), nbRowHelp*nbColHelp, getStringMatrixFromStack((int)keywordAdr)[0], getStringMatrixFromStack(languageAdr)[0], *istk(fullTextAdr)==1);
+          searchKeyword(getStringMatrixFromStack((int)helpAdr), nbRowHelp*nbColHelp, getStringMatrixFromStack((int)keywordAdr)[0], getStringMatrixFromStack((int)languageAdr)[0], *istk(fullTextAdr)==1);
         }
     }
   else
index 72b73fb..b7d9e16 100644 (file)
@@ -65,6 +65,26 @@ int changeFont(int index, char * fontName);
 */
 int changeFontWithProperty(int index, char * fontName, BOOL isBold, BOOL isItalic);
 
+/**
+* reset xlfont with initiale values
+*/
+void resetFontManager(void);
+
+/**
+* Replace a font in the font list by a new one loaded by its filename.
+* @param[in] index index of the font to replace
+* @param[in] filename of font
+* @return index of the added font or -1 if an error occured.
+*/
+int changeFontFromFilename (int index, char * FontFilename);
+
+/**
+* Add a new font from its font filename.
+* @param[in] filename of font
+* @return index of the added font or -1 if an error occured.
+*/
+int addFontFromFilename (char * FontFilename);
+
 #ifdef __cplusplus
 }
 #endif
index bb65313..063b14a 100644 (file)
@@ -140,4 +140,38 @@ int changeFontWithProperty(int index, char * fontName, BOOL isBold, BOOL isItali
        }
        return fontID;
 }
-/*--------------------------------------------------------------------------*/
\ No newline at end of file
+/*--------------------------------------------------------------------------*/
+void resetFontManager(void)
+{
+       org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
+       if (fntmgr)
+       {
+               fntmgr->resetXlFontManager();
+               delete fntmgr;
+       }
+}
+/*--------------------------------------------------------------------------*/
+int changeFontFromFilename (int index, char * FontFilename)
+{
+       int fontID = 0;
+       org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
+       if (fntmgr)
+       {
+               fontID = (int)fntmgr->changeFontFromFilename((long)index,FontFilename);
+               delete fntmgr;
+       }
+       return fontID;
+}
+/*--------------------------------------------------------------------------*/
+int addFontFromFilename (char * FontFilename)
+{
+       int fontID = 0;
+       org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
+       if (fntmgr)
+       {
+               fontID = (int)fntmgr->addFontFromFilename (FontFilename);
+               delete fntmgr;
+       }
+       return fontID;
+}
+/*--------------------------------------------------------------------------*/
index 5a92037..8af0512 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Jean-Baptiste Silvy
+ * Copyright (C) 2008 - INRIA - Allan CORNET
  * desc : Singleton class used to set font of text objects   
  * 
  * This file must be used under the terms of the CeCILL.
 
 package org.scilab.modules.renderer.utils.textRendering;
 
+import java.io.FileInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.awt.Font;
+import java.awt.FontFormatException;
 import java.awt.GraphicsEnvironment;
 import java.util.ArrayList;
 
@@ -24,6 +30,7 @@ import java.util.ArrayList;
  */
 public class FontManager {
 
+    private static final String SCIDIR = System.getenv("SCI");
     private static final float[] INTERVALS = {3.0f, 4.0f, 5.0f};
     private static final float[] FIRST_POLY = {2.0f, 8.0f};
     private static final float[] SECOND_POLY = {4.0f, 2.0f};
@@ -37,8 +44,8 @@ public class FontManager {
     private static final float[] INV_SECOND_POLY = {0.25f, -0.5f};
     private static final float[] INV_THIRD_POLY = {1.0f / SIX, 1.0f};
     private static final float[] INV_FOURTH_POLY = {0.1f, 2.6f};
-       
-       
     // logical awt fonts
     // JRE Java guaranteed: "Dialog", "DialogInput",
     // "Monospaced","Serif", "SansSerif", "Symbol", "Lucida"
@@ -46,13 +53,13 @@ public class FontManager {
     // Times            --> Serif
     // Helvetica        --> SansSerif
     // Courier          --> Monospaced
-    // Symbol           --> Symbol
+    // Symbol           --> Scilab Symbols font
 
     private static final String MONOSPACED = "Monospaced";
     private static final String SANSSERIF = "SansSerif";
-    private static final String SYMBOL = "Symbol";
-    private static final String OPENSYMBOL = "OpenSymbol";
     private static final String SERIF = "Serif";
+    private static final String SCILABSYMBOLSFONT = "ScilabSymbols";
+    private static final String SYMBOLSFONTPATH = "/thirdparty/fonts/scilabsymbols.ttf";
     private static final Font DEFAULT_FONT = new Font("Default", Font.PLAIN, 1);
 
     /** Singleton instance. */
@@ -73,100 +80,60 @@ public class FontManager {
         }
 
     }
-       
-       private static FontList sciFonts;
+ private static FontList sciFonts;
 
-       /**
-        * Default constructor.
-        * Should not be called.
-        */
-       protected FontManager() {
-               if (sciFontManager == null) {
-                       sciFonts = new FontList();
-                       // set default font
-       /* Fonts order in Scilab 4.x for compatibility */
-       /* Courrier --> Monospaced
-                Symbol --> Symbol
-               Times --> Serif
-               Times Italic --> Serif Italic
-               Times Bold --> Serif Bold
-               Times Bold Italic --> Serif Bold Italic
-               Helvetica --> SansSerif
-               Helvetica Italic --> SansSerif Italic
-               Helvetica Bold --> SansSerif Bold
-               Helveticas Bold Italic --> SansSerif bold Italic
-       */
-       
-         sciFonts.add(createFont(MONOSPACED));           /* scilab font_style 0 */
-          /* Problem with Symbol font */
-          /* on scilab 4.x a --> alpha symbol */
-          /* with java , symbols are not ascii codes */
-         if (isAvailableFontName(SYMBOL)) {
-               sciFonts.add(createFont(SYMBOL));               /* scilab font_style 1 */
-         }
-         else {
-               if (isAvailableFontName(OPENSYMBOL)) {
-               sciFonts.add(createFont(OPENSYMBOL));               /* scilab font_style 1 */
-               } else {
-               sciFonts.add(DEFAULT_FONT);               /* scilab font_style 1 */
-               }
-         }
-         sciFonts.add(createFont(SERIF));                /* scilab font_style 2 */
-         sciFonts.add(createFont(SERIF, false, true));     /* scilab font_style 3 */
-         sciFonts.add(createFont(SERIF, true, false));     /* scilab font_style 4 */
-         sciFonts.add(createFont(SERIF, true, true));      /* scilab font_style 5 */
-         sciFonts.add(createFont(SANSSERIF));            /* scilab font_style 6 */
-         sciFonts.add(createFont(SANSSERIF, true, true));  /* scilab font_style 7 */
-         sciFonts.add(createFont(SANSSERIF, true, false)); /* scilab font_style 8 */
-         sciFonts.add(createFont(SANSSERIF, true, true));  /* scilab font_style 9 */
-         sciFonts.add(createFont(SANSSERIF, true, true));  /* scilab font_style 10 */
-          /* font 10 was defined by user in Scilab 4.x */
-          /* @TO DO add a method to do same thing in Scilab 5.x */
-        } 
-       }
-       
-       /**
-        * Get the font manager instance
-        * @return the only instance of fontmanager.
-        */
-       public static FontManager getSciFontManager() {
-               if (sciFontManager == null) {
-                       
-                       sciFontManager = new FontManager();
-               }
-               
-               return sciFontManager;
-       }
-       
-       /**
-        * Convert sciab font size to awt font size.
-        * We use a degree 2 polygon to compute this.
-        * We use canonical form of the polygon so the inverse function is easy to compute
-        * Tthe equivalence list is (0 => 8, 1 => 10, 2 => 12, 3 => 14, 4 => 18, 5 => 24).
-        * @param sciSize scilab size
-        * @return awt size
-        */
-       public static float scilabSizeToAwtSize(double sciSize) {
-               float sciSizef = (float) sciSize;
-               // f(x) = | 2x + 8 if x < 3
-               //        | 4x + 2 if 3 < x < 4
-               //        | 6x - 6 if 4 < x
-               if (sciSizef < INTERVALS[0]) {
-                       return FIRST_POLY[0] * sciSizef + FIRST_POLY[1];
-               } else if (sciSizef < INTERVALS[1]) {
-                       return SECOND_POLY[0] * sciSizef + SECOND_POLY[1];
-               } else if (sciSizef < INTERVALS[2]) {
-                       return THIRD_POLY[0] * sciSizef + THIRD_POLY[1];
-               } else {
-                       return FOURTH_POLY[0] * sciSizef + FOURTH_POLY[1];
-               }
-       }
-       
-       /**
-        * Inverse of scilabSizeToAwtSize function
-        * @param size size of a AWT font
-        * @return corresponding size in Scilab
-        */
+ /**
+  * Default constructor.
+  * Should not be called.
+  */
+ protected FontManager() {
+  if (sciFontManager == null) {
+    initializeFontManager();
+  }
+ }
+ /**
+  * Get the font manager instance
+  * @return the only instance of fontmanager.
+  */
+ public static FontManager getSciFontManager() {
+  if (sciFontManager == null) {
+   sciFontManager = new FontManager();
+  }
+  
+  return sciFontManager;
+ }
+ /**
+  * Convert sciab font size to awt font size.
+  * We use a degree 2 polygon to compute this.
+  * We use canonical form of the polygon so the inverse function is easy to compute
+  * Tthe equivalence list is (0 => 8, 1 => 10, 2 => 12, 3 => 14, 4 => 18, 5 => 24).
+  * @param sciSize scilab size
+  * @return awt size
+  */
+ public static float scilabSizeToAwtSize(double sciSize) {
+  float sciSizef = (float) sciSize;
+  // f(x) = | 2x + 8 if x < 3
+  //        | 4x + 2 if 3 < x < 4
+  //        | 6x - 6 if 4 < x
+  if (sciSizef < INTERVALS[0]) {
+   return FIRST_POLY[0] * sciSizef + FIRST_POLY[1];
+  } else if (sciSizef < INTERVALS[1]) {
+   return SECOND_POLY[0] * sciSizef + SECOND_POLY[1];
+  } else if (sciSizef < INTERVALS[2]) {
+   return THIRD_POLY[0] * sciSizef + THIRD_POLY[1];
+  } else {
+   return FOURTH_POLY[0] * sciSizef + FOURTH_POLY[1];
+  }
+ }
+ /**
+  * Inverse of scilabSizeToAwtSize function
+  * @param size size of a AWT font
+  * @return corresponding size in Scilab
+  */
      public static double awtSizeToScilabSize(float size) {
         // sqrt(|x - c| / a) - b
        if (size < INV_INTERVALS[0]) {
@@ -186,171 +153,220 @@ public class FontManager {
      * @return font corresponding to the index with size 1.
      */
      public final Font getFontFromIndex(int fontIndex) {
-               if (fontIndex >= 0 && fontIndex < sciFonts.size()) {
-                       return sciFonts.get(fontIndex);
-               } else if (fontIndex < 0) {
-                       return sciFonts.get(0);
-               } else {
-                       return sciFonts.get(sciFonts.size() - 1);
-               }
-       }
-       
-       /**
-        * Get a font from its index in Scilab.
-        * @param fontIndex scilab index of the font.
-        * @param fontSize size of the font (scilab size).
-        * @return font corresponding to the index.
-        */
-       public final Font getFontFromIndex(int fontIndex, double fontSize) {
-               Font res = getFontFromIndex(fontIndex);
-               return res.deriveFont(scilabSizeToAwtSize(fontSize));
-       }
-       /**
-        * Add a new font in the font list.
-        * @param newFont font to add to the list
-        * @return index of added font.
-        */
-       public final int addFont(Font newFont) {
-               sciFonts.add(newFont);
-               return sciFonts.size();
-       }
-       
-       /**
-        * Replace a font in the font list by a new one.
-        * @param index index of the font to replace
-        * @param newFont font to add in the font list.
-        * @return index of the added font or -1 if an error occured.
-        */
-       public final int changeFont(int index, Font newFont) {
-               int nbFonts = sciFonts.size();
-               if (index > nbFonts) {
-                       // we need to add fonts untils index
-                       for (int i = nbFonts - 1; i < index; i++) {
-                               addFont(DEFAULT_FONT);
-                       }
-                       return addFont(newFont);
-               } else if (index == nbFonts) {
-                       // add a new Font
-                       return addFont(newFont);
-               } else {
-                       sciFonts.set(index, newFont);
-                       return index;
-               }
-               
-       }
-
-
-       
-       
-       /**
-        * Create a new font knowing its name and size.
-        * @param fontName Name of the font.
-        * @return new font.
-        */
-       protected final Font createFont(String fontName) {
-               // size must be applied after.
-               // by default, we use PLAIN font.
-               return new Font(fontName, Font.PLAIN, 1); 
-       }
-       
-       /**
-        * Create a new font knowing its name and size.
-        * @param fontName Name of the font.
-        * @param isBold wether the font is bold or not.
-        * @param isItalic wether the font is in italic or not.
-        * @return new font.
-        */
-       protected final Font createFont(String fontName, boolean isBold, boolean isItalic) {
-               int style;
-               if (isBold && isItalic) {
-                       style = Font.BOLD | Font.ITALIC;
-               } else if (isBold) {
-                       style = Font.BOLD;
-               } else if (isItalic) {
-                       style = Font.ITALIC;
-               } else {
-                       style = Font.PLAIN;
-               }
-               return new Font(fontName, style, 1);
-       }
-       
-       /**
-        * Add a new font from its font name.
-        * @param fontName name of the font to add.
-        * @return index of the added font.
-        */
-       public final int addFont(String fontName) {
-               return addFont(createFont(fontName));
-       }
-       
-       /**
-        * Add a new font from its font name.
-        * @param fontName name of the font to add.
-        * @param isBold wether the font is bold or not.
-        * @param isItalic wether the font is in italic or not.
-        * @return index of the added font.
-        */
-       public final int addFont(String fontName, boolean isBold, boolean isItalic) {
-               return addFont(createFont(fontName, isBold, isItalic));
-       }
-
-       /**
-        * Replace a font in the font list by a new one.
-        * @param index index of the font to replace
-        * @param fontName Name of the font.
-        * @return index of the added font or -1 if an error occured.
-        */
-       
-               public final int changeFont(int index, String fontName) {
-                       return changeFont(index, createFont(fontName));
-       }
-               
-       /**
-        * Replace a font in the font list by a new one.
-        * @param index index of the font to replace
-        * @param fontName Name of the font.
-        * @param isBold wether the font is bold or not.
-        * @param isItalic wether the font is in italic or not.
-        * @return index of the added font or -1 if an error occured.
-        */
-               public final int changeFont(int index, String fontName, boolean isBold, boolean isItalic) {
-                 return changeFont(index, createFont(fontName, isBold, isItalic));
-       }
+  if (fontIndex >= 0 && fontIndex < sciFonts.size()) {
+   return sciFonts.get(fontIndex);
+  } else if (fontIndex < 0) {
+   return sciFonts.get(0);
+  } else {
+   return sciFonts.get(sciFonts.size() - 1);
+  }
+ }
+ /**
+  * Get a font from its index in Scilab.
+  * @param fontIndex scilab index of the font.
+  * @param fontSize size of the font (scilab size).
+  * @return font corresponding to the index.
+  */
+ public final Font getFontFromIndex(int fontIndex, double fontSize) {
+  Font res = getFontFromIndex(fontIndex);
+  return res.deriveFont(scilabSizeToAwtSize(fontSize));
+ }
+ /**
+  * Add a new font in the font list.
+  * @param newFont font to add to the list
+  * @return index of added font.
+  */
+ public final int addFont(Font newFont) {
+  sciFonts.add(newFont);
+  return sciFonts.size();
+ }
+ /**
+  * Replace a font in the font list by a new one.
+  * @param index index of the font to replace
+  * @param newFont font to add in the font list.
+  * @return index of the added font or -1 if an error occured.
+  */
+ public final int changeFont(int index, Font newFont) {
+  int nbFonts = sciFonts.size();
+  if (index > nbFonts) {
+   // we need to add fonts untils index
+   for (int i = nbFonts - 1; i < index; i++) {
+    addFont(DEFAULT_FONT);
+   }
+   return addFont(newFont);
+  } else if (index == nbFonts) {
+   // add a new Font
+   return addFont(newFont);
+  } else {
+   sciFonts.set(index, newFont);
+   return index;
+  }
+  
+ }
+ /**
+  * Create a new font knowing its name and size.
+  * @param fontName Name of the font.
+  * @return new font.
+  */
+ protected final Font createFont(String fontName) {
+  // size must be applied after.
+  // by default, we use PLAIN font.
+  return new Font(fontName, Font.PLAIN, 1); 
+ }
+ /**
+  * Load scilab symbols font
+  * @return font.
+  */
+ protected final Font loadScilabSymbolFont() {
+    return loadFont(SCIDIR + SYMBOLSFONTPATH);
+ }
+ /**
+  * load a font from filename
+  * @param fontFileName filename of the font.
+  * @return font.
+  */
+ protected final Font loadFont(String fontFileName) {
+  Font loadedFont;
+  FileInputStream in;
+  File f = new File(fontFileName);
+  try {
+   in = new FileInputStream(f);
+  } catch (FileNotFoundException e) {
+   loadedFont = DEFAULT_FONT;
+   return loadedFont;
+  }
+    
+  try {
+   loadedFont = Font.createFont(Font.TRUETYPE_FONT, in);
+  } catch (IOException e) {
+   loadedFont = DEFAULT_FONT;
+  } catch (FontFormatException ffe) {
+   loadedFont = DEFAULT_FONT;
+  }
+  
+  return loadedFont;
+ }
+ /**
+  * Create a new font knowing its name and size.
+  * @param fontName Name of the font.
+  * @param isBold wether the font is bold or not.
+  * @param isItalic wether the font is in italic or not.
+  * @return new font.
+  */
+ protected final Font createFont(String fontName, boolean isBold, boolean isItalic) {
+  int style;
+  if (isBold && isItalic) {
+   style = Font.BOLD | Font.ITALIC;
+  } else if (isBold) {
+   style = Font.BOLD;
+  } else if (isItalic) {
+   style = Font.ITALIC;
+  } else {
+   style = Font.PLAIN;
+  }
+  return new Font(fontName, style, 1);
+ }
+ /**
+  * Add a new font from its font name.
+  * @param fontName name of the font to add.
+  * @return index of the added font.
+  */
+ public final int addFont(String fontName) {
+  return addFont(createFont(fontName));
+ }
+ /**
+  * Add a new font from its font name.
+  * @param fontName name of the font to add.
+  * @param isBold wether the font is bold or not.
+  * @param isItalic wether the font is in italic or not.
+  * @return index of the added font.
+  */
+ public final int addFont(String fontName, boolean isBold, boolean isItalic) {
+  return addFont(createFont(fontName, isBold, isItalic));
+ }
 
+ /**
+  * Add a new font from its filename.
+  * @param FontFilename  filename of the font to add.
+  * @return index of the added font.
+  */
+  public final int addFontFromFilename(String FontFilename) {
+   return addFont(loadFont(FontFilename));
+  }
+ /**
+  * Replace a font in the font list by a new one.
+  * @param index index of the font to replace
+  * @param fontName Name of the font.
+  * @return index of the added font or -1 if an error occured.
+  */
+  public final int changeFont(int index, String fontName) {
+   return changeFont(index, createFont(fontName));
+ }
+  /**
+  * Replace a font in the font list by a new one loaded from a file.
+  * @param index index of the font to replace
+   * @param FontFilename  filename of the font
+  * @return index of the added font or -1 if an error occured.
+  */
+  public final int changeFontFromFilename(int index, String FontFilename) {
+       return changeFont(index, loadFont(FontFilename));
+  }
+  
+ /**
+  * Replace a font in the font list by a new one.
+  * @param index index of the font to replace
+  * @param fontName Name of the font.
+  * @param isBold wether the font is bold or not.
+  * @param isItalic wether the font is in italic or not.
+  * @return index of the added font or -1 if an error occured.
+  */
+  public final int changeFont(int index, String fontName, boolean isBold, boolean isItalic) {
+    return changeFont(index, createFont(fontName, isBold, isItalic));
+ }
+ /**
+  * Get the list of all fonts available.
+  * @return Names of the available fonts.
+  */
+ public final String[] getAvailableFontsName() {
+  return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
+ }
 
-       
-       /**
-        * Get the list of all fonts available.
-        * @return Names of the available fonts.
-        */
-       public final String[] getAvailableFontsName() {
-               return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
-       }
-
-       /**
-        * Get the size of list of all fonts available.
-        * @return size.
-        */
-       public final int getSizeAvailableFontsName() {
-               return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames().length;
-       }
-       
+ /**
+  * Get the size of list of all fonts available.
+  * @return size.
+  */
+ public final int getSizeAvailableFontsName() {
+  return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames().length;
+ }
     /**
      * Check if fontname is available
      * @param fontname Name of the font.
      * @return true or false.
      */
-       public final boolean isAvailableFontName(String fontname) {
-               int i = getSizeAvailableFontsName();
-               String[] availableFontsName = getAvailableFontsName();
-               for (i = 0; i < getSizeAvailableFontsName(); i++) {
-                       if (fontname.compareTo(availableFontsName[i]) == 0) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-               
+ public final boolean isAvailableFontName(String fontname) {
+  int i = getSizeAvailableFontsName();
+  String[] availableFontsName = getAvailableFontsName();
+  for (i = 0; i < getSizeAvailableFontsName(); i++) {
+   if (fontname.compareTo(availableFontsName[i]) == 0) {
+    return true;
+   }
+  }
+  return false;
+ }
+  
     /**
      * returns fontnames installed (used) by scilab
      * @return fonts name      
@@ -375,4 +391,41 @@ public class FontManager {
         return sciFonts.size();
     }
 
+    public final void initializeFontManager() {
+     sciFonts = new FontList();
+     // set default font
+     /* Fonts order in Scilab 4.x for compatibility */
+     /* Courrier --> Monospaced
+       Symbol --> Symbol
+       Times --> Serif
+       Times Italic --> Serif Italic
+       Times Bold --> Serif Bold
+       Times Bold Italic --> Serif Bold Italic
+       Helvetica --> SansSerif
+       Helvetica Italic --> SansSerif Italic
+       Helvetica Bold --> SansSerif Bold
+       Helveticas Bold Italic --> SansSerif bold Italic
+    */
+       
+      sciFonts.add(createFont(MONOSPACED));             /* scilab font_style 0 */
+      /* Symbols font */                               /* scilab font_style 1 */
+      /* on scilab 4.x a --> alpha (symbol) */
+      /* with java , symbols are not ascii codes , but unicodes */
+      /* if font exists on system, we use else we try to load scilab symbols font (truetype) */
+      if (isAvailableFontName(SCILABSYMBOLSFONT)) {
+       sciFonts.add(createFont(SCILABSYMBOLSFONT));
+      } else {
+       sciFonts.add(loadScilabSymbolFont());
+      }
+      sciFonts.add(createFont(SERIF));                  /* scilab font_style 2 */
+      sciFonts.add(createFont(SERIF, false, true));     /* scilab font_style 3 */
+      sciFonts.add(createFont(SERIF, true, false));     /* scilab font_style 4 */
+      sciFonts.add(createFont(SERIF, true, true));      /* scilab font_style 5 */
+      sciFonts.add(createFont(SANSSERIF));              /* scilab font_style 6 */
+      sciFonts.add(createFont(SANSSERIF, true, true));  /* scilab font_style 7 */
+      sciFonts.add(createFont(SANSSERIF, true, false)); /* scilab font_style 8 */
+      sciFonts.add(createFont(SANSSERIF, true, true));  /* scilab font_style 9 */
+      sciFonts.add(createFont(SANSSERIF, true, true));  /* scilab font_style 10 */
+    }
+    
 }
index ecfd9ed..ce4f0f5 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - DIGITEO - Allan CORNET
+ * Copyright (C) 2008 - INRIA - Allan CORNET
  * 
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -80,7 +80,16 @@ public class XlFontManager {
        }
        
        /**
-        * 
+        * add font loaded from a filename
+        * @param font filename
+        * @return index
+        */
+       public int addFontFromFilename(String FontFilename) {
+               return sciFontManager.addFontFromFilename(FontFilename);
+       }
+       
+       /**
+        * Change Font
         * @param index index of font to replace
         * @param fontName font name
         * @return index
@@ -89,8 +98,18 @@ public class XlFontManager {
                return sciFontManager.changeFont(index, fontName);
        }
        
+  /**
+        * Change Font loaded from a filename
+        * @param index index of font to replace
+        * @param font filename
+        * @return index
+        */
+       public int changeFontFromFilename(int index, String FontFilename) {
+               return sciFontManager.changeFontFromFilename(index, FontFilename);
+       }       
+       
        /**
-        * 
+        * Change Font 
         * @param index index of font to replace
         * @param fontName  font name
         * @param isBold true or false
@@ -101,4 +120,11 @@ public class XlFontManager {
                return sciFontManager.changeFont(index, fontName, isBold, isItalic);
        }
        
+       /**
+        * reset XlFontManager with initial value
+        */
+       public void resetXlFontManager() {
+               sciFontManager.initializeFontManager();
+       }
+       
 }
index 1bfecb0..50efd44 100644 (file)
@@ -107,6 +107,9 @@ jbooleanisAvailableFontNamejstringID=NULL;
 jintaddFontjstringID=NULL; 
 jintchangeFontjintjstringID=NULL; 
 jintchangeFontWithPropertyjintjstringjbooleanjbooleanID=NULL; 
+voidresetXlFontManagerID=NULL; 
+jintaddFontFromFilenamejstringID=NULL; 
+jintchangeFontFromFilenamejintjstringID=NULL; 
 
 
 }
@@ -137,6 +140,9 @@ jbooleanisAvailableFontNamejstringID=NULL;
 jintaddFontjstringID=NULL; 
 jintchangeFontjintjstringID=NULL; 
 jintchangeFontWithPropertyjintjstringjbooleanjbooleanID=NULL; 
+voidresetXlFontManagerID=NULL; 
+jintaddFontFromFilenamejstringID=NULL; 
+jintchangeFontFromFilenamejintjstringID=NULL; 
 
 
 }
@@ -335,4 +341,57 @@ return res;
 
 }
 
+void XlFontManager::resetXlFontManager (){
+
+JNIEnv * curEnv = getCurrentEnv();
+
+if (voidresetXlFontManagerID==NULL) { /* Use the cache Luke */ voidresetXlFontManagerID = curEnv->GetMethodID(this->instanceClass, "resetXlFontManager", "()V" ) ;
+if (voidresetXlFontManagerID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "resetXlFontManager");
+}
+}
+                         curEnv->CallVoidMethod( this->instance, voidresetXlFontManagerID );
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+long XlFontManager::addFontFromFilename (char * FontFilename){
+
+JNIEnv * curEnv = getCurrentEnv();
+
+if (jintaddFontFromFilenamejstringID==NULL) { /* Use the cache Luke */ jintaddFontFromFilenamejstringID = curEnv->GetMethodID(this->instanceClass, "addFontFromFilename", "(Ljava/lang/String;)I" ) ;
+if (jintaddFontFromFilenamejstringID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "addFontFromFilename");
+}
+}
+jstring FontFilename_ = curEnv->NewStringUTF( FontFilename );
+
+                        jint res =  (jint) curEnv->CallIntMethod( this->instance, jintaddFontFromFilenamejstringID ,FontFilename_);
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+long XlFontManager::changeFontFromFilename (long index, char * FontFilename){
+
+JNIEnv * curEnv = getCurrentEnv();
+
+if (jintchangeFontFromFilenamejintjstringID==NULL) { /* Use the cache Luke */ jintchangeFontFromFilenamejintjstringID = curEnv->GetMethodID(this->instanceClass, "changeFontFromFilename", "(ILjava/lang/String;)I" ) ;
+if (jintchangeFontFromFilenamejintjstringID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "changeFontFromFilename");
+}
+}
+jstring FontFilename_ = curEnv->NewStringUTF( FontFilename );
+
+                        jint res =  (jint) curEnv->CallIntMethod( this->instance, jintchangeFontFromFilenamejintjstringID ,index, FontFilename_);
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
 }
index 275b37a..d926868 100644 (file)
     <param type="boolean" name="isBold" />
     <param type="boolean" name="isItalic" />
     </method>
+    <method name="resetXlFontManager" returnType="void">
+    </method>
+    <method name="addFontFromFilename" returnType="int">
+    <param type="String" name="FontFilename" />
+    </method>
+    <method name="changeFontFromFilename" returnType="int">
+    <param type="int" name="index" />
+    <param type="String" name="FontFilename" />
+    </method>
     
   </object>
 </package>
index a0477e2..276a3a8 100644 (file)
@@ -62,6 +62,9 @@ jmethodID jbooleanisAvailableFontNamejstringID; // cache method id
 jmethodID jintaddFontjstringID; // cache method id
 jmethodID jintchangeFontjintjstringID; // cache method id
 jmethodID jintchangeFontWithPropertyjintjstringjbooleanjbooleanID; // cache method id
+jmethodID voidresetXlFontManagerID; // cache method id
+jmethodID jintaddFontFromFilenamejstringID; // cache method id
+jmethodID jintchangeFontFromFilenamejintjstringID; // cache method id
 
 
 /**
@@ -119,6 +122,12 @@ long changeFont(long index, char * fontName);
 
 long changeFontWithProperty(long index, char * fontName, bool isBold, bool isItalic);
 
+void resetXlFontManager();
+
+long addFontFromFilename(char * FontFilename);
+
+long changeFontFromFilename(long index, char * FontFilename);
+
 
                         /**
                         * Get class name to use for static methods