2009-04-16 Xan Lopez <xlopez@igalia.com>
Reviewed by Gustavo Noronha.
https://bugs.webkit.org/show_bug.cgi?id=21546
[GTK] ATK accessibility enhancements
Based on a patch by Alp Toker.
Implement AtkImage interface.
* page/gtk/AccessibilityObjectWrapperAtk.cpp:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@42905 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/page/gtk/AccessibilityObjectWrapperAtk.cpp b/WebCore/page/gtk/AccessibilityObjectWrapperAtk.cpp
index 7092a78..057b948 100644
--- a/WebCore/page/gtk/AccessibilityObjectWrapperAtk.cpp
+++ b/WebCore/page/gtk/AccessibilityObjectWrapperAtk.cpp
@@ -112,6 +112,11 @@
return core(ATK_OBJECT(component));
}
+static AccessibilityObject* core(AtkImage* image)
+{
+ return core(ATK_OBJECT(image));
+}
+
extern "C" {
static const gchar* webkit_accessible_get_name(AtkObject* object)
@@ -738,6 +743,36 @@
iface->grab_focus = webkit_accessible_component_grab_focus;
}
+// Image
+
+static void webkit_accessible_image_get_image_position(AtkImage* image, gint* x, gint* y, AtkCoordType coordType)
+{
+ IntRect rect = core(image)->elementRect();
+ contentsToAtk(core(image), coordType, rect, x, y);
+}
+
+static const gchar* webkit_accessible_image_get_image_description(AtkImage* image)
+{
+ return returnString(core(image)->accessibilityDescription());
+}
+
+static void webkit_accessible_image_get_image_size(AtkImage* image, gint* width, gint* height)
+{
+ IntSize size = core(image)->size();
+
+ if (width)
+ *width = size.width();
+ if (height)
+ *height = size.height();
+}
+
+static void atk_image_interface_init(AtkImageIface* iface)
+{
+ iface->get_image_position = webkit_accessible_image_get_image_position;
+ iface->get_image_description = webkit_accessible_image_get_image_description;
+ iface->get_image_size = webkit_accessible_image_get_image_size;
+}
+
static const GInterfaceInfo AtkInterfacesInitFunctions[] = {
{(GInterfaceInitFunc)atk_action_interface_init,
(GInterfaceFinalizeFunc) NULL, NULL},
@@ -749,6 +784,8 @@
(GInterfaceFinalizeFunc) NULL, NULL},
{(GInterfaceInitFunc)atk_component_interface_init,
(GInterfaceFinalizeFunc) NULL, NULL},
+ {(GInterfaceInitFunc)atk_image_interface_init,
+ (GInterfaceFinalizeFunc) NULL, NULL}
};
enum WAIType {
@@ -756,7 +793,8 @@
WAI_STREAMABLE,
WAI_EDITABLE_TEXT,
WAI_TEXT,
- WAI_COMPONENT
+ WAI_COMPONENT,
+ WAI_IMAGE
};
static GType GetAtkInterfaceTypeFromWAIType(WAIType type)
@@ -772,6 +810,8 @@
return ATK_TYPE_TEXT;
case WAI_COMPONENT:
return ATK_TYPE_COMPONENT;
+ case WAI_IMAGE:
+ return ATK_TYPE_IMAGE;
}
return G_TYPE_INVALID;
@@ -804,6 +844,10 @@
interfaceMask |= 1 << WAI_EDITABLE_TEXT;
}
+ // Image
+ if (coreObject->isImage())
+ interfaceMask |= 1 << WAI_IMAGE;
+
return interfaceMask;
}