ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/pango-render.c
(Generate patch)

Comparing deliantra/Deliantra-Client/pango-render.c (file contents):
Revision 1.10 by root, Sat Aug 11 12:07:54 2007 UTC vs.
Revision 1.13 by root, Wed Dec 26 10:34:23 2007 UTC

164static void 164static void
165draw_glyph (PangoRenderer *renderer_, PangoFont *font, PangoGlyph glyph, double x, double y) 165draw_glyph (PangoRenderer *renderer_, PangoFont *font, PangoGlyph glyph, double x, double y)
166{ 166{
167 PangoOpenGLRenderer *renderer = PANGO_OPENGL_RENDERER (renderer_); 167 PangoOpenGLRenderer *renderer = PANGO_OPENGL_RENDERER (renderer_);
168 glyph_info *g; 168 glyph_info *g;
169 float x1, y1, x2, y2;
170 169
171 if (glyph & PANGO_GLYPH_UNKNOWN_FLAG) 170 if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
172 { 171 {
173 glyph = pango_opengl_get_unknown_glyph (font); 172 glyph = pango_opengl_get_unknown_glyph (font);
174 173
181 if (!g || g->generation != tc_generation) 180 if (!g || g->generation != tc_generation)
182 { 181 {
183 Glyph bm; 182 Glyph bm;
184 font_render_glyph (&bm, font, glyph); 183 font_render_glyph (&bm, font, glyph);
185 184
186 if (g) 185 if (!g)
187 g->generation = tc_generation;
188 else
189 { 186 {
190 g = g_slice_new (glyph_info); 187 g = g_slice_new (glyph_info);
191 188
192 _pango_opengl_font_set_glyph_cache_destroy (font, (GDestroyNotify)free_glyph_info); 189 _pango_opengl_font_set_glyph_cache_destroy (font, (GDestroyNotify)free_glyph_info);
193 _pango_opengl_font_set_cache_glyph_data (font, glyph, g); 190 _pango_opengl_font_set_cache_glyph_data (font, glyph, g);
194 } 191 }
195 192
193 g->generation = tc_generation;
196 tc_get (&g->tex, bm.width, bm.height); 194 tc_get (&g->tex, bm.width, bm.height);
197 195
198 g->left = bm.left; 196 g->left = bm.left;
199 g->top = bm.top; 197 g->top = bm.top;
200 198
207 } 205 }
208 206
209 x += g->left; 207 x += g->left;
210 y -= g->top; 208 y -= g->top;
211 209
212 x1 = g->tex.x * (1. / TC_WIDTH );
213 y1 = g->tex.y * (1. / TC_HEIGHT);
214 x2 = g->tex.w * (1. / TC_WIDTH ) + x1;
215 y2 = g->tex.h * (1. / TC_HEIGHT) + y1;
216
217 if (g->tex.name != renderer->key.texname) 210 if (g->tex.name != renderer->key.texname)
218 { 211 {
219 renderer->key.texname = g->tex.name; 212 renderer->key.texname = g->tex.name;
220 renderer->arr = rc_array (renderer->rc, &renderer->key); 213 renderer->arr = rc_array (renderer->rc, &renderer->key);
221 } 214 }
222 215
223 rc_t2f_v3f (renderer->arr, x1, y1, x , y , 0); 216 rc_glyph (renderer->arr, g->tex.x, g->tex.y, g->tex.w, g->tex.h, x, y);
224 rc_t2f_v3f (renderer->arr, x2, y1, x + g->tex.w, y , 0);
225 rc_t2f_v3f (renderer->arr, x2, y2, x + g->tex.w, y + g->tex.h, 0);
226 rc_t2f_v3f (renderer->arr, x1, y2, x , y + g->tex.h, 0);
227} 217}
228 218
229static void 219static void
230draw_trapezoid (PangoRenderer *renderer_, 220draw_trapezoid (PangoRenderer *renderer_,
231 PangoRenderPart part, 221 PangoRenderPart part,
312 302
313 renderer->underline = PANGO_UNDERLINE_NONE; 303 renderer->underline = PANGO_UNDERLINE_NONE;
314 renderer->strikethrough = FALSE; 304 renderer->strikethrough = FALSE;
315 305
316 gl->key.mode = GL_QUADS; 306 gl->key.mode = GL_QUADS;
317 gl->key.format = GL_T2F_V3F; 307 gl->key.format = 0; // glyphs
318 gl->key.texname = 0; 308 gl->key.texname = 0;
319 309
320 for (l = run->item->analysis.extra_attrs; l; l = l->next) 310 for (l = run->item->analysis.extra_attrs; l; l = l->next)
321 { 311 {
322 PangoAttribute *attr = l->data; 312 PangoAttribute *attr = l->data;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines