1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Allan CORNET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15 
16 /*--------------------------------------------------------------------------*/
17 #include "XlFontManager.hxx"
18 
19 extern "C" {
20 #include <stdlib.h>
21 #include "getScilabJavaVM.h"
22 #include "RendererFontManager.h"
23 #include "sci_malloc.h"
24 #include "os_string.h"
25 }
26 
27 using namespace org_scilab_modules_renderer_utils_textRendering;
28 
29 /*--------------------------------------------------------------------------*/
getNbInstalledFonts(void)30 int getNbInstalledFonts(void)
31 {
32     XlFontManager * fntmgr = new XlFontManager(getScilabJavaVM());
33     int res = fntmgr->getSizeInstalledFontsName();
34     delete fntmgr;
35     return res;
36 }
37 /*--------------------------------------------------------------------------*/
getInstalledFontsName(int * sizeArray)38 char **getInstalledFontsName(int *sizeArray)
39 {
40     char **returnedinstalledfontsname = NULL;
41     *sizeArray = 0;
42 
43     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
44     if (fntmgr)
45     {
46         char **installedfontsname = NULL;
47 
48         *sizeArray = fntmgr->getSizeInstalledFontsName();
49         installedfontsname = fntmgr->getInstalledFontsName();
50         if (installedfontsname)
51         {
52             int i = 0;
53             returnedinstalledfontsname = (char**)MALLOC(sizeof(char*) * (*sizeArray));
54             for ( i = 0; i < *sizeArray; i++)
55             {
56                 returnedinstalledfontsname[i] = os_strdup(installedfontsname[i]);
57                 delete [] installedfontsname[i];
58             }
59             delete [] installedfontsname;
60             installedfontsname = NULL;
61         }
62         delete fntmgr;
63     }
64 
65     return returnedinstalledfontsname;
66 }
67 /*--------------------------------------------------------------------------*/
getAvailableFontsName(int * sizeArray)68 char **getAvailableFontsName(int *sizeArray)
69 {
70     char **returnedavailablefontsname = NULL;
71     *sizeArray = 0;
72 
73     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
74     if (fntmgr)
75     {
76         char **availablefontsname = NULL;
77 
78         *sizeArray = fntmgr->getSizeAvailableFontsName();
79         availablefontsname = fntmgr->getAvailableFontsName();
80         if (availablefontsname)
81         {
82             int i = 0;
83             returnedavailablefontsname = (char**)MALLOC(sizeof(char*) * (*sizeArray));
84             for ( i = 0; i < *sizeArray; i++)
85             {
86                 returnedavailablefontsname[i] = os_strdup(availablefontsname[i]);
87                 delete [] availablefontsname[i];
88             }
89             delete [] availablefontsname;
90             availablefontsname = NULL;
91         }
92         delete fntmgr;
93     }
94 
95     return returnedavailablefontsname;
96 }
97 /*--------------------------------------------------------------------------*/
isAvailableFontsName(char * fontname)98 BOOL isAvailableFontsName(char *fontname)
99 {
100     BOOL bOK = FALSE;
101     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
102     if (fntmgr)
103     {
104         bOK = booltoBOOL(fntmgr->isAvailableFontName(fontname));
105         delete fntmgr;
106     }
107     return bOK;
108 }
109 /*--------------------------------------------------------------------------*/
addFont(char * fontname)110 int addFont(char *fontname)
111 {
112     int fontID = 0;
113 
114     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
115     if (fntmgr)
116     {
117         fontID = (int)fntmgr->addFont(fontname);
118         delete fntmgr;
119     }
120 
121     return fontID;
122 }
123 /*--------------------------------------------------------------------------*/
changeFont(int index,char * fontName)124 int changeFont(int index, char * fontName)
125 {
126     int fontID = 0;
127     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
128     if (fntmgr)
129     {
130         fontID = (int)fntmgr->changeFont((long)index, fontName);
131         delete fntmgr;
132     }
133 
134     return fontID;
135 }
136 /*--------------------------------------------------------------------------*/
changeFontWithProperty(int index,char * fontName,BOOL isBold,BOOL isItalic)137 int changeFontWithProperty(int index, char * fontName, BOOL isBold, BOOL isItalic)
138 {
139     int fontID = 0;
140     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
141     if (fntmgr)
142     {
143         fontID = (int)fntmgr->changeFontWithProperty((long)index, fontName, BOOLtobool(isBold), BOOLtobool(isItalic));
144         delete fntmgr;
145     }
146     return fontID;
147 }
148 /*--------------------------------------------------------------------------*/
resetFontManager(void)149 void resetFontManager(void)
150 {
151     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
152     if (fntmgr)
153     {
154         fntmgr->resetXlFontManager();
155         delete fntmgr;
156     }
157 }
158 /*--------------------------------------------------------------------------*/
changeFontFromFilename(int index,char * FontFilename)159 int changeFontFromFilename (int index, char * FontFilename)
160 {
161     int fontID = 0;
162     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
163     if (fntmgr)
164     {
165         fontID = (int)fntmgr->changeFontFromFilename((long)index, FontFilename);
166         delete fntmgr;
167     }
168     return fontID;
169 }
170 /*--------------------------------------------------------------------------*/
addFontFromFilename(char * FontFilename)171 int addFontFromFilename (char * FontFilename)
172 {
173     int fontID = 0;
174     org_scilab_modules_renderer_utils_textRendering::XlFontManager *fntmgr = new org_scilab_modules_renderer_utils_textRendering::XlFontManager(getScilabJavaVM());
175     if (fntmgr)
176     {
177         fontID = (int)fntmgr->addFontFromFilename (FontFilename);
178         delete fntmgr;
179     }
180     return fontID;
181 }
182 /*--------------------------------------------------------------------------*/
183