summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-12-23 09:31:54 +0100
committerBenjamin Otte <otte@redhat.com>2016-12-23 09:31:54 +0100
commitb901572d861945466dd6df66618b480ccb4c20c5 (patch)
tree3710fa6ff03724ab322df072c925c84fc0a310ee
parentc412a717f11074da8ef4a705dbffa566589f69dc (diff)
downloadgtk+-b901572d861945466dd6df66618b480ccb4c20c5.tar.gz
cellrenderertoggle: Implement snapshot()
-rw-r--r--gtk/gtkcellrenderertoggle.c78
1 files changed, 46 insertions, 32 deletions
diff --git a/gtk/gtkcellrenderertoggle.c b/gtk/gtkcellrenderertoggle.c
index d1aa7f1cf6..7f8dc74b0c 100644
--- a/gtk/gtkcellrenderertoggle.c
+++ b/gtk/gtkcellrenderertoggle.c
@@ -21,6 +21,7 @@
#include "gtkintl.h"
#include "gtkmarshalers.h"
#include "gtkprivate.h"
+#include "gtkrendericonprivate.h"
#include "gtkstylecontextprivate.h"
#include "gtktreeprivate.h"
#include "a11y/gtkbooleancellaccessible.h"
@@ -53,8 +54,8 @@ static void gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cel
gint *y_offset,
gint *width,
gint *height);
-static void gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
- cairo_t *cr,
+static void gtk_cell_renderer_toggle_snapshot (GtkCellRenderer *cell,
+ GtkSnapshot *snapshot,
GtkWidget *widget,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
@@ -125,7 +126,7 @@ gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class)
object_class->set_property = gtk_cell_renderer_toggle_set_property;
cell_class->get_size = gtk_cell_renderer_toggle_get_size;
- cell_class->render = gtk_cell_renderer_toggle_render;
+ cell_class->snapshot = gtk_cell_renderer_toggle_snapshot;
cell_class->activate = gtk_cell_renderer_toggle_activate;
g_object_class_install_property (object_class,
@@ -373,12 +374,12 @@ gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
}
static void
-gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
- cairo_t *cr,
- GtkWidget *widget,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags)
+gtk_cell_renderer_toggle_snapshot (GtkCellRenderer *cell,
+ GtkSnapshot *snapshot,
+ GtkWidget *widget,
+ const GdkRectangle *background_area,
+ const GdkRectangle *cell_area,
+ GtkCellRendererState flags)
{
GtkCellRendererToggle *celltoggle = GTK_CELL_RENDERER_TOGGLE (cell);
GtkCellRendererTogglePrivate *priv = celltoggle->priv;
@@ -388,6 +389,7 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
gint xpad, ypad;
GtkStateFlags state;
GtkBorder padding, border;
+ GtkCssImageBuiltinType image_type;
context = gtk_widget_get_style_context (widget);
gtk_cell_renderer_toggle_get_size (cell, widget, cell_area,
@@ -413,45 +415,57 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
if (priv->active)
state |= GTK_STATE_FLAG_CHECKED;
- cairo_save (cr);
-
- gdk_cairo_rectangle (cr, cell_area);
- cairo_clip (cr);
+ gtk_snapshot_push_clip (snapshot,
+ &GRAPHENE_RECT_INIT (
+ cell_area->x, cell_area->y,
+ cell_area->width, cell_area->height
+ ),
+ "CellToggleClip");
context = gtk_cell_renderer_toggle_save_context (cell, widget);
gtk_style_context_set_state (context, state);
- gtk_render_background (context, cr,
- cell_area->x + x_offset + xpad,
- cell_area->y + y_offset + ypad,
- width, height);
- gtk_render_frame (context, cr,
- cell_area->x + x_offset + xpad,
- cell_area->y + y_offset + ypad,
- width, height);
+ gtk_snapshot_render_background (snapshot, context,
+ cell_area->x + x_offset + xpad,
+ cell_area->y + y_offset + ypad,
+ width, height);
+ gtk_snapshot_render_frame (snapshot, context,
+ cell_area->x + x_offset + xpad,
+ cell_area->y + y_offset + ypad,
+ width, height);
gtk_style_context_get_padding (context, &padding);
gtk_style_context_get_border (context, &border);
if (priv->radio)
{
- gtk_render_option (context, cr,
- cell_area->x + x_offset + xpad + padding.left + border.left,
- cell_area->y + y_offset + ypad + padding.top + border.top,
- width - padding.left - padding.right - border.left - border.right,
- height - padding.top - padding.bottom - border.top - border.bottom);
+ if (state & GTK_STATE_FLAG_INCONSISTENT)
+ image_type = GTK_CSS_IMAGE_BUILTIN_OPTION_INCONSISTENT;
+ else if (state & GTK_STATE_FLAG_CHECKED)
+ image_type = GTK_CSS_IMAGE_BUILTIN_OPTION;
+ else
+ image_type = GTK_CSS_IMAGE_BUILTIN_NONE;
}
else
{
- gtk_render_check (context, cr,
- cell_area->x + x_offset + xpad + padding.left + border.left,
- cell_area->y + y_offset + ypad + padding.top + border.top,
- width - padding.left - padding.right - border.left - border.right,
- height - padding.top - padding.bottom - border.top - border.bottom);
+ if (state & GTK_STATE_FLAG_INCONSISTENT)
+ image_type = GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT;
+ else if (state & GTK_STATE_FLAG_CHECKED)
+ image_type = GTK_CSS_IMAGE_BUILTIN_CHECK;
+ else
+ image_type = GTK_CSS_IMAGE_BUILTIN_NONE;
}
+ gtk_snapshot_translate_2d (snapshot,
+ cell_area->x + x_offset + xpad + padding.left + border.left,
+ cell_area->y + y_offset + ypad + padding.top + border.top);
+ gtk_css_style_snapshot_icon (gtk_style_context_lookup_style (context), snapshot,
+ width - padding.left - padding.right - border.left - border.right,
+ height - padding.top - padding.bottom - border.top - border.bottom,
+ image_type);
+
gtk_style_context_restore (context);
- cairo_restore (cr);
+ gtk_snapshot_pop_and_append (snapshot);
}
static gint