OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple 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 13 matching lines...) Expand all Loading... |
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 */ | 27 */ |
28 | 28 |
29 #include "config.h" | 29 #include "config.h" |
30 #include "modules/accessibility/AXTableCell.h" | 30 #include "modules/accessibility/AXTableCell.h" |
31 | 31 |
32 #include "core/layout/LayoutTableCell.h" | 32 #include "core/layout/LayoutTableCell.h" |
33 #include "modules/accessibility/AXObjectCacheImpl.h" | 33 #include "modules/accessibility/AXObjectCacheImpl.h" |
34 | 34 #include "modules/accessibility/AXTable.h" |
35 | 35 |
36 namespace blink { | 36 namespace blink { |
37 | 37 |
38 using namespace HTMLNames; | 38 using namespace HTMLNames; |
39 | 39 |
40 AXTableCell::AXTableCell(RenderObject* renderer, AXObjectCacheImpl* axObjectCach
e) | 40 AXTableCell::AXTableCell(RenderObject* renderer, AXObjectCacheImpl* axObjectCach
e) |
41 : AXRenderObject(renderer, axObjectCache) | 41 : AXRenderObject(renderer, axObjectCache) |
42 { | 42 { |
43 } | 43 } |
44 | 44 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 } | 153 } |
154 | 154 |
155 AccessibilityRole AXTableCell::determineAccessibilityRole() | 155 AccessibilityRole AXTableCell::determineAccessibilityRole() |
156 { | 156 { |
157 if (!isTableCell()) | 157 if (!isTableCell()) |
158 return AXRenderObject::determineAccessibilityRole(); | 158 return AXRenderObject::determineAccessibilityRole(); |
159 | 159 |
160 return scanToDecideHeaderRole(); | 160 return scanToDecideHeaderRole(); |
161 } | 161 } |
162 | 162 |
| 163 void AXTableCell::rowHeadersForCell(AccessibilityChildrenVector& headers) |
| 164 { |
| 165 AXObject* parent = parentTable(); |
| 166 if (!parent || !parent->isAXTable()) |
| 167 return; |
| 168 |
| 169 AXTable* parentTable = toAXTable(parent); |
| 170 |
| 171 pair<unsigned, unsigned> rowRange; |
| 172 rowIndexRange(rowRange); |
| 173 |
| 174 pair<unsigned, unsigned> columnRange; |
| 175 columnIndexRange(columnRange); |
| 176 |
| 177 for (unsigned i = 0; i < columnRange.first; i++) { |
| 178 AXTableCell* cell = parentTable->cellForColumnAndRow(i, rowRange.first); |
| 179 if (!cell || !cell->isTableCell() || cell == this) |
| 180 continue; |
| 181 if (cell->scanToDecideHeaderRole() == RowHeaderRole) |
| 182 headers.append(cell); |
| 183 } |
| 184 } |
| 185 |
| 186 void AXTableCell::columnHeadersForCell(AccessibilityChildrenVector& headers) |
| 187 { |
| 188 AXObject* parent = parentTable(); |
| 189 if (!parent || !parent->isAXTable()) |
| 190 return; |
| 191 |
| 192 AXTable* parentTable = toAXTable(parent); |
| 193 |
| 194 pair<unsigned, unsigned> rowRange; |
| 195 rowIndexRange(rowRange); |
| 196 |
| 197 pair<unsigned, unsigned> columnRange; |
| 198 columnIndexRange(columnRange); |
| 199 |
| 200 for (unsigned i = 0; i < rowRange.first; i++) { |
| 201 AXTableCell* cell = parentTable->cellForColumnAndRow(columnRange.first,
i); |
| 202 if (!cell || !cell->isTableCell() || headers.contains(cell) || cell == t
his) |
| 203 continue; |
| 204 if (cell->scanToDecideHeaderRole() == ColumnHeaderRole) |
| 205 headers.append(cell); |
| 206 } |
| 207 } |
| 208 |
163 void AXTableCell::rowIndexRange(pair<unsigned, unsigned>& rowRange) | 209 void AXTableCell::rowIndexRange(pair<unsigned, unsigned>& rowRange) |
164 { | 210 { |
165 if (!m_renderer || !m_renderer->isTableCell()) | 211 if (!m_renderer || !m_renderer->isTableCell()) |
166 return; | 212 return; |
167 | 213 |
168 LayoutTableCell* layoutCell = toLayoutTableCell(m_renderer); | 214 LayoutTableCell* layoutCell = toLayoutTableCell(m_renderer); |
169 rowRange.first = layoutCell->rowIndex(); | 215 rowRange.first = layoutCell->rowIndex(); |
170 rowRange.second = layoutCell->rowSpan(); | 216 rowRange.second = layoutCell->rowSpan(); |
171 | 217 |
172 // since our table might have multiple sections, we have to offset our row a
ppropriately | 218 // since our table might have multiple sections, we have to offset our row a
ppropriately |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 return 0; | 294 return 0; |
249 | 295 |
250 Node* cellElement = headerCell->node(); | 296 Node* cellElement = headerCell->node(); |
251 if (!cellElement || !cellElement->hasTagName(thTag)) | 297 if (!cellElement || !cellElement->hasTagName(thTag)) |
252 return 0; | 298 return 0; |
253 | 299 |
254 return axObjectCache()->getOrCreate(headerCell); | 300 return axObjectCache()->getOrCreate(headerCell); |
255 } | 301 } |
256 | 302 |
257 } // namespace blink | 303 } // namespace blink |
OLD | NEW |