[gtk+] colorswatch: Render background properly
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] colorswatch: Render background properly
- Date: Wed, 8 Oct 2014 03:24:03 +0000 (UTC)
commit c39bd623f648dab0da290fbe9b3a3bafde20fd21
Author: Benjamin Otte <otte redhat com>
Date: Tue Oct 7 23:24:51 2014 +0200
colorswatch: Render background properly
We want to render a background *and* the current color (if there is
one).
This also adds a custom function gtk_render_add_content_path() which
adds the path of the current content area to a cairo_t.
gtk/gtkcolorswatch.c | 23 ++++++++++-------------
gtk/gtkrender.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
gtk/gtkrenderprivate.h | 6 ++++++
3 files changed, 60 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index c50e364..d0feae3 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -20,8 +20,6 @@
#include "gtkcolorswatchprivate.h"
#include "gtkcolorchooserprivate.h"
-#include "gtkroundedboxprivate.h"
-#include "gtkthemingbackgroundprivate.h"
#include "gtkdnd.h"
#include "gtkicontheme.h"
#include "gtkmain.h"
@@ -30,6 +28,7 @@
#include "gtkmenushell.h"
#include "gtkprivate.h"
#include "gtkintl.h"
+#include "gtkrenderprivate.h"
#include "gtkwidgetprivate.h"
#include "a11y/gtkcolorswatchaccessibleprivate.h"
@@ -107,7 +106,6 @@ swatch_draw (GtkWidget *widget,
cairo_t *cr)
{
GtkColorSwatch *swatch = (GtkColorSwatch*)widget;
- GtkThemingBackground background;
gdouble width, height;
GtkStyleContext *context;
GtkStateFlags state;
@@ -126,20 +124,19 @@ swatch_draw (GtkWidget *widget,
gtk_style_context_save (context);
- _gtk_theming_background_init (&background, context,
- 0, 0, width, height,
- GTK_JUNCTION_NONE);
+ gtk_render_background (context, cr, 0, 0, width, height);
if (swatch->priv->has_color)
{
cairo_pattern_t *pattern;
cairo_matrix_t matrix;
+ gtk_render_content_path (context, cr, 0, 0, width, height);
+
if (swatch->priv->use_alpha)
{
cairo_save (cr);
- _gtk_rounded_box_path (&background.padding_box, cr);
cairo_clip_preserve (cr);
cairo_set_source_rgb (cr, 0.33, 0.33, 0.33);
@@ -155,18 +152,18 @@ swatch_draw (GtkWidget *widget,
cairo_restore (cr);
- background.bg_color = swatch->priv->color;
+ gdk_cairo_set_source_rgba (cr, &swatch->priv->color);
}
else
{
- background.bg_color = swatch->priv->color;
- background.bg_color.alpha = 1.0;
+ cairo_set_source_rgb (cr,
+ swatch->priv->color.red,
+ swatch->priv->color.green,
+ swatch->priv->color.blue);
}
- _gtk_theming_background_render (&background, cr);
+ cairo_fill (cr);
}
- else
- _gtk_theming_background_render (&background, cr);
gtk_render_frame (context, cr, 0, 0, width, height);
diff --git a/gtk/gtkrender.c b/gtk/gtkrender.c
index 3f6bc17..2f3f542 100644
--- a/gtk/gtkrender.c
+++ b/gtk/gtkrender.c
@@ -2446,3 +2446,47 @@ gtk_render_icon_surface (GtkStyleContext *context,
cairo_restore (cr);
}
+/*
+ * gtk_render_content_path:
+ * @context: style context to get style information from
+ * @cr: cairo context to add path to
+ * @x: x coordinate of CSS box
+ * @y: y coordinate of CSS box
+ * @width: width of CSS box
+ * @height: height of CSS box
+ *
+ * Adds the path of the content box to @cr for a given border box.
+ * This function respects rounded corners.
+ *
+ * This is useful if you are drawing content that is supposed to
+ * fill the whole content area, like the color buttons in
+ * #GtkColorChooserDialog.
+ **/
+void
+gtk_render_content_path (GtkStyleContext *context,
+ cairo_t *cr,
+ double x,
+ double y,
+ double width,
+ double height)
+{
+ GtkRoundedBox box;
+
+ g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+ g_return_if_fail (cr != NULL);
+
+ _gtk_rounded_box_init_rect (&box, x, y, width, height);
+ _gtk_rounded_box_apply_border_radius_for_context (&box, context, 0);
+
+ _gtk_rounded_box_shrink (&box,
+ _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BORDER_TOP_WIDTH), 100)
+ + _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_PADDING_TOP), 100),
+ _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH), 100)
+ + _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_PADDING_RIGHT), 100),
+ _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH), 100)
+ + _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_PADDING_BOTTOM), 100),
+ _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH), 100)
+ + _gtk_css_number_value_get (_gtk_style_context_peek_property (context,
GTK_CSS_PROPERTY_PADDING_LEFT), 100));
+
+ _gtk_rounded_box_path (&box, cr);
+}
diff --git a/gtk/gtkrenderprivate.h b/gtk/gtkrenderprivate.h
index 73a2c53..81c9d6c 100644
--- a/gtk/gtkrenderprivate.h
+++ b/gtk/gtkrenderprivate.h
@@ -22,6 +22,12 @@
#include <pango/pango.h>
#include <gdk/gdk.h>
+void gtk_render_content_path (GtkStyleContext *context,
+ cairo_t *cr,
+ double x,
+ double y,
+ double width,
+ double height);
void gtk_render_paint_spinner (cairo_t *cr,
gdouble radius,
gdouble progress);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]