AccessibilityTableCell* AccessibilityTable::cellForColumnAndRow(unsigned column, unsigned row) { updateChildrenIfNecessary(); if (column >= columnCount() || row >= rowCount()) return 0; // Iterate backwards through the rows in case the desired cell has a rowspan and exists in a previous row. for (unsigned rowIndexCounter = row + 1; rowIndexCounter > 0; --rowIndexCounter) { unsigned rowIndex = rowIndexCounter - 1; const auto& children = m_rows[rowIndex]->children(); // Since some cells may have colspans, we have to check the actual range of each // cell to determine which is the right one. for (unsigned colIndexCounter = std::min(static_cast<unsigned>(children.size()), column + 1); colIndexCounter > 0; --colIndexCounter) { unsigned colIndex = colIndexCounter - 1; AccessibilityObject* child = children[colIndex].get(); ASSERT(child->isTableCell()); if (!child->isTableCell()) continue; std::pair<unsigned, unsigned> columnRange; std::pair<unsigned, unsigned> rowRange; AccessibilityTableCell* tableCellChild = toAccessibilityTableCell(child); tableCellChild->columnIndexRange(columnRange); tableCellChild->rowIndexRange(rowRange); if ((column >= columnRange.first && column < (columnRange.first + columnRange.second)) && (row >= rowRange.first && row < (rowRange.first + rowRange.second))) return tableCellChild; } } return 0; }
static gint webkitAccessibleTableGetColumnExtentAt(AtkTable* table, gint row, gint column) { AccessibilityTableCell* axCell = cell(table, row, column); if (axCell) { pair<unsigned, unsigned> columnRange; axCell->columnIndexRange(columnRange); return columnRange.second; } return 0; }
static gint webkitAccessibleTableGetColumnAtIndex(AtkTable* table, gint index) { AccessibilityTableCell* axCell = cellAtIndex(table, index); if (axCell) { pair<unsigned, unsigned> columnRange; axCell->columnIndexRange(columnRange); return columnRange.first; } return -1; }
static gint webkit_accessible_table_get_column_extent_at(AtkTable* table, gint row, gint column) { AccessibilityTableCell* AXCell = cell(table, row, column); if (AXCell) { pair<int, int> columnRange; AXCell->columnIndexRange(columnRange); return columnRange.second; } return 0; }
static gint webkitAccessibleTableGetColumnExtentAt(AtkTable* table, gint row, gint column) { g_return_val_if_fail(ATK_TABLE(table), 0); returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(table), 0); AccessibilityTableCell* axCell = cell(table, row, column); if (axCell) { pair<unsigned, unsigned> columnRange; axCell->columnIndexRange(columnRange); return columnRange.second; } return 0; }
static gint webkitAccessibleTableGetColumnAtIndex(AtkTable* table, gint index) { g_return_val_if_fail(ATK_TABLE(table), -1); returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(table), -1); AccessibilityTableCell* axCell = cellAtIndex(table, index); if (axCell) { pair<unsigned, unsigned> columnRange; axCell->columnIndexRange(columnRange); return columnRange.first; } return -1; }
static AtkObject* webkitAccessibleTableGetColumnHeader(AtkTable* table, gint column) { AccessibilityObject* accTable = core(table); if (accTable->isAccessibilityRenderObject()) { AccessibilityObject::AccessibilityChildrenVector allColumnHeaders; static_cast<AccessibilityTable*>(accTable)->columnHeaders(allColumnHeaders); unsigned columnCount = allColumnHeaders.size(); for (unsigned k = 0; k < columnCount; ++k) { pair<unsigned, unsigned> columnRange; AccessibilityTableCell* cell = static_cast<AccessibilityTableCell*>(allColumnHeaders.at(k).get()); cell->columnIndexRange(columnRange); if (columnRange.first <= static_cast<unsigned>(column) && static_cast<unsigned>(column) < columnRange.first + columnRange.second) return allColumnHeaders[k]->wrapper(); } } return 0; }
AccessibilityTableCell* AccessibilityARIAGrid::cellForColumnAndRow(unsigned column, unsigned row) { if (!m_renderer) return 0; updateChildrenIfNecessary(); if (column >= columnCount() || row >= rowCount()) return 0; int intRow = (int)row; int intColumn = (int)column; pair<int, int> columnRange; pair<int, int> rowRange; // Iterate backwards through the rows in case the desired cell has a rowspan and exists // in a previous row. for (; intRow >= 0; --intRow) { AccessibilityObject* tableRow = m_rows[intRow].get(); if (!tableRow) continue; AccessibilityChildrenVector children = tableRow->children(); unsigned childrenLength = children.size(); // Since some cells may have colspans, we have to check the actual range of each // cell to determine which is the right one. for (unsigned k = 0; k < childrenLength; ++k) { AccessibilityObject* child = children[k].get(); if (!child->isTableCell()) continue; AccessibilityTableCell* tableCellChild = static_cast<AccessibilityTableCell*>(child); tableCellChild->columnIndexRange(columnRange); tableCellChild->rowIndexRange(rowRange); if ((intColumn >= columnRange.first && intColumn < (columnRange.first + columnRange.second)) && (intRow >= rowRange.first && intRow < (rowRange.first + rowRange.second))) return tableCellChild; } } return 0; }
static AtkObject* webkitAccessibleTableGetColumnHeader(AtkTable* table, gint column) { g_return_val_if_fail(ATK_TABLE(table), 0); returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(table), 0); AccessibilityObject* accTable = core(table); if (accTable->isAccessibilityRenderObject()) { AccessibilityObject::AccessibilityChildrenVector allColumnHeaders; toAccessibilityTable(accTable)->columnHeaders(allColumnHeaders); unsigned columnCount = allColumnHeaders.size(); for (unsigned k = 0; k < columnCount; ++k) { pair<unsigned, unsigned> columnRange; AccessibilityTableCell* cell = toAccessibilityTableCell(allColumnHeaders.at(k).get()); cell->columnIndexRange(columnRange); if (columnRange.first <= static_cast<unsigned>(column) && static_cast<unsigned>(column) < columnRange.first + columnRange.second) return allColumnHeaders[k]->wrapper(); } } return 0; }