]> Pileus Git - ~andy/gtk/blob - gtk/a11y/gtkimagecellaccessible.c
4b356602e0062d8eec36125e55606e144ff7b2b6
[~andy/gtk] / gtk / a11y / gtkimagecellaccessible.c
1 /* GAIL - The GNOME Accessibility Enabling Library
2  * Copyright 2001 Sun Microsystems 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, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #include "config.h"
21
22 #include <gtk/gtk.h>
23 #include "gtkimagecellaccessible.h"
24
25 static gchar *property_list[] = {
26   "pixbuf",
27   NULL
28 };
29
30 static void atk_image_interface_init (AtkImageIface *iface);
31
32 G_DEFINE_TYPE_WITH_CODE (GtkImageCellAccessible, _gtk_image_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE,
33                          G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init))
34
35 static void
36 gtk_image_cell_accessible_finalize (GObject *object)
37 {
38   GtkImageCellAccessible *image_cell = GTK_IMAGE_CELL_ACCESSIBLE (object);
39
40   g_free (image_cell->image_description);
41   G_OBJECT_CLASS (_gtk_image_cell_accessible_parent_class)->finalize (object);
42 }
43
44 static gboolean
45 gtk_image_cell_accessible_update_cache (GtkRendererCellAccessible *cell,
46                                         gboolean                   emit_change_signal)
47 {
48   return FALSE;
49 }
50
51 static void
52 _gtk_image_cell_accessible_class_init (GtkImageCellAccessibleClass *klass)
53 {
54   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
55   GtkRendererCellAccessibleClass *renderer_cell_class = GTK_RENDERER_CELL_ACCESSIBLE_CLASS (klass);
56
57   gobject_class->finalize = gtk_image_cell_accessible_finalize;
58
59   renderer_cell_class->update_cache = gtk_image_cell_accessible_update_cache;
60   renderer_cell_class->property_list = property_list;
61 }
62
63 AtkObject *
64 _gtk_image_cell_accessible_new (void)
65 {
66   GObject *object;
67   AtkObject *atk_object;
68   GtkRendererCellAccessible *cell;
69
70   object = g_object_new (GTK_TYPE_IMAGE_CELL_ACCESSIBLE, NULL);
71
72   g_return_val_if_fail (object != NULL, NULL);
73
74   atk_object = ATK_OBJECT (object);
75   atk_object->role = ATK_ROLE_TABLE_CELL;
76
77   cell = GTK_RENDERER_CELL_ACCESSIBLE (object);
78
79   cell->renderer = gtk_cell_renderer_pixbuf_new ();
80   g_object_ref_sink (cell->renderer);
81
82   return atk_object;
83 }
84
85 static void
86 _gtk_image_cell_accessible_init (GtkImageCellAccessible *image_cell)
87 {
88   image_cell->image_description = NULL;
89 }
90
91 static const gchar *
92 gtk_image_cell_accessible_get_image_description (AtkImage *image)
93 {
94   GtkImageCellAccessible *image_cell = GTK_IMAGE_CELL_ACCESSIBLE (image);
95
96   return image_cell->image_description;
97 }
98
99 static gboolean
100 gtk_image_cell_accessible_set_image_description (AtkImage    *image,
101                                                  const gchar *description)
102 {
103   GtkImageCellAccessible *image_cell = GTK_IMAGE_CELL_ACCESSIBLE (image);
104
105   g_free (image_cell->image_description);
106   image_cell->image_description = g_strdup (description);
107
108   if (image_cell->image_description)
109     return TRUE;
110   else
111     return FALSE;
112 }
113
114 static void
115 gtk_image_cell_accessible_get_image_position (AtkImage     *image,
116                                               gint         *x,
117                                               gint         *y,
118                                               AtkCoordType  coord_type)
119 {
120   atk_component_get_position (ATK_COMPONENT (image), x, y, coord_type);
121 }
122
123 static void
124 gtk_image_cell_accessible_get_image_size (AtkImage *image,
125                                           gint     *width,
126                                           gint     *height)
127 {
128   GtkImageCellAccessible *cell = GTK_IMAGE_CELL_ACCESSIBLE (image);
129   GtkCellRenderer *cell_renderer;
130   GdkPixbuf *pixbuf = NULL;
131
132   cell_renderer = GTK_RENDERER_CELL_ACCESSIBLE (cell)->renderer;
133   g_object_get (GTK_CELL_RENDERER_PIXBUF (cell_renderer),
134                 "pixbuf", &pixbuf,
135                 NULL);
136
137   if (pixbuf)
138     {
139       *width = gdk_pixbuf_get_width (pixbuf);
140       *height = gdk_pixbuf_get_height (pixbuf);
141       g_object_unref (pixbuf);
142     }
143 }
144
145 static void
146 atk_image_interface_init (AtkImageIface  *iface)
147 {
148   iface->get_image_description = gtk_image_cell_accessible_get_image_description;
149   iface->set_image_description = gtk_image_cell_accessible_set_image_description;
150   iface->get_image_position = gtk_image_cell_accessible_get_image_position;
151   iface->get_image_size = gtk_image_cell_accessible_get_image_size;
152 }