summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkmagnifier.c58
1 files changed, 30 insertions, 28 deletions
diff --git a/gtk/gtkmagnifier.c b/gtk/gtkmagnifier.c
index 4827d63f9b..90f4bccd44 100644
--- a/gtk/gtkmagnifier.c
+++ b/gtk/gtkmagnifier.c
@@ -18,6 +18,8 @@
#include "config.h"
#include "gtk/gtk.h"
#include "gtkmagnifierprivate.h"
+#include "gtkwidgetprivate.h"
+#include "gtksnapshotprivate.h"
#include "gtkintl.h"
enum {
@@ -95,42 +97,42 @@ _gtk_magnifier_get_property (GObject *object,
}
}
-static gboolean
-_gtk_magnifier_draw (GtkWidget *widget,
- cairo_t *cr)
+static void
+gtk_magnifier_snapshot (GtkWidget *widget,
+ GtkSnapshot *snapshot)
{
- GtkAllocation allocation, inspected_alloc;
- GtkMagnifier *magnifier;
- GtkMagnifierPrivate *priv;
- gdouble x, y;
-
- magnifier = GTK_MAGNIFIER (widget);
- priv = _gtk_magnifier_get_instance_private (magnifier);
+ GtkMagnifier *magnifier = GTK_MAGNIFIER (widget);
+ GtkMagnifierPrivate *priv = _gtk_magnifier_get_instance_private (magnifier);
+ GtkSnapshot inspected_snapshot;
+ GskRenderNode *inspected_node;
+ graphene_matrix_t transform;
if (priv->inspected == NULL)
- return FALSE;
+ return;
if (!gtk_widget_is_visible (priv->inspected))
- return FALSE;
+ return;
- gtk_widget_get_allocation (widget, &allocation);
- gtk_widget_get_allocation (priv->inspected, &inspected_alloc);
+ g_signal_handler_block (priv->inspected, priv->draw_handler);
- if (!priv->resize)
- cairo_translate (cr, allocation.width / 2, allocation.height / 2);
+ gtk_snapshot_init (&inspected_snapshot,
+ gtk_snapshot_get_renderer (snapshot),
+ snapshot->record_names,
+ NULL,
+ "MagnifierSnapshot");
- x = CLAMP (priv->x, 0, inspected_alloc.width);
- y = CLAMP (priv->y, 0, inspected_alloc.height);
+ gtk_widget_snapshot (priv->inspected, &inspected_snapshot);
+ inspected_node = gtk_snapshot_finish (&inspected_snapshot);
- cairo_save (cr);
- cairo_scale (cr, priv->magnification, priv->magnification);
- cairo_translate (cr, -x, -y);
- g_signal_handler_block (priv->inspected, priv->draw_handler);
- gtk_widget_draw (priv->inspected, cr);
- g_signal_handler_unblock (priv->inspected, priv->draw_handler);
- cairo_restore (cr);
+ graphene_matrix_init_identity (&transform);
+ graphene_matrix_scale (&transform, priv->magnification, priv->magnification, 1);
+
+ gtk_snapshot_push_transform (snapshot, &transform, "Magnifier transform");
+ gtk_snapshot_append_node (snapshot, inspected_node);
+ gtk_snapshot_pop (snapshot);
- return TRUE;
+
+ g_signal_handler_unblock (priv->inspected, priv->draw_handler);
}
static void
@@ -160,7 +162,6 @@ gtk_magnifier_measure (GtkWidget *widget,
*natural = size;
}
-
static void
resize_handler (GtkWidget *widget,
GtkAllocation *alloc,
@@ -204,6 +205,7 @@ draw_handler (GtkWidget *widget,
GtkWidget *magnifier)
{
gtk_widget_queue_draw (magnifier);
+
return FALSE;
}
@@ -271,7 +273,7 @@ _gtk_magnifier_class_init (GtkMagnifierClass *klass)
object_class->get_property = _gtk_magnifier_get_property;
widget_class->destroy = _gtk_magnifier_destroy;
- widget_class->draw = _gtk_magnifier_draw;
+ widget_class->snapshot = gtk_magnifier_snapshot;
widget_class->measure = gtk_magnifier_measure;
widget_class->map = gtk_magnifier_map;
widget_class->unmap = gtk_magnifier_unmap;