X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..d2e66707deb10dea6f92e3e4092f8a43ef942a5d:/src/x11/pango_x.cpp?ds=sidebyside diff --git a/src/x11/pango_x.cpp b/src/x11/pango_x.cpp index e3e12e3dec..0e82c04f96 100644 --- a/src/x11/pango_x.cpp +++ b/src/x11/pango_x.cpp @@ -1,44 +1,45 @@ /** - * This file gets included from dcclient.cpp and implements - * the X11 interface to Pango. + * This file gets included from dcclient.cpp and implements + * the X11 interface to Pango. * Copyright (C) Owen Taylor and Robert Roebling. + * Licence: The wxWindows licence */ /* Declaration */ void x11_draw_glyphs( Drawable drawable, - GC gc, - PangoFont *font, - int x, - int y, - PangoGlyphString *glyphs, + GC gc, + PangoFont *font, + int x, + int y, + PangoGlyphString *glyphs, wxColour &colour ); - -void + +void x11_draw_layout_line_with_colors( Drawable drawable, GC gc, - int x, + int x, int y, PangoLayoutLine *line, wxColour &colour ); - -void + +void x11_draw_layout_with_colors( Drawable drawable, GC gc, - int x, + int x, int y, PangoLayout *layout, wxColour &colour ); - -void + +void x11_draw_layout( Drawable drawable, GC gc, - int x, + int x, int y, PangoLayout *layout, wxColour &colour); - + void x11_pango_get_item_properties( PangoItem *item, PangoUnderline *uline, @@ -56,13 +57,14 @@ x11_pango_get_item_properties( PangoItem *item, void x11_draw_glyphs( Drawable drawable, - GC gc, - PangoFont *font, - int x, - int y, - PangoGlyphString *glyphs, + GC gc, + PangoFont *font, + int x, + int y, + PangoGlyphString *glyphs, wxColour &colour ) { +#ifdef HAVE_PANGO_XFT if (PANGO_XFT_IS_FONT (font)) { Display* xdisplay = wxGlobalDisplay(); @@ -79,19 +81,21 @@ x11_draw_glyphs( Drawable drawable, color.color.blue = colour.Blue() << 8; color.color.alpha = 65000; pango_xft_render( draw, &color, font, glyphs, x, y ); - + XftDrawDestroy( draw ); } else +#endif { + wxUnusedVar(colour); pango_x_render( wxGlobalDisplay(), drawable, gc, font, glyphs, x, y ); } } -void +void x11_draw_layout_line_with_colors( Drawable drawable, GC gc, - int x, + int x, int y, PangoLayoutLine *line, wxColour &colour ) @@ -104,9 +108,9 @@ x11_draw_layout_line_with_colors( Drawable drawable, gint rise = 0; context = pango_layout_get_context (line->layout); - + pango_layout_line_get_extents (line,NULL, &overall_rect); - + GSList *tmp_list = line->runs; while (tmp_list) { @@ -115,16 +119,16 @@ x11_draw_layout_line_with_colors( Drawable drawable, PangoColor fg_color, bg_color; gboolean strike, fg_set, bg_set, shape_set; gint risen_y; - + tmp_list = tmp_list->next; - - x11_pango_get_item_properties (run->item, &uline, - &strike, &rise, &fg_color, &fg_set, &bg_color, &bg_set, + + x11_pango_get_item_properties (run->item, &uline, + &strike, &rise, &fg_color, &fg_set, &bg_color, &bg_set, &shape_set, &ink_rect, &logical_rect); /* we subtract the rise because X coordinates are upside down */ risen_y = y - rise / PANGO_SCALE; - + if (!shape_set) { if (uline == PANGO_UNDERLINE_NONE) @@ -134,27 +138,27 @@ x11_draw_layout_line_with_colors( Drawable drawable, } #if 0 - XDrawRectangle( drawable, gc, TRUE, - x + (x_off + logical_rect.x) / PANGO_SCALE, - risen_y + overall_rect.y / PANGO_SCALE, - logical_rect.width / PANGO_SCALE, - overall_rect.height / PANGO_SCALE); + XDrawRectangle( drawable, gc, TRUE, + x + (x_off + logical_rect.x) / PANGO_SCALE, + risen_y + overall_rect.y / PANGO_SCALE, + logical_rect.width / PANGO_SCALE, + overall_rect.height / PANGO_SCALE); #endif if (!shape_set) { int gx = x + x_off / PANGO_SCALE; int gy = risen_y; - + x11_draw_glyphs( drawable, gc, run->item->analysis.font, gx, gy, run->glyphs, colour ); } - + if (uline == PANGO_UNDERLINE_SINGLE) - { + { XDrawLine( wxGlobalDisplay(), drawable, gc, - x + (x_off + ink_rect.x) / PANGO_SCALE - 1, + x + (x_off + ink_rect.x) / PANGO_SCALE - 1, risen_y + 1, - x + (x_off + ink_rect.x + ink_rect.width) / PANGO_SCALE, + x + (x_off + ink_rect.x + ink_rect.width) / PANGO_SCALE, risen_y + 1); } @@ -162,40 +166,40 @@ x11_draw_layout_line_with_colors( Drawable drawable, } } -void +void x11_draw_layout_with_colors( Drawable drawable, GC gc, - int x, + int x, int y, PangoLayout *layout, wxColour &colour ) { PangoLayoutIter *iter = pango_layout_get_iter (layout); - + do { PangoLayoutLine *line = pango_layout_iter_get_line (iter); - + PangoRectangle logical_rect; pango_layout_iter_get_line_extents (iter, NULL, &logical_rect); - + int baseline = pango_layout_iter_get_baseline (iter); - + x11_draw_layout_line_with_colors( drawable, gc, x + logical_rect.x / PANGO_SCALE, y + baseline / PANGO_SCALE, line, colour ); - + } while (pango_layout_iter_next_line (iter)); pango_layout_iter_free (iter); } -void +void x11_draw_layout( Drawable drawable, GC gc, - int x, + int x, int y, PangoLayout *layout, wxColour &colour) @@ -222,10 +226,10 @@ x11_pango_get_item_properties( PangoItem *item, if (strikethrough) *strikethrough = FALSE; - + if (fg_set) *fg_set = FALSE; - + if (bg_set) *bg_set = FALSE; @@ -240,50 +244,50 @@ x11_pango_get_item_properties( PangoItem *item, PangoAttribute *attr = (PangoAttribute *) tmp_list->data; switch (attr->klass->type) - { - case PANGO_ATTR_UNDERLINE: - if (uline) - *uline = (PangoUnderline) ((PangoAttrInt *)attr)->value; - break; - - case PANGO_ATTR_STRIKETHROUGH: - if (strikethrough) - *strikethrough = ((PangoAttrInt *)attr)->value; - break; - - case PANGO_ATTR_FOREGROUND: - if (fg_color) - *fg_color = ((PangoAttrColor *)attr)->color; - if (fg_set) - *fg_set = TRUE; - - break; - - case PANGO_ATTR_BACKGROUND: - if (bg_color) - *bg_color = ((PangoAttrColor *)attr)->color; - if (bg_set) - *bg_set = TRUE; - - break; - - case PANGO_ATTR_SHAPE: - if (shape_set) - *shape_set = TRUE; - if (logical_rect) - *logical_rect = ((PangoAttrShape *)attr)->logical_rect; - if (ink_rect) - *ink_rect = ((PangoAttrShape *)attr)->ink_rect; - break; - - case PANGO_ATTR_RISE: - if (rise) - *rise = ((PangoAttrInt *)attr)->value; - break; - - default: - break; - } + { + case PANGO_ATTR_UNDERLINE: + if (uline) + *uline = (PangoUnderline) ((PangoAttrInt *)attr)->value; + break; + + case PANGO_ATTR_STRIKETHROUGH: + if (strikethrough) + *strikethrough = ((PangoAttrInt *)attr)->value; + break; + + case PANGO_ATTR_FOREGROUND: + if (fg_color) + *fg_color = ((PangoAttrColor *)attr)->color; + if (fg_set) + *fg_set = TRUE; + + break; + + case PANGO_ATTR_BACKGROUND: + if (bg_color) + *bg_color = ((PangoAttrColor *)attr)->color; + if (bg_set) + *bg_set = TRUE; + + break; + + case PANGO_ATTR_SHAPE: + if (shape_set) + *shape_set = TRUE; + if (logical_rect) + *logical_rect = ((PangoAttrShape *)attr)->logical_rect; + if (ink_rect) + *ink_rect = ((PangoAttrShape *)attr)->ink_rect; + break; + + case PANGO_ATTR_RISE: + if (rise) + *rise = ((PangoAttrInt *)attr)->value; + break; + + default: + break; + } tmp_list = tmp_list->next; } }