ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/pango-fontmap.c
Revision: 1.3
Committed: Sun Apr 5 19:28:54 2009 UTC (15 years, 1 month ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_05, rel-2_04, rel-2_10, rel-2_11
Changes since 1.2: +3 -4 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 /* Pango
2     * OpenGL fonts handling
3     *
4     * Copyright (C) 2000 Red Hat Software
5     * Copyright (C) 2000 Tor Lillqvist
6     * Copyright (C) 2006 Marc Lehmann <pcg@goof.com>
7     *
8     * This file is free software; you can redistribute it and/or
9     * modify it under the terms of the GNU Library General Public
10     * License as published by the Free Software Foundation; either
11     * version 2 of the License, or (at your option) any later version.
12     *
13     * This file is distributed in the hope that it will be useful,
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16     * Library General Public License for more details.
17     *
18     * You should have received a copy of the GNU Library General Public
19     * License along with this library; if not, write to the
20     * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21     * Boston, MA 02111-1307, USA.
22     */
23    
24     #include <glib.h>
25     #include <stdlib.h>
26     #include <string.h>
27     #include <errno.h>
28    
29     #include <fontconfig/fontconfig.h>
30    
31     #include "pangoopengl.h"
32    
33     struct _PangoOpenGLFontMap
34     {
35     PangoFcFontMap parent_instance;
36    
37     FT_Library library;
38    
39     /* Function to call on prepared patterns to do final
40     * config tweaking.
41     */
42     PangoOpenGLSubstituteFunc substitute_func;
43     gpointer substitute_data;
44     GDestroyNotify substitute_destroy;
45    
46     PangoRenderer *renderer;
47     };
48    
49     struct _PangoOpenGLFontMapClass
50     {
51     PangoFcFontMapClass parent_class;
52     };
53    
54     G_DEFINE_TYPE (PangoOpenGLFontMap, pango_opengl_font_map, PANGO_TYPE_FC_FONT_MAP)
55    
56     static void
57     pango_opengl_font_map_finalize (GObject *object)
58     {
59     PangoOpenGLFontMap *fontmap = PANGO_OPENGL_FONT_MAP (object);
60    
61     if (fontmap->renderer)
62     g_object_unref (fontmap->renderer);
63    
64     if (fontmap->substitute_destroy)
65     fontmap->substitute_destroy (fontmap->substitute_data);
66    
67     FT_Done_FreeType (fontmap->library);
68    
69     G_OBJECT_CLASS (pango_opengl_font_map_parent_class)->finalize (object);
70     }
71    
72     PangoFontMap *
73     pango_opengl_font_map_new (void)
74     {
75     PangoOpenGLFontMap *fontmap;
76     FT_Error error;
77    
78     /* Make sure that the type system is initialized */
79     g_type_init ();
80    
81     fontmap = g_object_new (PANGO_TYPE_OPENGL_FONT_MAP, NULL);
82    
83     error = FT_Init_FreeType (&fontmap->library);
84     if (error != FT_Err_Ok)
85     g_critical ("pango_opengl_font_map_new: Could not initialize freetype");
86    
87     return (PangoFontMap *)fontmap;
88     }
89    
90     void
91     pango_opengl_font_map_set_default_substitute (PangoOpenGLFontMap *fontmap,
92 root 1.3 PangoOpenGLSubstituteFunc func,
93     gpointer data,
94     GDestroyNotify notify)
95 root 1.1 {
96     if (fontmap->substitute_destroy)
97     fontmap->substitute_destroy (fontmap->substitute_data);
98    
99     fontmap->substitute_func = func;
100     fontmap->substitute_data = data;
101     fontmap->substitute_destroy = notify;
102    
103     pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
104     }
105    
106     /**
107     * pango_opengl_font_map_substitute_changed:
108     * @fontmap: a #PangoOpenGLFontmap
109     *
110     * Call this function any time the results of the
111     * default substitution function set with
112     * pango_opengl_font_map_set_default_substitute() change.
113     * That is, if your subsitution function will return different
114     * results for the same input pattern, you must call this function.
115     *
116     * Since: 1.2
117     **/
118     void
119     pango_opengl_font_map_substitute_changed (PangoOpenGLFontMap *fontmap)
120     {
121     pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
122     }
123    
124     /**
125     * pango_opengl_font_map_create_context:
126     * @fontmap: a #PangoOpenGLFontmap
127     *
128     * Create a #PangoContext for the given fontmap.
129     *
130     * Return value: the newly created context; free with g_object_unref().
131     *
132     * Since: 1.2
133     **/
134     PangoContext *
135     pango_opengl_font_map_create_context (PangoOpenGLFontMap *fontmap)
136     {
137     g_return_val_if_fail (PANGO_OPENGL_IS_FONT_MAP (fontmap), NULL);
138    
139     return pango_fc_font_map_create_context (PANGO_FC_FONT_MAP (fontmap));
140     }
141    
142     FT_Library
143     _pango_opengl_font_map_get_library (PangoFontMap *fontmap_)
144     {
145     PangoOpenGLFontMap *fontmap = (PangoOpenGLFontMap *)fontmap_;
146    
147     return fontmap->library;
148     }
149    
150     /**
151     * _pango_opengl_font_map_get_renderer:
152     * @fontmap: a #PangoOpenGLFontmap
153     *
154     * Gets the singleton PangoOpenGLRenderer for this fontmap.
155     *
156     * Return value:
157     **/
158     PangoRenderer *
159     _pango_opengl_font_map_get_renderer (PangoOpenGLFontMap *fontmap)
160     {
161     if (!fontmap->renderer)
162     fontmap->renderer = g_object_new (PANGO_TYPE_OPENGL_RENDERER, NULL);
163    
164     return fontmap->renderer;
165     }
166    
167     static void
168     pango_opengl_font_map_default_substitute (PangoFcFontMap *fcfontmap,
169     FcPattern *pattern)
170     {
171     PangoOpenGLFontMap *fontmap = PANGO_OPENGL_FONT_MAP (fcfontmap);
172    
173     FcConfigSubstitute (NULL, pattern, FcMatchPattern);
174    
175     if (fontmap->substitute_func)
176     fontmap->substitute_func (pattern, fontmap->substitute_data);
177    
178     #if 0
179 root 1.2 FcValue v;
180 root 1.1 if (FcPatternGet (pattern, FC_DPI, 0, &v) == FcResultNoMatch)
181     FcPatternAddDouble (pattern, FC_DPI, fontmap->dpi_y);
182     #endif
183     FcDefaultSubstitute (pattern);
184     }
185    
186     static PangoFcFont *
187     pango_opengl_font_map_new_font (PangoFcFontMap *fcfontmap,
188     FcPattern *pattern)
189     {
190     return (PangoFcFont *)_pango_opengl_font_new (PANGO_OPENGL_FONT_MAP (fcfontmap), pattern);
191     }
192    
193     static void
194     pango_opengl_font_map_class_init (PangoOpenGLFontMapClass *class)
195     {
196     GObjectClass *gobject_class = G_OBJECT_CLASS (class);
197     PangoFcFontMapClass *fcfontmap_class = PANGO_FC_FONT_MAP_CLASS (class);
198    
199     gobject_class->finalize = pango_opengl_font_map_finalize;
200     fcfontmap_class->default_substitute = pango_opengl_font_map_default_substitute;
201     fcfontmap_class->new_font = pango_opengl_font_map_new_font;
202     }
203    
204     static void
205     pango_opengl_font_map_init (PangoOpenGLFontMap *fontmap)
206     {
207     fontmap->library = NULL;
208     }
209