| Index: ui/accessibility/platform/ax_platform_node_auralinux.cc
|
| diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc
|
| index 56bdfbff1d46b80ef2bf489aedca5eaeef21663e..36aa4c91b18e1b82ed8a9c03e2937c100c93c5a4 100644
|
| --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc
|
| +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
|
| @@ -184,6 +184,72 @@ static AtkStateSet* ax_platform_node_auralinux_ref_state_set(
|
| }
|
|
|
| //
|
| +// AtkComponent interface
|
| +//
|
| +
|
| +static gfx::Point FindAtkObjectParentCoords(AtkObject* atk_object) {
|
| + if (atk_object_get_role(atk_object) == ATK_ROLE_WINDOW) {
|
| + int x, y;
|
| + atk_component_get_position(ATK_COMPONENT(atk_object),
|
| + &x, &y, ATK_XY_WINDOW);
|
| + gfx::Point window_coords(x, y);
|
| + return window_coords;
|
| + }
|
| + atk_object = atk_object_get_parent(atk_object);
|
| +
|
| + return FindAtkObjectParentCoords(atk_object);
|
| +}
|
| +
|
| +static void ax_platform_node_auralinux_get_extents(AtkComponent* atk_component,
|
| + gint* x, gint* y,
|
| + gint* width, gint* height,
|
| + AtkCoordType coord_type) {
|
| + *x = *y = *width = *height = 0;
|
| + AtkObject* atk_object = ATK_OBJECT(atk_component);
|
| + ui::AXPlatformNodeAuraLinux* obj =
|
| + AtkObjectToAXPlatformNodeAuraLinux(atk_object);
|
| + if (!obj)
|
| + return;
|
| +
|
| + obj->GetExtents(x, y, width, height, coord_type);
|
| +}
|
| +
|
| +static void ax_platform_node_auralinux_get_position(AtkComponent* atk_component,
|
| + gint* x, gint* y,
|
| + AtkCoordType coord_type) {
|
| + *x = *y = 0;
|
| + AtkObject* atk_object = ATK_OBJECT(atk_component);
|
| + ui::AXPlatformNodeAuraLinux* obj =
|
| + AtkObjectToAXPlatformNodeAuraLinux(atk_object);
|
| + if (!obj)
|
| + return;
|
| +
|
| + obj->GetPosition(x, y, coord_type);
|
| +}
|
| +
|
| +static void ax_platform_node_auralinux_get_size(AtkComponent* atk_component,
|
| + gint* width, gint* height) {
|
| + *width = *height = 0;
|
| + AtkObject* atk_object = ATK_OBJECT(atk_component);
|
| + ui::AXPlatformNodeAuraLinux* obj =
|
| + AtkObjectToAXPlatformNodeAuraLinux(atk_object);
|
| + if (!obj)
|
| + return;
|
| +
|
| + obj->GetSize(width, height);
|
| +}
|
| +
|
| +void ax_component_interface_base_init(AtkComponentIface* iface) {
|
| + iface->get_extents = ax_platform_node_auralinux_get_extents;
|
| + iface->get_position = ax_platform_node_auralinux_get_position;
|
| + iface->get_size = ax_platform_node_auralinux_get_size;
|
| +}
|
| +
|
| +static const GInterfaceInfo ComponentInfo = {
|
| + reinterpret_cast<GInterfaceInitFunc>(ax_component_interface_base_init), 0, 0
|
| +};
|
| +
|
| +//
|
| // The rest of the AXPlatformNodeAuraLinux code, not specific to one
|
| // of the Atk* interfaces.
|
| //
|
| @@ -240,6 +306,7 @@ GType ax_platform_node_auralinux_get_type() {
|
|
|
| GType type = g_type_register_static(
|
| ATK_TYPE_OBJECT, "AXPlatformNodeAuraLinux", &tinfo, GTypeFlags(0));
|
| + g_type_add_interface_static(type, ATK_TYPE_COMPONENT, &ComponentInfo);
|
| g_once_init_leave(&type_volatile, type);
|
| }
|
|
|
| @@ -398,4 +465,43 @@ int AXPlatformNodeAuraLinux::GetIndexInParent() {
|
| return 0;
|
| }
|
|
|
| +void AXPlatformNodeAuraLinux::GetExtents(gint* x, gint* y,
|
| + gint* width, gint* height,
|
| + AtkCoordType coord_type) {
|
| + gfx::Rect extents = GetBoundsInScreen();
|
| +
|
| + *x = extents.x();
|
| + *y = extents.y();
|
| + *width = extents.width();
|
| + *height = extents.height();
|
| +
|
| + if (coord_type == ATK_XY_WINDOW) {
|
| + AtkObject* atk_object = GetParent();
|
| + gfx::Point window_coords = FindAtkObjectParentCoords(atk_object);
|
| + *x -= window_coords.x();
|
| + *y -= window_coords.y();
|
| + }
|
| +}
|
| +
|
| +void AXPlatformNodeAuraLinux::GetPosition(gint* x, gint* y,
|
| + AtkCoordType coord_type) {
|
| + gfx::Rect rect_pos = GetBoundsInScreen();
|
| +
|
| + *x = rect_pos.x();
|
| + *y = rect_pos.y();
|
| +
|
| + if (coord_type == ATK_XY_WINDOW) {
|
| + AtkObject* atk_object = GetParent();
|
| + gfx::Point window_coords = FindAtkObjectParentCoords(atk_object);
|
| + *x -= window_coords.x();
|
| + *y -= window_coords.y();
|
| + }
|
| +}
|
| +
|
| +void AXPlatformNodeAuraLinux::GetSize(gint* width, gint* height) {
|
| + gfx::Rect rect_size = GetData().location;
|
| + *width = rect_size.width();
|
| + *height = rect_size.height();
|
| +}
|
| +
|
| } // namespace ui
|
|
|