/**
- * 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,
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();
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 )
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)
}
#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);
}
}
}
-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;
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;
}
}