OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) |
3 * (C) 1997 Torben Weis (weis@kde.org) | 3 * (C) 1997 Torben Weis (weis@kde.org) |
4 * (C) 1998 Waldo Bastian (bastian@kde.org) | 4 * (C) 1998 Waldo Bastian (bastian@kde.org) |
5 * (C) 1999 Lars Knoll (knoll@kde.org) | 5 * (C) 1999 Lars Knoll (knoll@kde.org) |
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
7 * Copyright (C) 2003, 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. |
8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1015 int top = relativeY - os; | 1015 int top = relativeY - os; |
1016 // binary search to find a row | 1016 // binary search to find a row |
1017 startrow = std::lower_bound(m_rowPos.begin(), m_rowPos.end(), top) - m_r
owPos.begin(); | 1017 startrow = std::lower_bound(m_rowPos.begin(), m_rowPos.end(), top) - m_r
owPos.begin(); |
1018 | 1018 |
1019 // The binary search above gives us the first row with | 1019 // The binary search above gives us the first row with |
1020 // a y position >= the top of the paint rect. Thus, the previous | 1020 // a y position >= the top of the paint rect. Thus, the previous |
1021 // may need to be repainted as well. | 1021 // may need to be repainted as well. |
1022 if (startrow == m_rowPos.size() || (startrow > 0 && (m_rowPos[startrow]
> top))) | 1022 if (startrow == m_rowPos.size() || (startrow > 0 && (m_rowPos[startrow]
> top))) |
1023 --startrow; | 1023 --startrow; |
1024 | 1024 |
1025 int bottom = relativeY + h + os - 1; | 1025 int bottom = relativeY + h + os; |
1026 endrow = std::lower_bound(m_rowPos.begin(), m_rowPos.end(), bottom) - m_
rowPos.begin(); | 1026 endrow = std::lower_bound(m_rowPos.begin(), m_rowPos.end(), bottom) - m_
rowPos.begin(); |
1027 if ((endrow == m_rowPos.size()) || (endrow > 0 && m_rowPos[endrow - 1] =
= bottom)) | 1027 if (endrow == m_rowPos.size()) |
1028 --endrow; | 1028 --endrow; |
1029 | 1029 |
1030 if (!endrow && ty + m_rowPos[0] - table()->outerBorderTop() <= y + h + o
s) | 1030 if (!endrow && ty + m_rowPos[0] - table()->outerBorderTop() <= y + h + o
s) |
1031 ++endrow; | 1031 ++endrow; |
1032 } | 1032 } |
1033 unsigned startcol = 0; | 1033 unsigned startcol = 0; |
1034 unsigned endcol = totalCols; | 1034 unsigned endcol = totalCols; |
1035 // FIXME: Implement RTL. | 1035 // FIXME: Implement RTL. |
1036 if (!m_hasOverflowingCell && style()->direction() == LTR) { | 1036 if (!m_hasOverflowingCell && style()->direction() == LTR) { |
1037 int relativeX = x - tx; | 1037 int relativeX = x - tx; |
1038 int left = relativeX - os; | 1038 int left = relativeX - os; |
1039 Vector<int>& columnPos = table()->columnPositions(); | 1039 Vector<int>& columnPos = table()->columnPositions(); |
1040 startcol = std::lower_bound(columnPos.begin(), columnPos.end(), left) -
columnPos.begin(); | 1040 startcol = std::lower_bound(columnPos.begin(), columnPos.end(), left) -
columnPos.begin(); |
1041 if ((startcol == columnPos.size()) || (startcol > 0 && (columnPos[startc
ol] > left))) | 1041 if ((startcol == columnPos.size()) || (startcol > 0 && (columnPos[startc
ol] > left))) |
1042 --startcol; | 1042 --startcol; |
1043 | 1043 |
1044 int right = relativeX + w + os - 1; | 1044 int right = relativeX + w + os; |
1045 endcol = std::lower_bound(columnPos.begin(), columnPos.end(), right) - c
olumnPos.begin(); | 1045 endcol = std::lower_bound(columnPos.begin(), columnPos.end(), right) - c
olumnPos.begin(); |
1046 if (endcol == columnPos.size() || (endcol > 0 && (columnPos[endcol - 1]
== right))) | 1046 if (endcol == columnPos.size()) |
1047 --endcol; | 1047 --endcol; |
1048 | 1048 |
1049 if (!endcol && tx + table()->columnPositions()[0] - table()->outerBorder
Left() <= y + w + os) | 1049 if (!endcol && tx + table()->columnPositions()[0] - table()->outerBorder
Left() <= y + w + os) |
1050 ++endcol; | 1050 ++endcol; |
1051 } | 1051 } |
1052 if (startcol < endcol) { | 1052 if (startcol < endcol) { |
1053 if (!m_hasMultipleCellLevels) { | 1053 if (!m_hasMultipleCellLevels) { |
1054 // Draw the dirty cells in the order that they appear. | 1054 // Draw the dirty cells in the order that they appear. |
1055 for (unsigned r = startrow; r < endrow; r++) { | 1055 for (unsigned r = startrow; r < endrow; r++) { |
1056 for (unsigned c = startcol; c < endcol; c++) { | 1056 for (unsigned c = startcol; c < endcol; c++) { |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1235 if (static_cast<RenderObject*>(cell)->nodeAtPoint(request, result, xPos,
yPos, tx, ty, action)) { | 1235 if (static_cast<RenderObject*>(cell)->nodeAtPoint(request, result, xPos,
yPos, tx, ty, action)) { |
1236 updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty)); | 1236 updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty)); |
1237 return true; | 1237 return true; |
1238 } | 1238 } |
1239 } | 1239 } |
1240 return false; | 1240 return false; |
1241 | 1241 |
1242 } | 1242 } |
1243 | 1243 |
1244 } // namespace WebCore | 1244 } // namespace WebCore |
OLD | NEW |