Skip to content
This repository has been archived by the owner on Feb 25, 2025. It is now read-only.

Commit

Permalink
Add clipping_behavior, tree_id
Browse files Browse the repository at this point in the history
  • Loading branch information
yaakovschectman committed Dec 28, 2022
1 parent 6485595 commit e44c800
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 21 deletions.
5 changes: 4 additions & 1 deletion third_party/accessibility/ax/ax_range.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <utility>
#include <vector>

#include "ax_clipping_behavior.h"
#include "ax_enums.h"
#include "ax_offscreen_result.h"
#include "ax_role_properties.h"
Expand All @@ -35,6 +36,7 @@ class AXRangeRectDelegate {
AXNode::AXID node_id,
int start_offset,
int end_offset,
ui::AXClippingBehavior clipping_behavior,
AXOffscreenResult* offscreen_result) = 0;
virtual gfx::Rect GetBoundsRect(AXTreeID tree_id,
AXNode::AXID node_id,
Expand Down Expand Up @@ -392,7 +394,8 @@ class AXRange {
current_line_start->tree_id(),
current_line_start->anchor_id(),
current_line_start->text_offset(),
current_line_end->text_offset(), &offscreen_result)
current_line_end->text_offset(),
ui::AXClippingBehavior::kUnclipped, &offscreen_result)
: delegate->GetBoundsRect(current_line_start->tree_id(),
current_line_start->anchor_id(),
&offscreen_result);
Expand Down
3 changes: 2 additions & 1 deletion third_party/accessibility/ax/ax_range_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class TestAXRangeScreenRectDelegate : public AXRangeRectDelegate {
AXNode::AXID node_id,
int start_offset,
int end_offset,
ui::AXClippingBehavior clipping_behavior,
AXOffscreenResult* offscreen_result) override {
if (tree_manager_->GetTreeID() != tree_id)
return gfx::Rect();
Expand All @@ -80,7 +81,7 @@ class TestAXRangeScreenRectDelegate : public AXRangeRectDelegate {
TestAXNodeHelper::GetOrCreate(tree_manager_->GetTree(), node);
return wrapper->GetInnerTextRangeBoundsRect(
start_offset, end_offset, AXCoordinateSystem::kScreenDIPs,
AXClippingBehavior::kClipped, offscreen_result);
clipping_behavior, offscreen_result);
}

gfx::Rect GetBoundsRect(AXTreeID tree_id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,13 @@ class AXRangePhysicalPixelRectDelegate : public AXRangeRectDelegate {
AXNode::AXID node_id,
int start_offset,
int end_offset,
ui::AXClippingBehavior clipping_behavior,
AXOffscreenResult* offscreen_result) override {
AXPlatformNodeDelegate* delegate = host_->GetDelegate(tree_id, node_id);
BASE_DCHECK(delegate);
return delegate->GetInnerTextRangeBoundsRect(
start_offset, end_offset, ui::AXCoordinateSystem::kScreenPhysicalPixels,
AXClippingBehavior::kClipped, offscreen_result);
clipping_behavior, offscreen_result);
}

gfx::Rect GetBoundsRect(AXTreeID tree_id,
Expand Down Expand Up @@ -1517,14 +1518,14 @@ void AXPlatformNodeTextRangeProviderWin::TextRangeEndpoints::SetStart(
// IsNullPosition().
if (did_tree_change && start_->kind() != AXPositionKind::NULL_POSITION &&
start_->tree_id() != end_->tree_id()) {
RemoveObserver(start_);
RemoveObserver(start_->tree_id());
}

start_ = std::move(new_start);

if (did_tree_change && !start_->IsNullPosition() &&
start_->tree_id() != end_->tree_id()) {
AddObserver(start_);
AddObserver(start_->tree_id());
}
}

Expand All @@ -1536,33 +1537,29 @@ void AXPlatformNodeTextRangeProviderWin::TextRangeEndpoints::SetEnd(
// IsNullPosition().
if (did_tree_change && end_->kind() != AXPositionKind::NULL_POSITION &&
end_->tree_id() != start_->tree_id()) {
RemoveObserver(end_);
RemoveObserver(end_->tree_id());
}

end_ = std::move(new_end);

if (did_tree_change && !end_->IsNullPosition() &&
start_->tree_id() != end_->tree_id()) {
AddObserver(end_);
AddObserver(end_->tree_id());
}
}

void AXPlatformNodeTextRangeProviderWin::TextRangeEndpoints::AddObserver(
const AXPositionInstance& position) {
auto tree = AXTreeManagerMap::GetInstance()
.GetManager(position->GetAnchor()->tree()->GetAXTreeID())
->GetTree();
if (tree)
tree->AddObserver(this);
const AXTreeID tree_id) {
AXTreeManager* ax_tree_manager = AXTreeManagerMap::GetInstance().GetManager(tree_id);
BASE_DCHECK(ax_tree_manager);
ax_tree_manager->GetTree()->AddObserver(this);
}

void AXPlatformNodeTextRangeProviderWin::TextRangeEndpoints::RemoveObserver(
const AXPositionInstance& position) {
auto tree = AXTreeManagerMap::GetInstance()
.GetManager(position->GetAnchor()->tree()->GetAXTreeID())
->GetTree();
if (tree)
tree->RemoveObserver(this);
const AXTreeID tree_id) {
AXTreeManager* ax_tree_manager = AXTreeManagerMap::GetInstance().GetManager(tree_id);
if (ax_tree_manager)
ax_tree_manager->GetTree()->RemoveObserver(this);
}

// Ensures that our endpoints are located on non-deleted nodes (step 1, case A
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,8 @@ class AX_EXPORT __declspec(uuid("3071e40d-a10d-45ff-a59f-6e8e1138e2c1"))
void SetStart(AXPositionInstance new_start);
void SetEnd(AXPositionInstance new_end);

void AddObserver(const AXPositionInstance& position);
void RemoveObserver(const AXPositionInstance& position);
void AddObserver(const AXTreeID tree_id);
void RemoveObserver(const AXTreeID tree_id);
void OnSubtreeWillBeDeleted(AXTree* tree, AXNode* node) override;
void OnNodeDeleted(AXTree* tree, AXNode::AXID node_id) override;

Expand Down

0 comments on commit e44c800

Please sign in to comment.