/**
- * 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 */
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,
PangoGlyphString *glyphs,
wxColour &colour )
{
+#ifdef HAVE_PANGO_XFT
if (PANGO_XFT_IS_FONT (font))
{
Display* xdisplay = wxGlobalDisplay();
color.color.blue = colour.Blue() << 8;
color.color.alpha = 65000;
pango_xft_render( draw, &color, font, glyphs, x, y );
-
+
XftDrawDestroy( draw );
}
else
+#endif
{
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 )
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)
{
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)
{
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,
risen_y + 1,
}
}
-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)
if (strikethrough)
*strikethrough = FALSE;
-
+
if (fg_set)
*fg_set = FALSE;
-
+
if (bg_set)
*bg_set = FALSE;
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 (rise)
*rise = ((PangoAttrInt *)attr)->value;
break;
-
+
default:
break;
}