[gtk+/gtk-style-context: 116/191] Add GdkPangoAttrShade.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-style-context: 116/191] Add GdkPangoAttrShade.
- Date: Tue, 17 Aug 2010 13:57:57 +0000 (UTC)
commit da55e95b37e6fea90c9bd00554423f68a77e51f2
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Jul 2 20:51:56 2010 +0200
Add GdkPangoAttrShade.
This pango attribute shades a color by a factor.
gdk/gdk.symbols | 1 +
gdk/gdkpango.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
gdk/gdkpango.h | 8 +++++
3 files changed, 87 insertions(+), 1 deletions(-)
---
diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
index e9227c6..2cee8a2 100644
--- a/gdk/gdk.symbols
+++ b/gdk/gdk.symbols
@@ -913,6 +913,7 @@ gdk_net_wm_supports
gdk_pango_attr_emboss_color_new
gdk_pango_attr_embossed_new
gdk_pango_attr_stipple_new
+gdk_pango_attr_shade_new
gdk_pango_context_get
gdk_pango_context_get_for_screen
#ifndef GDK_DISABLE_DEPRECATED
diff --git a/gdk/gdkpango.c b/gdk/gdkpango.c
index 114ac2e..46f8b31 100644
--- a/gdk/gdkpango.c
+++ b/gdk/gdkpango.c
@@ -50,6 +50,7 @@ struct _GdkPangoRendererPrivate
GdkBitmap *stipple[MAX_RENDER_PART + 1];
PangoColor emboss_color;
gboolean embossed;
+ gdouble shade_factor;
cairo_t *cr;
PangoRenderPart last_part;
@@ -64,6 +65,7 @@ struct _GdkPangoRendererPrivate
static PangoAttrType gdk_pango_attr_stipple_type;
static PangoAttrType gdk_pango_attr_embossed_type;
static PangoAttrType gdk_pango_attr_emboss_color_type;
+static PangoAttrType gdk_pango_attr_shade_type;
enum {
PROP_0,
@@ -219,7 +221,15 @@ get_cairo_context (GdkPangoRenderer *gdk_renderer,
else
{
if (color)
- gdk_cairo_set_source_color (priv->cr, color);
+ {
+ gdouble factor;
+
+ factor = priv->shade_factor;
+ cairo_set_source_rgb (priv->cr,
+ CLAMP (factor * color->red / 65535., 0, 1),
+ CLAMP (factor * color->green / 65535., 0, 1),
+ CLAMP (factor * color->blue / 65535., 0, 1));
+ }
else
cairo_set_source_rgb (priv->cr, 0, 0, 0);
}
@@ -423,6 +433,7 @@ gdk_pango_renderer_prepare_run (PangoRenderer *renderer,
GdkBitmap *stipple = NULL;
gboolean changed = FALSE;
PangoColor emboss_color;
+ gdouble shade_factor = 1;
GSList *l;
int i;
@@ -450,6 +461,10 @@ gdk_pango_renderer_prepare_run (PangoRenderer *renderer,
{
emboss_color = ((GdkPangoAttrEmbossColor*)attr)->color;
}
+ else if (attr->klass->type == gdk_pango_attr_shade_type)
+ {
+ shade_factor = ((GdkPangoAttrShade *) attr)->factor;
+ }
}
gdk_pango_renderer_set_stipple (gdk_renderer, PANGO_RENDER_PART_FOREGROUND, stipple);
@@ -463,6 +478,12 @@ gdk_pango_renderer_prepare_run (PangoRenderer *renderer,
changed = TRUE;
}
+ if (shade_factor != gdk_renderer->priv->shade_factor)
+ {
+ gdk_renderer->priv->shade_factor = shade_factor;
+ changed = TRUE;
+ }
+
if (!color_equal (&gdk_renderer->priv->emboss_color, &emboss_color))
{
gdk_renderer->priv->emboss_color = emboss_color;
@@ -1209,6 +1230,62 @@ gdk_pango_attr_stipple_new (GdkBitmap *stipple)
return (PangoAttribute *)result;
}
+/* GdkPangoAttrShade */
+static PangoAttribute *
+gdk_pango_attr_shade_copy (const PangoAttribute *attr)
+{
+ const GdkPangoAttrShade *s = (const GdkPangoAttrShade *) attr;
+
+ return gdk_pango_attr_shade_new (s->factor);
+}
+
+static void
+gdk_pango_attr_shade_destroy (PangoAttribute *attr)
+{
+ g_free (attr);
+}
+
+static gboolean
+gdk_pango_attr_shade_compare (const PangoAttribute *attr1,
+ const PangoAttribute *attr2)
+{
+ const GdkPangoAttrShade *s1 = (const GdkPangoAttrShade *) attr1;
+ const GdkPangoAttrShade *s2 = (const GdkPangoAttrShade *) attr2;
+
+ return s1->factor == s2->factor;
+}
+
+/**
+ * gdk_pango_attr_shade_new:
+ * @factor: shading factor
+ *
+ * Creates a new attribute to shade a region.
+ *
+ * Return value: new #PangoAttribute
+ **/
+PangoAttribute *
+gdk_pango_attr_shade_new (gdouble factor)
+{
+ GdkPangoAttrShade *result;
+
+ static PangoAttrClass klass = {
+ 0,
+ gdk_pango_attr_shade_copy,
+ gdk_pango_attr_shade_destroy,
+ gdk_pango_attr_shade_compare
+ };
+
+ if (!klass.type)
+ klass.type = gdk_pango_attr_shade_type =
+ pango_attr_type_register ("GdkPangoAttrShade");
+
+ result = g_new (GdkPangoAttrShade, 1);
+ result->attr.klass = &klass;
+ result->factor = factor;
+
+ return (PangoAttribute *) result;
+}
+
/* GdkPangoAttrEmbossed */
static PangoAttribute *
diff --git a/gdk/gdkpango.h b/gdk/gdkpango.h
index e6fade6..0366f52 100644
--- a/gdk/gdkpango.h
+++ b/gdk/gdkpango.h
@@ -140,6 +140,7 @@ GdkRegion *gdk_pango_layout_get_clip_region (PangoLayout *layout,
typedef struct _GdkPangoAttrStipple GdkPangoAttrStipple;
typedef struct _GdkPangoAttrEmbossed GdkPangoAttrEmbossed;
typedef struct _GdkPangoAttrEmbossColor GdkPangoAttrEmbossColor;
+typedef struct _GdkPangoAttrShade GdkPangoAttrShade;
struct _GdkPangoAttrStipple
{
@@ -159,9 +160,16 @@ struct _GdkPangoAttrEmbossColor
PangoColor color;
};
+struct _GdkPangoAttrShade
+{
+ PangoAttribute attr;
+ gdouble factor;
+};
+
PangoAttribute *gdk_pango_attr_stipple_new (GdkBitmap *stipple);
PangoAttribute *gdk_pango_attr_embossed_new (gboolean embossed);
PangoAttribute *gdk_pango_attr_emboss_color_new (const GdkColor *color);
+PangoAttribute *gdk_pango_attr_shade_new (gdouble factor);
void gdk_pango_show_layout (GdkScreen *screen,
cairo_t *cr,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]