0

Use gfx::Transform instead of skia::Matrix44 in blink AX

We will deprecate skia::Matrix44.

Bug: 1167153
Change-Id: Ida3342104192dbd65a2c3282e4b3667a9f028be1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3460102
Reviewed-by: Daniel Libby <dlibby@microsoft.com>
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#971053}
This commit is contained in:
Xianzhu Wang
2022-02-15 05:25:19 +00:00
committed by Chromium LUCI CQ
parent c4c33faa83
commit 3f4af4b9ee
19 changed files with 64 additions and 75 deletions

@ -32,6 +32,7 @@
#include "ui/accessibility/accessibility_features.h"
#include "ui/accessibility/ax_role_properties.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/transform.h"
#include "url/gurl.h"
namespace content {
@ -396,7 +397,7 @@ void AXImageAnnotator::OnImageAnnotated(
// Get the image size as minimum and maximum dimension.
blink::WebAXObject offset_container;
gfx::RectF bounds;
skia::Matrix44 container_transform;
gfx::Transform container_transform;
bool clips_children = false;
image.GetRelativeBounds(offset_container, bounds, container_transform,
&clips_children);

@ -3,9 +3,9 @@
// found in the LICENSE file.
#include "content/renderer/accessibility/blink_ax_action_target.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/public/platform/web_string.h"
#include "ui/gfx/geometry/rect_conversions.h"
#include "ui/gfx/geometry/transform.h"
using blink::WebAXObject;
@ -44,7 +44,7 @@ bool BlinkAXActionTarget::PerformAction(
gfx::Rect BlinkAXActionTarget::GetRelativeBounds() const {
blink::WebAXObject offset_container;
gfx::RectF bounds;
skia::Matrix44 container_transform;
gfx::Transform container_transform;
web_ax_object_.GetRelativeBounds(offset_container, bounds,
container_transform);
return gfx::ToEnclosedRect(bounds);

@ -44,6 +44,7 @@
#include "ui/accessibility/ax_enum_util.h"
#include "ui/accessibility/ax_role_properties.h"
#include "ui/accessibility/ax_tree_id.h"
#include "ui/gfx/geometry/transform.h"
#include "ui/gfx/geometry/vector2d_f.h"
#include "url/gurl.h"
#include "url/url_constants.h"
@ -265,27 +266,23 @@ void BlinkAXTreeSource::PopulateAXRelativeBounds(WebAXObject obj,
bool* clips_children) const {
WebAXObject offset_container;
gfx::RectF bounds_in_container;
skia::Matrix44 web_container_transform;
gfx::Transform container_transform;
obj.GetRelativeBounds(offset_container, bounds_in_container,
web_container_transform, clips_children);
container_transform, clips_children);
bounds->bounds = bounds_in_container;
if (!offset_container.IsDetached())
bounds->offset_container_id = offset_container.AxID();
if (content::AXShouldIncludePageScaleFactorInRoot() && obj.Equals(root())) {
const WebView* web_view = render_frame_->GetWebView();
std::unique_ptr<gfx::Transform> container_transform =
std::make_unique<gfx::Transform>(web_container_transform);
container_transform->Scale(web_view->PageScaleFactor(),
web_view->PageScaleFactor());
container_transform->Translate(
container_transform.Scale(web_view->PageScaleFactor(),
web_view->PageScaleFactor());
container_transform.Translate(
-web_view->VisualViewportOffset().OffsetFromOrigin());
if (!container_transform->IsIdentity())
bounds->transform = std::move(container_transform);
} else if (!web_container_transform.isIdentity()) {
bounds->transform =
base::WrapUnique(new gfx::Transform(web_container_transform));
}
if (!container_transform.IsIdentity())
bounds->transform = std::make_unique<gfx::Transform>(container_transform);
}
bool BlinkAXTreeSource::HasCachedBoundingBox(int32_t id) const {
@ -696,7 +693,7 @@ void BlinkAXTreeSource::AddImageAnnotations(blink::WebAXObject& src,
// unloaded images where the size is unknown.
WebAXObject offset_container;
gfx::RectF bounds;
skia::Matrix44 container_transform;
gfx::Transform container_transform;
bool clips_children = false;
src.GetRelativeBounds(offset_container, bounds, container_transform,
&clips_children);

@ -1156,7 +1156,7 @@ TEST_F(BlinkAXActionTargetTest, TestMethods) {
gfx::RectF expected_bounds;
blink::WebAXObject offset_container;
skia::Matrix44 container_transform;
gfx::Transform container_transform;
input_checkbox.GetRelativeBounds(offset_container, expected_bounds,
container_transform);
gfx::Rect actual_bounds = input_checkbox_action_target->GetRelativeBounds();

@ -13,7 +13,6 @@
#include "base/cxx17_backports.h"
#include "base/strings/stringprintf.h"
#include "gin/handle.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_document.h"
@ -85,18 +84,15 @@ std::string GetAttributes(const blink::WebAXObject& object) {
gfx::RectF BoundsForObject(const blink::WebAXObject& object) {
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
object.GetRelativeBounds(container, bounds, matrix);
gfx::Transform transform;
object.GetRelativeBounds(container, bounds, transform);
gfx::RectF computed_bounds(0, 0, bounds.width(), bounds.height());
while (!container.IsDetached()) {
computed_bounds.Offset(bounds.x(), bounds.y());
computed_bounds.Offset(-container.GetScrollOffset().x(),
-container.GetScrollOffset().y());
if (!matrix.isIdentity()) {
gfx::Transform transform(matrix);
transform.TransformRect(&computed_bounds);
}
container.GetRelativeBounds(container, bounds, matrix);
transform.TransformRect(&computed_bounds);
container.GetRelativeBounds(container, bounds, transform);
}
return computed_bounds;
}
@ -1734,8 +1730,8 @@ v8::Local<v8::Object> WebAXObjectProxy::OffsetContainer() {
UpdateLayout();
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
accessibility_object_.GetRelativeBounds(container, bounds, matrix);
gfx::Transform transform;
accessibility_object_.GetRelativeBounds(container, bounds, transform);
return factory_->GetOrCreate(container);
}
@ -1743,8 +1739,8 @@ float WebAXObjectProxy::BoundsInContainerX() {
UpdateLayout();
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
accessibility_object_.GetRelativeBounds(container, bounds, matrix);
gfx::Transform transform;
accessibility_object_.GetRelativeBounds(container, bounds, transform);
return bounds.x();
}
@ -1752,8 +1748,8 @@ float WebAXObjectProxy::BoundsInContainerY() {
UpdateLayout();
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
accessibility_object_.GetRelativeBounds(container, bounds, matrix);
gfx::Transform transform;
accessibility_object_.GetRelativeBounds(container, bounds, transform);
return bounds.y();
}
@ -1761,8 +1757,8 @@ float WebAXObjectProxy::BoundsInContainerWidth() {
UpdateLayout();
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
accessibility_object_.GetRelativeBounds(container, bounds, matrix);
gfx::Transform transform;
accessibility_object_.GetRelativeBounds(container, bounds, transform);
return bounds.width();
}
@ -1770,8 +1766,8 @@ float WebAXObjectProxy::BoundsInContainerHeight() {
UpdateLayout();
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
accessibility_object_.GetRelativeBounds(container, bounds, matrix);
gfx::Transform transform;
accessibility_object_.GetRelativeBounds(container, bounds, transform);
return bounds.height();
}
@ -1779,9 +1775,9 @@ bool WebAXObjectProxy::HasNonIdentityTransform() {
UpdateLayout();
blink::WebAXObject container;
gfx::RectF bounds;
skia::Matrix44 matrix;
accessibility_object_.GetRelativeBounds(container, bounds, matrix);
return !matrix.isIdentity();
gfx::Transform transform;
accessibility_object_.GetRelativeBounds(container, bounds, transform);
return !transform.IsIdentity();
}
RootWebAXObjectProxy::RootWebAXObjectProxy(const blink::WebAXObject& object,

@ -38,15 +38,12 @@
#include "ui/accessibility/ax_enums.mojom-shared.h"
#include "ui/accessibility/ax_mode.h"
namespace skia {
class Matrix44;
}
namespace gfx {
class Point;
class RectF;
class Rect;
class Size;
class Transform;
}
namespace ui {
@ -346,7 +343,7 @@ class WebAXObject {
// or similar, set |clips_children| to true.
BLINK_EXPORT void GetRelativeBounds(WebAXObject& offset_container,
gfx::RectF& bounds_in_container,
skia::Matrix44& container_transform,
gfx::Transform& container_transform,
bool* clips_children = nullptr) const;
// Retrieves a vector of all WebAXObjects in this document whose

@ -28,13 +28,13 @@
#include "third_party/blink/renderer/modules/accessibility/ax_image_map_link.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/renderer/core/aom/accessible_node.h"
#include "third_party/blink/renderer/core/dom/element_traversal.h"
#include "third_party/blink/renderer/core/html/html_image_element.h"
#include "third_party/blink/renderer/modules/accessibility/ax_layout_object.h"
#include "third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h"
#include "third_party/blink/renderer/platform/graphics/path.h"
#include "ui/gfx/geometry/transform.h"
namespace blink {
@ -102,11 +102,11 @@ KURL AXImageMapLink::Url() const {
void AXImageMapLink::GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const {
*out_container = nullptr;
out_bounds_in_container = gfx::RectF();
out_container_transform.setIdentity();
out_container_transform.MakeIdentity();
HTMLAreaElement* area = AreaElement();
HTMLMapElement* map = MapElement();

@ -70,7 +70,7 @@ class AXImageMapLink final : public AXNodeObject {
static AXObject* GetAXObjectForImageMap(AXObjectCacheImpl& cache, Node* area);
void GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children = nullptr) const override;
private:

@ -48,6 +48,7 @@
#include "third_party/blink/renderer/modules/accessibility/ax_range.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "ui/accessibility/ax_role_properties.h"
#include "ui/gfx/geometry/transform.h"
namespace blink {
@ -58,11 +59,11 @@ AXInlineTextBox::AXInlineTextBox(
void AXInlineTextBox::GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const {
*out_container = nullptr;
out_bounds_in_container = gfx::RectF();
out_container_transform.setIdentity();
out_container_transform.MakeIdentity();
if (!inline_text_box_ || !ParentObject() ||
!ParentObject()->GetLayoutObject()) {

@ -58,7 +58,7 @@ class AXInlineTextBox final : public AXObject {
int TextOffsetInContainer(int offset) const override;
void GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children = nullptr) const override;
ax::mojom::blink::WritingDirection GetTextDirection() const override;
Node* GetNode() const override;

@ -25,13 +25,13 @@
#include "third_party/blink/renderer/modules/accessibility/ax_menu_list_option.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/renderer/core/aom/accessible_node.h"
#include "third_party/blink/renderer/core/dom/events/simulated_click_options.h"
#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
#include "third_party/blink/renderer/modules/accessibility/ax_menu_list.h"
#include "third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.h"
#include "third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h"
#include "ui/gfx/geometry/transform.h"
namespace blink {
@ -146,12 +146,12 @@ bool AXMenuListOption::ComputeAccessibilityIsIgnored(
void AXMenuListOption::GetRelativeBounds(
AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const {
DCHECK(!IsDetached());
*out_container = nullptr;
out_bounds_in_container = gfx::RectF();
out_container_transform.setIdentity();
out_container_transform.MakeIdentity();
// When a <select> is collapsed, the bounds of its options are the same as
// that of the containing <select>.

@ -61,7 +61,7 @@ class AXMenuListOption final : public AXNodeObject {
void GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children = nullptr) const override;
String TextAlternative(bool recursive,
const AXObject* aria_label_or_description_root,

@ -139,6 +139,7 @@
#include "ui/accessibility/ax_role_properties.h"
#include "ui/events/keycodes/dom/dom_code.h"
#include "ui/events/keycodes/dom/keycode_converter.h"
#include "ui/gfx/geometry/transform.h"
namespace {
@ -3536,7 +3537,7 @@ bool AXNodeObject::IsRedundantLabel(HTMLLabelElement* label) {
void AXNodeObject::GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const {
if (GetLayoutObject()) {
AXObject::GetRelativeBounds(out_container, out_bounds_in_container,
@ -3551,7 +3552,7 @@ void AXNodeObject::GetRelativeBounds(AXObject** out_container,
*out_container = nullptr;
out_bounds_in_container = gfx::RectF();
out_container_transform.setIdentity();
out_container_transform.MakeIdentity();
// First check if it has explicit bounds, for example if this element is tied
// to a canvas path. When explicit coordinates are provided, the ID of the

@ -218,7 +218,7 @@ class MODULES_EXPORT AXNodeObject : public AXObject {
// Location
void GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children = nullptr) const override;
void AddChildren() override;

@ -33,7 +33,6 @@
#include "base/strings/string_util.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/public/common/input/web_menu_source_type.h"
#include "third_party/blink/public/mojom/frame/user_activation_notification_type.mojom-blink.h"
#include "third_party/blink/public/mojom/input/focus_type.mojom-blink.h"
@ -108,6 +107,7 @@
#include "ui/accessibility/ax_enums.mojom-blink-forward.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/accessibility/ax_role_properties.h"
#include "ui/gfx/geometry/transform.h"
namespace blink {
@ -5295,11 +5295,11 @@ int AXObject::GetDOMNodeId() const {
void AXObject::GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const {
*out_container = nullptr;
out_bounds_in_container = gfx::RectF();
out_container_transform.setIdentity();
out_container_transform.MakeIdentity();
// First check if it has explicit bounds, for example if this element is tied
// to a canvas path. When explicit coordinates are provided, the ID of the
@ -5419,7 +5419,7 @@ void AXObject::GetRelativeBounds(AXObject** out_container,
if (transform.IsIdentityOr2DTranslation()) {
out_bounds_in_container.Offset(transform.To2DTranslation());
} else {
out_container_transform = TransformationMatrix::ToSkMatrix44(transform);
out_container_transform = TransformationMatrix::ToTransform(transform);
}
}
@ -5434,7 +5434,7 @@ gfx::RectF AXObject::LocalBoundingBoxRectForAccessibility() {
LayoutRect AXObject::GetBoundsInFrameCoordinates() const {
AXObject* container = nullptr;
gfx::RectF bounds;
skia::Matrix44 transform;
gfx::Transform transform;
GetRelativeBounds(&container, bounds, transform);
gfx::RectF computed_bounds(0, 0, bounds.width(), bounds.height());
while (container && container != this) {
@ -5443,10 +5443,7 @@ LayoutRect AXObject::GetBoundsInFrameCoordinates() const {
computed_bounds.Offset(-container->GetScrollOffset().x(),
-container->GetScrollOffset().y());
}
if (!transform.isIdentity()) {
TransformationMatrix transformation_matrix(transform);
transformation_matrix.MapRect(computed_bounds);
}
transform.TransformRect(&computed_bounds);
container->GetRelativeBounds(&container, bounds, transform);
}
return LayoutRect(computed_bounds);

@ -55,8 +55,8 @@
#include "ui/accessibility/ax_mode.h"
#include "ui/gfx/geometry/quad_f.h"
namespace skia {
class Matrix44;
namespace gfx {
class Transform;
}
namespace ui {
@ -848,7 +848,7 @@ class MODULES_EXPORT AXObject : public GarbageCollected<AXObject> {
// set |clips_children| to true.
virtual void GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children = nullptr) const;
gfx::RectF LocalBoundingBoxRectForAccessibility();

@ -4,12 +4,12 @@
#include "third_party/blink/renderer/modules/accessibility/ax_validation_message.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/renderer/core/html/forms/listed_element.h"
#include "third_party/blink/renderer/core/html/html_element.h"
#include "third_party/blink/renderer/core/layout/layout_object.h"
#include "third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h"
#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
#include "ui/gfx/geometry/transform.h"
namespace blink {
@ -28,12 +28,12 @@ bool AXValidationMessage::ComputeAccessibilityIsIgnored(
void AXValidationMessage::GetRelativeBounds(
AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const {
DCHECK(out_container);
*out_container = nullptr;
out_bounds_in_container = gfx::RectF();
out_container_transform.setIdentity();
out_container_transform.MakeIdentity();
if (clips_children)
*clips_children = false;

@ -33,7 +33,7 @@ class AXValidationMessage final : public AXMockObject {
bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const override;
void GetRelativeBounds(AXObject** out_container,
gfx::RectF& out_bounds_in_container,
skia::Matrix44& out_container_transform,
gfx::Transform& out_container_transform,
bool* clips_children) const override;
const AtomicString& LiveRegionStatus() const override;
const AtomicString& LiveRegionRelevant() const override;

@ -30,7 +30,6 @@
#include "third_party/blink/public/web/web_ax_object.h"
#include "skia/ext/skia_matrix_44.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/public/web/web_document.h"
@ -1178,7 +1177,7 @@ void WebAXObject::Dropeffects(
void WebAXObject::GetRelativeBounds(WebAXObject& offset_container,
gfx::RectF& bounds_in_container,
skia::Matrix44& container_transform,
gfx::Transform& container_transform,
bool* clips_children) const {
if (IsDetached())
return;