]> Pileus Git - ~andy/gtk/blobdiff - gdk/gdkpango.c
Merge branch 'master' into toolpalette
[~andy/gtk] / gdk / gdkpango.c
index 1caec30e93cc62d69245b9ddded76fc67f0f7135..24efca8b2918dbff6420745fad7dfd363773b69c 100644 (file)
@@ -17,7 +17,7 @@
  * Boston, MA 02111-1307, USA.
  */
 
-#include <config.h>
+#include "config.h"
 #include <math.h>
 #include <pango/pangocairo.h>
 #include "gdkcairo.h"
@@ -99,9 +99,9 @@ gdk_pango_renderer_constructor (GType                  type,
   GObject *object;
   GdkPangoRenderer *gdk_renderer;
 
-  object = (* G_OBJECT_CLASS (gdk_pango_renderer_parent_class)->constructor) (type,
-                                                                             n_construct_properties,
-                                                                             construct_params);
+  object = G_OBJECT_CLASS (gdk_pango_renderer_parent_class)->constructor (type,
+                                                                          n_construct_properties,
+                                                                          construct_params);
 
   gdk_renderer = GDK_PANGO_RENDERER (object);
   
@@ -214,7 +214,8 @@ get_cairo_context (GdkPangoRenderer *gdk_renderer,
                                  priv->cr,
                                  color,
                                  priv->stipple[part],
-                                 priv->gc_changed);
+                                 priv->gc_changed,
+                                 priv->drawable);
        }
 
       priv->last_part = part;
@@ -311,6 +312,52 @@ gdk_pango_renderer_draw_error_underline (PangoRenderer    *renderer,
        (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
 }
 
+static void
+gdk_pango_renderer_draw_shape (PangoRenderer  *renderer,
+                              PangoAttrShape *attr,
+                              int             x,
+                              int             y)
+{
+  GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
+  GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+  PangoLayout *layout;
+  PangoCairoShapeRendererFunc shape_renderer;
+  gpointer                    shape_renderer_data;
+  cairo_t *cr;
+  double dx = (double)x / PANGO_SCALE, dy = (double)y / PANGO_SCALE;
+
+  layout = pango_renderer_get_layout (renderer);
+
+  if (!layout)
+       return;
+
+  shape_renderer = pango_cairo_context_get_shape_renderer (pango_layout_get_context (layout),
+                                                          &shape_renderer_data);
+
+  if (!shape_renderer)
+    return;
+
+  cr = get_cairo_context (gdk_renderer, PANGO_RENDER_PART_FOREGROUND);
+  
+  cairo_save (cr);
+
+  if (priv->embossed)
+    {
+      cairo_save (cr);
+      emboss_context (gdk_renderer, cr);
+
+      cairo_move_to (cr, dx, dy);
+      shape_renderer (cr, attr, FALSE, shape_renderer_data);
+
+      cairo_restore (cr);
+    }
+
+  cairo_move_to (cr, dx, dy);
+  shape_renderer (cr, attr, FALSE, shape_renderer_data);
+
+  cairo_restore (cr);
+}
+
 static void
 gdk_pango_renderer_part_changed (PangoRenderer   *renderer,
                                 PangoRenderPart  part)
@@ -474,6 +521,7 @@ gdk_pango_renderer_class_init (GdkPangoRendererClass *klass)
   renderer_class->draw_glyphs = gdk_pango_renderer_draw_glyphs;
   renderer_class->draw_rectangle = gdk_pango_renderer_draw_rectangle;
   renderer_class->draw_error_underline = gdk_pango_renderer_draw_error_underline;
+  renderer_class->draw_shape = gdk_pango_renderer_draw_shape;
   renderer_class->part_changed = gdk_pango_renderer_part_changed;
   renderer_class->begin = gdk_pango_renderer_begin;
   renderer_class->end = gdk_pango_renderer_end;