1/*
2 * Copyright (c) 2014 Red Hat, Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "config.h"
19#include <glib/gi18n-lib.h>
20
21#include "magnifier.h"
22
23#include "gtkmagnifierprivate.h"
24
25#include "gtklabel.h"
26#include "gtkadjustment.h"
27#include "gtkstack.h"
28
29enum
30{
31 PROP_0,
32 PROP_ADJUSTMENT
33};
34
35struct _GtkInspectorMagnifierPrivate
36{
37 GtkWidget *object;
38 GtkWidget *magnifier;
39 GtkAdjustment *adjustment;
40};
41
42G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMagnifier, gtk_inspector_magnifier, GTK_TYPE_BOX)
43
44static void
45gtk_inspector_magnifier_init (GtkInspectorMagnifier *sl)
46{
47 sl->priv = gtk_inspector_magnifier_get_instance_private (self: sl);
48 gtk_widget_init_template (GTK_WIDGET (sl));
49}
50
51void
52gtk_inspector_magnifier_set_object (GtkInspectorMagnifier *sl,
53 GObject *object)
54{
55 GtkWidget *stack;
56 GtkStackPage *page;
57
58 stack = gtk_widget_get_parent (GTK_WIDGET (sl));
59 page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
60
61 sl->priv->object = NULL;
62
63 if (!GTK_IS_WIDGET (object) || !gtk_widget_is_visible (GTK_WIDGET (object)))
64 {
65 g_object_set (object: page, first_property_name: "visible", FALSE, NULL);
66 _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), NULL);
67 return;
68 }
69
70 g_object_set (object: page, first_property_name: "visible", TRUE, NULL);
71
72 sl->priv->object = GTK_WIDGET (object);
73
74 _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), GTK_WIDGET (object));
75 _gtk_magnifier_set_coords (GTK_MAGNIFIER (sl->priv->magnifier), x: 0, y: 0);
76}
77
78static void
79get_property (GObject *object,
80 guint param_id,
81 GValue *value,
82 GParamSpec *pspec)
83{
84 GtkInspectorMagnifier *sl = GTK_INSPECTOR_MAGNIFIER (object);
85
86 switch (param_id)
87 {
88 case PROP_ADJUSTMENT:
89 g_value_take_object (value, v_object: sl->priv->adjustment);
90 break;
91
92 default:
93 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
94 break;
95 }
96}
97
98static void
99set_property (GObject *object,
100 guint param_id,
101 const GValue *value,
102 GParamSpec *pspec)
103{
104 GtkInspectorMagnifier *sl = GTK_INSPECTOR_MAGNIFIER (object);
105
106 switch (param_id)
107 {
108 case PROP_ADJUSTMENT:
109 sl->priv->adjustment = g_value_get_object (value);
110 break;
111
112 default:
113 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
114 break;
115 }
116}
117
118static void
119constructed (GObject *object)
120{
121 GtkInspectorMagnifier *sl = GTK_INSPECTOR_MAGNIFIER (object);
122
123 g_object_bind_property (source: sl->priv->adjustment, source_property: "value",
124 target: sl->priv->magnifier, target_property: "magnification",
125 flags: G_BINDING_SYNC_CREATE);
126}
127
128static void
129gtk_inspector_magnifier_class_init (GtkInspectorMagnifierClass *klass)
130{
131 GObjectClass *object_class = G_OBJECT_CLASS (klass);
132 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
133
134 object_class->get_property = get_property;
135 object_class->set_property = set_property;
136 object_class->constructed = constructed;
137
138 g_object_class_install_property (oclass: object_class, property_id: PROP_ADJUSTMENT,
139 pspec: g_param_spec_object (name: "adjustment", NULL, NULL,
140 GTK_TYPE_ADJUSTMENT, flags: G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
141
142 gtk_widget_class_set_template_from_resource (widget_class, resource_name: "/org/gtk/libgtk/inspector/magnifier.ui");
143 gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMagnifier, magnifier);
144}
145
146// vim: set et sw=2 ts=2:
147

source code of gtk/gtk/inspector/magnifier.c