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.9 by root, Sat Aug 11 11:41:24 2007 UTC vs.
Revision 1.12 by root, Mon Aug 13 15:31:21 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
207 } 206 }
208 207
209 x += g->left; 208 x += g->left;
210 y -= g->top; 209 y -= g->top;
211 210
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) 211 if (g->tex.name != renderer->key.texname)
218 { 212 {
219 renderer->key.texname = g->tex.name; 213 renderer->key.texname = g->tex.name;
220 renderer->arr = rc_array (renderer->rc, &renderer->key); 214 renderer->arr = rc_array (renderer->rc, &renderer->key);
221 } 215 }
222 216
223 rc_t2f_v3f (renderer->arr, x1, y1, x , y , 0); 217 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} 218}
228 219
229static void 220static void
230draw_trapezoid (PangoRenderer *renderer_, 221draw_trapezoid (PangoRenderer *renderer_,
231 PangoRenderPart part, 222 PangoRenderPart part,
252 rc_v2f (arr, x12, y2); 243 rc_v2f (arr, x12, y2);
253} 244}
254 245
255void 246void
256pango_opengl_render_layout_subpixel (PangoLayout *layout, 247pango_opengl_render_layout_subpixel (PangoLayout *layout,
248 rc_t *rc,
257 int x, int y, 249 int x, int y,
258 float r, float g, float b, float a, 250 float r, float g, float b, float a,
259 int flags) 251 int flags)
260{ 252{
261 PangoContext *context; 253 PangoContext *context;
266 context = pango_layout_get_context (layout); 258 context = pango_layout_get_context (layout);
267 fontmap = pango_context_get_font_map (context); 259 fontmap = pango_context_get_font_map (context);
268 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap)); 260 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap));
269 gl = PANGO_OPENGL_RENDERER (renderer); 261 gl = PANGO_OPENGL_RENDERER (renderer);
270 262
271 gl->rc = rc_alloc (); 263 gl->rc = rc;
272 gl->r = r; 264 gl->r = r;
273 gl->g = g; 265 gl->g = g;
274 gl->b = b; 266 gl->b = b;
275 gl->a = a; 267 gl->a = a;
276 gl->flags = flags; 268 gl->flags = flags;
277 269
278 glEnable (GL_TEXTURE_2D);
279 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
280 glEnable (GL_BLEND);
281 gl_BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
282 GL_ONE , GL_ONE_MINUS_SRC_ALPHA);
283 glEnable (GL_ALPHA_TEST);
284 glAlphaFunc (GL_GREATER, 0.01f);
285
286 pango_renderer_draw_layout (renderer, layout, x, y); 270 pango_renderer_draw_layout (renderer, layout, x, y);
287
288 rc_draw (gl->rc);
289
290 glDisable (GL_ALPHA_TEST);
291 glDisable (GL_BLEND);
292 glDisable (GL_TEXTURE_2D);
293
294 rc_free (gl->rc);
295} 271}
296 272
297void 273void
298pango_opengl_render_layout (PangoLayout *layout, 274pango_opengl_render_layout (PangoLayout *layout,
275 rc_t *rc,
299 int x, int y, 276 int x, int y,
300 float r, float g, float b, float a, 277 float r, float g, float b, float a,
301 int flags) 278 int flags)
302{ 279{
303 pango_opengl_render_layout_subpixel (layout, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags); 280 pango_opengl_render_layout_subpixel (
281 layout, rc, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags
282 );
304} 283}
305 284
306static void 285static void
307pango_opengl_renderer_init (PangoOpenGLRenderer *renderer) 286pango_opengl_renderer_init (PangoOpenGLRenderer *renderer)
308{ 287{
324 303
325 renderer->underline = PANGO_UNDERLINE_NONE; 304 renderer->underline = PANGO_UNDERLINE_NONE;
326 renderer->strikethrough = FALSE; 305 renderer->strikethrough = FALSE;
327 306
328 gl->key.mode = GL_QUADS; 307 gl->key.mode = GL_QUADS;
329 gl->key.format = GL_T2F_V3F; 308 gl->key.format = 0; // glyphs
330 gl->key.texname = 0; 309 gl->key.texname = 0;
331 310
332 for (l = run->item->analysis.extra_attrs; l; l = l->next) 311 for (l = run->item->analysis.extra_attrs; l; l = l->next)
333 { 312 {
334 PangoAttribute *attr = l->data; 313 PangoAttribute *attr = l->data;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines