| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013, Google Inc. All rights reserved. | 2 * Copyright (C) 2013, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "modules/accessibility/AXObjectCacheImpl.h" | 34 #include "modules/accessibility/AXObjectCacheImpl.h" |
| 35 #include "platform/LayoutUnit.h" | 35 #include "platform/LayoutUnit.h" |
| 36 | 36 |
| 37 namespace blink { | 37 namespace blink { |
| 38 | 38 |
| 39 using namespace HTMLNames; | 39 using namespace HTMLNames; |
| 40 | 40 |
| 41 AXInlineTextBox::AXInlineTextBox( | 41 AXInlineTextBox::AXInlineTextBox( |
| 42 PassRefPtr<AbstractInlineTextBox> inline_text_box, | 42 PassRefPtr<AbstractInlineTextBox> inline_text_box, |
| 43 AXObjectCacheImpl& ax_object_cache) | 43 AXObjectCacheImpl& ax_object_cache) |
| 44 : AXObject(ax_object_cache), inline_text_box_(std::move(inline_text_box)) {} | 44 : AXObjectImpl(ax_object_cache), |
| 45 inline_text_box_(std::move(inline_text_box)) {} |
| 45 | 46 |
| 46 AXInlineTextBox* AXInlineTextBox::Create( | 47 AXInlineTextBox* AXInlineTextBox::Create( |
| 47 PassRefPtr<AbstractInlineTextBox> inline_text_box, | 48 PassRefPtr<AbstractInlineTextBox> inline_text_box, |
| 48 AXObjectCacheImpl& ax_object_cache) { | 49 AXObjectCacheImpl& ax_object_cache) { |
| 49 return new AXInlineTextBox(std::move(inline_text_box), ax_object_cache); | 50 return new AXInlineTextBox(std::move(inline_text_box), ax_object_cache); |
| 50 } | 51 } |
| 51 | 52 |
| 52 void AXInlineTextBox::Init() {} | 53 void AXInlineTextBox::Init() {} |
| 53 | 54 |
| 54 void AXInlineTextBox::Detach() { | 55 void AXInlineTextBox::Detach() { |
| 55 AXObject::Detach(); | 56 AXObjectImpl::Detach(); |
| 56 inline_text_box_ = nullptr; | 57 inline_text_box_ = nullptr; |
| 57 } | 58 } |
| 58 | 59 |
| 59 void AXInlineTextBox::GetRelativeBounds( | 60 void AXInlineTextBox::GetRelativeBounds( |
| 60 AXObject** out_container, | 61 AXObjectImpl** out_container, |
| 61 FloatRect& out_bounds_in_container, | 62 FloatRect& out_bounds_in_container, |
| 62 SkMatrix44& out_container_transform) const { | 63 SkMatrix44& out_container_transform) const { |
| 63 *out_container = nullptr; | 64 *out_container = nullptr; |
| 64 out_bounds_in_container = FloatRect(); | 65 out_bounds_in_container = FloatRect(); |
| 65 out_container_transform.setIdentity(); | 66 out_container_transform.setIdentity(); |
| 66 | 67 |
| 67 if (!inline_text_box_ || !ParentObject() || | 68 if (!inline_text_box_ || !ParentObject() || |
| 68 !ParentObject()->GetLayoutObject()) | 69 !ParentObject()->GetLayoutObject()) |
| 69 return; | 70 return; |
| 70 | 71 |
| 71 *out_container = ParentObject(); | 72 *out_container = ParentObject(); |
| 72 out_bounds_in_container = FloatRect(inline_text_box_->LocalBounds()); | 73 out_bounds_in_container = FloatRect(inline_text_box_->LocalBounds()); |
| 73 | 74 |
| 74 // Subtract the local bounding box of the parent because they're | 75 // Subtract the local bounding box of the parent because they're |
| 75 // both in the same coordinate system. | 76 // both in the same coordinate system. |
| 76 LayoutObject* parent_layout_object = ParentObject()->GetLayoutObject(); | 77 LayoutObject* parent_layout_object = ParentObject()->GetLayoutObject(); |
| 77 FloatRect parent_bounding_box = | 78 FloatRect parent_bounding_box = |
| 78 parent_layout_object->LocalBoundingBoxRectForAccessibility(); | 79 parent_layout_object->LocalBoundingBoxRectForAccessibility(); |
| 79 out_bounds_in_container.MoveBy(-parent_bounding_box.Location()); | 80 out_bounds_in_container.MoveBy(-parent_bounding_box.Location()); |
| 80 } | 81 } |
| 81 | 82 |
| 82 bool AXInlineTextBox::ComputeAccessibilityIsIgnored( | 83 bool AXInlineTextBox::ComputeAccessibilityIsIgnored( |
| 83 IgnoredReasons* ignored_reasons) const { | 84 IgnoredReasons* ignored_reasons) const { |
| 84 AXObject* parent = ParentObject(); | 85 AXObjectImpl* parent = ParentObject(); |
| 85 if (!parent) | 86 if (!parent) |
| 86 return false; | 87 return false; |
| 87 | 88 |
| 88 if (!parent->AccessibilityIsIgnored()) | 89 if (!parent->AccessibilityIsIgnored()) |
| 89 return false; | 90 return false; |
| 90 | 91 |
| 91 if (ignored_reasons) | 92 if (ignored_reasons) |
| 92 parent->ComputeAccessibilityIsIgnored(ignored_reasons); | 93 parent->ComputeAccessibilityIsIgnored(ignored_reasons); |
| 93 | 94 |
| 94 return true; | 95 return true; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 116 return; | 117 return; |
| 117 | 118 |
| 118 Vector<AbstractInlineTextBox::WordBoundaries> word_boundaries; | 119 Vector<AbstractInlineTextBox::WordBoundaries> word_boundaries; |
| 119 inline_text_box_->GetWordBoundaries(word_boundaries); | 120 inline_text_box_->GetWordBoundaries(word_boundaries); |
| 120 words.resize(word_boundaries.size()); | 121 words.resize(word_boundaries.size()); |
| 121 for (unsigned i = 0; i < word_boundaries.size(); i++) | 122 for (unsigned i = 0; i < word_boundaries.size(); i++) |
| 122 words[i] = | 123 words[i] = |
| 123 AXRange(word_boundaries[i].start_index, word_boundaries[i].end_index); | 124 AXRange(word_boundaries[i].start_index, word_boundaries[i].end_index); |
| 124 } | 125 } |
| 125 | 126 |
| 126 String AXInlineTextBox::GetName(AXNameFrom& name_from, | 127 String AXInlineTextBox::GetName( |
| 127 AXObject::AXObjectVector* name_objects) const { | 128 AXNameFrom& name_from, |
| 129 AXObjectImpl::AXObjectVector* name_objects) const { |
| 128 if (!inline_text_box_) | 130 if (!inline_text_box_) |
| 129 return String(); | 131 return String(); |
| 130 | 132 |
| 131 name_from = kAXNameFromContents; | 133 name_from = kAXNameFromContents; |
| 132 return inline_text_box_->GetText(); | 134 return inline_text_box_->GetText(); |
| 133 } | 135 } |
| 134 | 136 |
| 135 AXObject* AXInlineTextBox::ComputeParent() const { | 137 AXObjectImpl* AXInlineTextBox::ComputeParent() const { |
| 136 DCHECK(!IsDetached()); | 138 DCHECK(!IsDetached()); |
| 137 if (!inline_text_box_ || !ax_object_cache_) | 139 if (!inline_text_box_ || !ax_object_cache_) |
| 138 return 0; | 140 return 0; |
| 139 | 141 |
| 140 LineLayoutText line_layout_text = inline_text_box_->GetLineLayoutItem(); | 142 LineLayoutText line_layout_text = inline_text_box_->GetLineLayoutItem(); |
| 141 return ax_object_cache_->GetOrCreate( | 143 return ax_object_cache_->GetOrCreate( |
| 142 LineLayoutAPIShim::LayoutObjectFrom(line_layout_text)); | 144 LineLayoutAPIShim::LayoutObjectFrom(line_layout_text)); |
| 143 } | 145 } |
| 144 | 146 |
| 145 // In addition to LTR and RTL direction, edit fields also support | 147 // In addition to LTR and RTL direction, edit fields also support |
| 146 // top to bottom and bottom to top via the CSS writing-mode property. | 148 // top to bottom and bottom to top via the CSS writing-mode property. |
| 147 AccessibilityTextDirection AXInlineTextBox::GetTextDirection() const { | 149 AccessibilityTextDirection AXInlineTextBox::GetTextDirection() const { |
| 148 if (!inline_text_box_) | 150 if (!inline_text_box_) |
| 149 return AXObject::GetTextDirection(); | 151 return AXObjectImpl::GetTextDirection(); |
| 150 | 152 |
| 151 switch (inline_text_box_->GetDirection()) { | 153 switch (inline_text_box_->GetDirection()) { |
| 152 case AbstractInlineTextBox::kLeftToRight: | 154 case AbstractInlineTextBox::kLeftToRight: |
| 153 return kAccessibilityTextDirectionLTR; | 155 return kAccessibilityTextDirectionLTR; |
| 154 case AbstractInlineTextBox::kRightToLeft: | 156 case AbstractInlineTextBox::kRightToLeft: |
| 155 return kAccessibilityTextDirectionRTL; | 157 return kAccessibilityTextDirectionRTL; |
| 156 case AbstractInlineTextBox::kTopToBottom: | 158 case AbstractInlineTextBox::kTopToBottom: |
| 157 return kAccessibilityTextDirectionTTB; | 159 return kAccessibilityTextDirectionTTB; |
| 158 case AbstractInlineTextBox::kBottomToTop: | 160 case AbstractInlineTextBox::kBottomToTop: |
| 159 return kAccessibilityTextDirectionBTT; | 161 return kAccessibilityTextDirectionBTT; |
| 160 } | 162 } |
| 161 | 163 |
| 162 return AXObject::GetTextDirection(); | 164 return AXObjectImpl::GetTextDirection(); |
| 163 } | 165 } |
| 164 | 166 |
| 165 AXObject* AXInlineTextBox::NextOnLine() const { | 167 AXObjectImpl* AXInlineTextBox::NextOnLine() const { |
| 166 RefPtr<AbstractInlineTextBox> next_on_line = inline_text_box_->NextOnLine(); | 168 RefPtr<AbstractInlineTextBox> next_on_line = inline_text_box_->NextOnLine(); |
| 167 if (next_on_line) | 169 if (next_on_line) |
| 168 return ax_object_cache_->GetOrCreate(next_on_line.Get()); | 170 return ax_object_cache_->GetOrCreate(next_on_line.Get()); |
| 169 | 171 |
| 170 if (!inline_text_box_->IsLast()) | 172 if (!inline_text_box_->IsLast()) |
| 171 return 0; | 173 return 0; |
| 172 | 174 |
| 173 return ParentObject()->NextOnLine(); | 175 return ParentObject()->NextOnLine(); |
| 174 } | 176 } |
| 175 | 177 |
| 176 AXObject* AXInlineTextBox::PreviousOnLine() const { | 178 AXObjectImpl* AXInlineTextBox::PreviousOnLine() const { |
| 177 RefPtr<AbstractInlineTextBox> previous_on_line = | 179 RefPtr<AbstractInlineTextBox> previous_on_line = |
| 178 inline_text_box_->PreviousOnLine(); | 180 inline_text_box_->PreviousOnLine(); |
| 179 if (previous_on_line) | 181 if (previous_on_line) |
| 180 return ax_object_cache_->GetOrCreate(previous_on_line.Get()); | 182 return ax_object_cache_->GetOrCreate(previous_on_line.Get()); |
| 181 | 183 |
| 182 if (!inline_text_box_->IsFirst()) | 184 if (!inline_text_box_->IsFirst()) |
| 183 return 0; | 185 return 0; |
| 184 | 186 |
| 185 return ParentObject()->PreviousOnLine(); | 187 return ParentObject()->PreviousOnLine(); |
| 186 } | 188 } |
| 187 | 189 |
| 188 } // namespace blink | 190 } // namespace blink |
| OLD | NEW |