[gtk+/quartz-integration: 459/563] Convert GailImage to GtkImageAccessible



commit 9cb3db26ca3868da2f8ba96ee101e1e431862bd4
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jun 26 23:16:26 2011 -0400

    Convert GailImage to GtkImageAccessible

 gtk/a11y/Makefile.am          |    4 +-
 gtk/a11y/gail.c               |    3 -
 gtk/a11y/gailimage.c          |  271 -----------------------------------------
 gtk/a11y/gailimage.h          |   54 --------
 gtk/a11y/gtkimageaccessible.c |  205 +++++++++++++++++++++++++++++++
 gtk/a11y/gtkimageaccessible.h |   54 ++++++++
 gtk/gtkimage.c                |    4 +
 tests/a11y/about.txt          |    2 +-
 tests/a11y/messagedialog.txt  |    2 +-
 9 files changed, 267 insertions(+), 332 deletions(-)
---
diff --git a/gtk/a11y/Makefile.am b/gtk/a11y/Makefile.am
index 9f70e2b..d025add 100644
--- a/gtk/a11y/Makefile.am
+++ b/gtk/a11y/Makefile.am
@@ -19,7 +19,7 @@ gail_c_sources =			\
 	gtkentryaccessible.c		\
 	gailexpander.c			\
 	gtkframeaccessible.c		\
-	gailimage.c			\
+	gtkimageaccessible.c		\
 	gailimagecell.c			\
 	gtklabelaccessible.c		\
 	gaillinkbutton.c		\
@@ -71,7 +71,7 @@ gail_private_h_sources =		\
 	gailexpander.h			\
 	gailfactory.h			\
 	gtkframeaccessible.h		\
-	gailimage.h			\
+	gtkimageaccessible.h		\
 	gailimagecell.h			\
 	gtklabelaccessible.h		\
 	gaillinkbutton.h		\
diff --git a/gtk/a11y/gail.c b/gtk/a11y/gail.c
index 46b7c45..93751f9 100644
--- a/gtk/a11y/gail.c
+++ b/gtk/a11y/gail.c
@@ -32,7 +32,6 @@
 #include "gailcontainer.h"
 #include "gailcontainercell.h"
 #include "gailexpander.h"
-#include "gailimage.h"
 #include "gailimagecell.h"
 #include "gaillinkbutton.h"
 #include "gailmenu.h"
@@ -107,7 +106,6 @@ GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_BUTTON, GailButton, gail_button, GTK_TYPE_BUTT
 GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_LINK_BUTTON, GailLinkButton, gail_link_button, GTK_TYPE_LINK_BUTTON)
 GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_MENU_ITEM, GailMenuItem, gail_menu_item, gail_menu_item_new)
 GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_TOGGLE_BUTTON, GailToggleButton, gail_toggle_button, GTK_TYPE_TOGGLE_BUTTON)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_IMAGE, GailImage, gail_image, GTK_TYPE_IMAGE)
 GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_COMBO_BOX, GailComboBox, gail_combo_box, GTK_TYPE_COMBO_BOX)
 GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU_SHELL, GailMenuShell, gail_menu_shell, GTK_TYPE_MENU_SHELL)
 GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU, GailMenu, gail_menu, GTK_TYPE_MENU)
@@ -873,7 +871,6 @@ gail_accessibility_module_init (void)
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_LINK_BUTTON, gail_link_button);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_MENU_ITEM, gail_menu_item);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_TOGGLE_BUTTON, gail_toggle_button);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_IMAGE, gail_image);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_COMBO_BOX, gail_combo_box);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_MENU_BAR, gail_menu_shell);
   GAIL_WIDGET_SET_FACTORY (GTK_TYPE_MENU, gail_menu);
diff --git a/gtk/a11y/gtkimageaccessible.c b/gtk/a11y/gtkimageaccessible.c
new file mode 100644
index 0000000..82c3be6
--- /dev/null
+++ b/gtk/a11y/gtkimageaccessible.c
@@ -0,0 +1,205 @@
+/* GAIL - The GNOME Accessibility Implementation Library
+ * Copyright 2001 Sun Microsystems Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include "gtkimageaccessible.h"
+
+
+static void atk_image_interface_init (AtkImageIface  *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GtkImageAccessible, gtk_image_accessible, GAIL_TYPE_WIDGET,
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init))
+
+static void
+gtk_image_accessible_initialize (AtkObject *accessible,
+                                 gpointer   data)
+{
+  ATK_OBJECT_CLASS (gtk_image_accessible_parent_class)->initialize (accessible, data);
+
+  accessible->role = ATK_ROLE_ICON;
+}
+
+static void
+gtk_image_accessible_finalize (GObject *object)
+{
+  GtkImageAccessible *aimage = GTK_IMAGE_ACCESSIBLE (object);
+
+  g_free (aimage->image_description);
+  g_free (aimage->stock_name);
+
+  G_OBJECT_CLASS (gtk_image_accessible_parent_class)->finalize (object);
+}
+
+static const gchar *
+gtk_image_accessible_get_name (AtkObject *accessible)
+{
+  GtkWidget* widget;
+  GtkImage *image;
+  GtkImageAccessible *image_accessible;
+  GtkStockItem stock_item;
+  gchar *stock_id;
+  const gchar *name;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+  if (widget == NULL)
+    return NULL;
+
+  name = ATK_OBJECT_CLASS (gtk_image_accessible_parent_class)->get_name (accessible);
+  if (name)
+    return name;
+
+  image = GTK_IMAGE (widget);
+  image_accessible = GTK_IMAGE_ACCESSIBLE (accessible);
+
+  g_free (image_accessible->stock_name);
+  image_accessible->stock_name = NULL;
+
+  if (gtk_image_get_storage_type (image) != GTK_IMAGE_STOCK)
+    return NULL;
+
+  gtk_image_get_stock (image, &stock_id, NULL);
+  if (stock_id == NULL)
+    return NULL;
+
+  if (!gtk_stock_lookup (stock_id, &stock_item))
+    return NULL;
+
+  image_accessible->stock_name = _gtk_toolbar_elide_underscores (stock_item.label);
+  return image_accessible->stock_name;
+}
+
+static void
+gtk_image_accessible_class_init (GtkImageAccessibleClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  AtkObjectClass  *class = ATK_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = gtk_image_accessible_finalize;
+  class->initialize = gtk_image_accessible_initialize;
+  class->get_name = gtk_image_accessible_get_name;
+}
+
+static void
+gtk_image_accessible_init (GtkImageAccessible *image)
+{
+}
+
+static const gchar *
+gtk_image_accessible_get_image_description (AtkImage *image)
+{
+  GtkImageAccessible *accessible = GTK_IMAGE_ACCESSIBLE (image);
+
+  return accessible->image_description;
+}
+
+static void
+gtk_image_accessible_get_image_position (AtkImage     *image,
+                                         gint         *x,
+                                         gint         *y,
+                                         AtkCoordType  coord_type)
+{
+  atk_component_get_position (ATK_COMPONENT (image), x, y, coord_type);
+}
+
+static void
+gtk_image_accessible_get_image_size (AtkImage *image,
+                                     gint     *width,
+                                     gint     *height)
+{
+  GtkWidget* widget;
+  GtkImage *gtk_image;
+  GtkImageType image_type;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image));
+  if (widget == NULL)
+    {
+      *height = -1;
+      *width = -1;
+      return;
+    }
+
+  gtk_image = GTK_IMAGE (widget);
+
+  image_type = gtk_image_get_storage_type (gtk_image);
+  switch (image_type)
+    {
+    case GTK_IMAGE_PIXBUF:
+      {
+        GdkPixbuf *pixbuf;
+
+        pixbuf = gtk_image_get_pixbuf (gtk_image);
+        *height = gdk_pixbuf_get_height (pixbuf);
+        *width = gdk_pixbuf_get_width (pixbuf);
+        break;
+      }
+    case GTK_IMAGE_STOCK:
+    case GTK_IMAGE_ICON_SET:
+    case GTK_IMAGE_ICON_NAME:
+    case GTK_IMAGE_GICON:
+      {
+        GtkIconSize size;
+        GtkSettings *settings;
+
+        settings = gtk_settings_get_for_screen (gtk_widget_get_screen (widget));
+
+        g_object_get (gtk_image, "icon-size", &size, NULL);
+        gtk_icon_size_lookup_for_settings (settings, size, width, height);
+        break;
+      }
+    case GTK_IMAGE_ANIMATION:
+      {
+        GdkPixbufAnimation *animation;
+
+        animation = gtk_image_get_animation (gtk_image);
+        *height = gdk_pixbuf_animation_get_height (animation);
+        *width = gdk_pixbuf_animation_get_width (animation);
+        break;
+      }
+    default:
+      {
+        *height = -1;
+        *width = -1;
+        break;
+      }
+    }
+}
+
+static gboolean
+gtk_image_accessible_set_image_description (AtkImage    *image,
+                                            const gchar *description)
+{
+  GtkImageAccessible* accessible = GTK_IMAGE_ACCESSIBLE (image);
+
+  g_free (accessible->image_description);
+  accessible->image_description = g_strdup (description);
+
+  return TRUE;
+}
+
+static void
+atk_image_interface_init (AtkImageIface *iface)
+{
+  iface->get_image_description = gtk_image_accessible_get_image_description;
+  iface->get_image_position = gtk_image_accessible_get_image_position;
+  iface->get_image_size = gtk_image_accessible_get_image_size;
+  iface->set_image_description = gtk_image_accessible_set_image_description;
+}
diff --git a/gtk/a11y/gtkimageaccessible.h b/gtk/a11y/gtkimageaccessible.h
new file mode 100644
index 0000000..1d25859
--- /dev/null
+++ b/gtk/a11y/gtkimageaccessible.h
@@ -0,0 +1,54 @@
+/* GAIL - The GNOME Accessibility Implementation Library
+ * Copyright 2001 Sun Microsystems Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GTK_IMAGE_ACCESSIBLE_H__
+#define __GTK_IMAGE_ACCESSIBLE_H__
+
+#include "gailwidget.h"
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_IMAGE_ACCESSIBLE                      (gtk_image_accessible_get_type ())
+#define GTK_IMAGE_ACCESSIBLE(obj)                      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_IMAGE_ACCESSIBLE, GtkImageAccessible))
+#define GTK_IMAGE_ACCESSIBLE_CLASS(klass)              (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_IMAGE_ACCESSIBLE, GtkImageAccessibleClass))
+#define GTK_IS_IMAGE_ACCESSIBLE(obj)                   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_IMAGE_ACCESSIBLE))
+#define GTK_IS_IMAGE_ACCESSIBLE_CLASS(klass)           (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IMAGE_ACCESSIBLE))
+#define GTK_IMAGE_ACCESSIBLE_GET_CLASS(obj)            (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_IMAGE_ACCESSIBLE, GtkImageAccessibleClass))
+
+typedef struct _GtkImageAccessible      GtkImageAccessible;
+typedef struct _GtkImageAccessibleClass GtkImageAccessibleClass;
+
+struct _GtkImageAccessible
+{
+  GailWidget parent;
+
+  gchar*     image_description;
+  gchar*     stock_name;
+};
+
+struct _GtkImageAccessibleClass
+{
+  GailWidgetClass parent_class;
+};
+
+GType gtk_image_accessible_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GTK_IMAGE_ACCESSIBLE_H__ */
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 6fbb718..d0cac96 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -39,6 +39,8 @@
 #include "gtkprivate.h"
 #include "gtktypebuiltins.h"
 
+#include "a11y/gtkimageaccessible.h"
+
 /**
  * SECTION:gtkimage
  * @Short_description: A widget displaying an image
@@ -357,6 +359,8 @@ gtk_image_class_init (GtkImageClass *class)
                                                          GTK_PARAM_READWRITE));
 
   g_type_class_add_private (class, sizeof (GtkImagePrivate));
+
+  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_IMAGE_ACCESSIBLE);
 }
 
 static void
diff --git a/tests/a11y/about.txt b/tests/a11y/about.txt
index e1f2bd6..0e89431 100644
--- a/tests/a11y/about.txt
+++ b/tests/a11y/about.txt
@@ -25,7 +25,7 @@ window1
       <AtkComponent>
       layer: widget
       alpha: 1
-      unnamed-GailImage-2
+      unnamed-GtkImageAccessible-2
         "icon"
         parent: unnamed-GailContainer-1
         index: 0
diff --git a/tests/a11y/messagedialog.txt b/tests/a11y/messagedialog.txt
index 5204879..e95bdfb 100644
--- a/tests/a11y/messagedialog.txt
+++ b/tests/a11y/messagedialog.txt
@@ -25,7 +25,7 @@ window1
       <AtkComponent>
       layer: widget
       alpha: 1
-      unnamed-GailImage-2
+      unnamed-GtkImageAccessible-2
         "icon"
         parent: unnamed-GailContainer-1
         index: 0



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]