| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 : m_renderer(0) | 67 : m_renderer(0) |
| 68 , m_inlineBox(0) | 68 , m_inlineBox(0) |
| 69 , m_offset(0) | 69 , m_offset(0) |
| 70 , m_prevLeafChild(uncachedInlineBox()) | 70 , m_prevLeafChild(uncachedInlineBox()) |
| 71 , m_nextLeafChild(uncachedInlineBox()) | 71 , m_nextLeafChild(uncachedInlineBox()) |
| 72 { | 72 { |
| 73 if (position.isNull()) | 73 if (position.isNull()) |
| 74 return; | 74 return; |
| 75 position.getInlineBoxAndOffset(m_inlineBox, m_offset); | 75 position.getInlineBoxAndOffset(m_inlineBox, m_offset); |
| 76 if (m_inlineBox) | 76 if (m_inlineBox) |
| 77 m_renderer = m_inlineBox->renderer(); | 77 m_renderer = &m_inlineBox->renderer(); |
| 78 else | 78 else |
| 79 m_renderer = rendererFromPosition(position.deepEquivalent()); | 79 m_renderer = rendererFromPosition(position.deepEquivalent()); |
| 80 } | 80 } |
| 81 | 81 |
| 82 RenderedPosition::RenderedPosition(const Position& position, EAffinity affinity) | 82 RenderedPosition::RenderedPosition(const Position& position, EAffinity affinity) |
| 83 : m_renderer(0) | 83 : m_renderer(0) |
| 84 , m_inlineBox(0) | 84 , m_inlineBox(0) |
| 85 , m_offset(0) | 85 , m_offset(0) |
| 86 , m_prevLeafChild(uncachedInlineBox()) | 86 , m_prevLeafChild(uncachedInlineBox()) |
| 87 , m_nextLeafChild(uncachedInlineBox()) | 87 , m_nextLeafChild(uncachedInlineBox()) |
| 88 { | 88 { |
| 89 if (position.isNull()) | 89 if (position.isNull()) |
| 90 return; | 90 return; |
| 91 position.getInlineBoxAndOffset(affinity, m_inlineBox, m_offset); | 91 position.getInlineBoxAndOffset(affinity, m_inlineBox, m_offset); |
| 92 if (m_inlineBox) | 92 if (m_inlineBox) |
| 93 m_renderer = m_inlineBox->renderer(); | 93 m_renderer = &m_inlineBox->renderer(); |
| 94 else | 94 else |
| 95 m_renderer = rendererFromPosition(position); | 95 m_renderer = rendererFromPosition(position); |
| 96 } | 96 } |
| 97 | 97 |
| 98 InlineBox* RenderedPosition::prevLeafChild() const | 98 InlineBox* RenderedPosition::prevLeafChild() const |
| 99 { | 99 { |
| 100 if (m_prevLeafChild == uncachedInlineBox()) | 100 if (m_prevLeafChild == uncachedInlineBox()) |
| 101 m_prevLeafChild = m_inlineBox->prevLeafChildIgnoringLineBreak(); | 101 m_prevLeafChild = m_inlineBox->prevLeafChildIgnoringLineBreak(); |
| 102 return m_prevLeafChild; | 102 return m_prevLeafChild; |
| 103 } | 103 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 130 | 130 |
| 131 RenderedPosition RenderedPosition::leftBoundaryOfBidiRun(unsigned char bidiLevel
OfRun) | 131 RenderedPosition RenderedPosition::leftBoundaryOfBidiRun(unsigned char bidiLevel
OfRun) |
| 132 { | 132 { |
| 133 if (!m_inlineBox || bidiLevelOfRun > m_inlineBox->bidiLevel()) | 133 if (!m_inlineBox || bidiLevelOfRun > m_inlineBox->bidiLevel()) |
| 134 return RenderedPosition(); | 134 return RenderedPosition(); |
| 135 | 135 |
| 136 InlineBox* box = m_inlineBox; | 136 InlineBox* box = m_inlineBox; |
| 137 do { | 137 do { |
| 138 InlineBox* prev = box->prevLeafChildIgnoringLineBreak(); | 138 InlineBox* prev = box->prevLeafChildIgnoringLineBreak(); |
| 139 if (!prev || prev->bidiLevel() < bidiLevelOfRun) | 139 if (!prev || prev->bidiLevel() < bidiLevelOfRun) |
| 140 return RenderedPosition(box->renderer(), box, box->caretLeftmostOffs
et()); | 140 return RenderedPosition(&box->renderer(), box, box->caretLeftmostOff
set()); |
| 141 box = prev; | 141 box = prev; |
| 142 } while (box); | 142 } while (box); |
| 143 | 143 |
| 144 ASSERT_NOT_REACHED(); | 144 ASSERT_NOT_REACHED(); |
| 145 return RenderedPosition(); | 145 return RenderedPosition(); |
| 146 } | 146 } |
| 147 | 147 |
| 148 RenderedPosition RenderedPosition::rightBoundaryOfBidiRun(unsigned char bidiLeve
lOfRun) | 148 RenderedPosition RenderedPosition::rightBoundaryOfBidiRun(unsigned char bidiLeve
lOfRun) |
| 149 { | 149 { |
| 150 if (!m_inlineBox || bidiLevelOfRun > m_inlineBox->bidiLevel()) | 150 if (!m_inlineBox || bidiLevelOfRun > m_inlineBox->bidiLevel()) |
| 151 return RenderedPosition(); | 151 return RenderedPosition(); |
| 152 | 152 |
| 153 InlineBox* box = m_inlineBox; | 153 InlineBox* box = m_inlineBox; |
| 154 do { | 154 do { |
| 155 InlineBox* next = box->nextLeafChildIgnoringLineBreak(); | 155 InlineBox* next = box->nextLeafChildIgnoringLineBreak(); |
| 156 if (!next || next->bidiLevel() < bidiLevelOfRun) | 156 if (!next || next->bidiLevel() < bidiLevelOfRun) |
| 157 return RenderedPosition(box->renderer(), box, box->caretRightmostOff
set()); | 157 return RenderedPosition(&box->renderer(), box, box->caretRightmostOf
fset()); |
| 158 box = next; | 158 box = next; |
| 159 } while (box); | 159 } while (box); |
| 160 | 160 |
| 161 ASSERT_NOT_REACHED(); | 161 ASSERT_NOT_REACHED(); |
| 162 return RenderedPosition(); | 162 return RenderedPosition(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 bool RenderedPosition::atLeftBoundaryOfBidiRun(ShouldMatchBidiLevel shouldMatchB
idiLevel, unsigned char bidiLevelOfRun) const | 165 bool RenderedPosition::atLeftBoundaryOfBidiRun(ShouldMatchBidiLevel shouldMatchB
idiLevel, unsigned char bidiLevelOfRun) const |
| 166 { | 166 { |
| 167 if (!m_inlineBox) | 167 if (!m_inlineBox) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 return false; | 202 return false; |
| 203 } | 203 } |
| 204 | 204 |
| 205 Position RenderedPosition::positionAtLeftBoundaryOfBiDiRun() const | 205 Position RenderedPosition::positionAtLeftBoundaryOfBiDiRun() const |
| 206 { | 206 { |
| 207 ASSERT(atLeftBoundaryOfBidiRun()); | 207 ASSERT(atLeftBoundaryOfBidiRun()); |
| 208 | 208 |
| 209 if (atLeftmostOffsetInBox()) | 209 if (atLeftmostOffsetInBox()) |
| 210 return createLegacyEditingPosition(m_renderer->node(), m_offset); | 210 return createLegacyEditingPosition(m_renderer->node(), m_offset); |
| 211 | 211 |
| 212 return createLegacyEditingPosition(nextLeafChild()->renderer()->node(), next
LeafChild()->caretLeftmostOffset()); | 212 return createLegacyEditingPosition(nextLeafChild()->renderer().node(), nextL
eafChild()->caretLeftmostOffset()); |
| 213 } | 213 } |
| 214 | 214 |
| 215 Position RenderedPosition::positionAtRightBoundaryOfBiDiRun() const | 215 Position RenderedPosition::positionAtRightBoundaryOfBiDiRun() const |
| 216 { | 216 { |
| 217 ASSERT(atRightBoundaryOfBidiRun()); | 217 ASSERT(atRightBoundaryOfBidiRun()); |
| 218 | 218 |
| 219 if (atRightmostOffsetInBox()) | 219 if (atRightmostOffsetInBox()) |
| 220 return createLegacyEditingPosition(m_renderer->node(), m_offset); | 220 return createLegacyEditingPosition(m_renderer->node(), m_offset); |
| 221 | 221 |
| 222 return createLegacyEditingPosition(prevLeafChild()->renderer()->node(), prev
LeafChild()->caretRightmostOffset()); | 222 return createLegacyEditingPosition(prevLeafChild()->renderer().node(), prevL
eafChild()->caretRightmostOffset()); |
| 223 } | 223 } |
| 224 | 224 |
| 225 IntRect RenderedPosition::absoluteRect(LayoutUnit* extraWidthToEndOfLine) const | 225 IntRect RenderedPosition::absoluteRect(LayoutUnit* extraWidthToEndOfLine) const |
| 226 { | 226 { |
| 227 if (isNull()) | 227 if (isNull()) |
| 228 return IntRect(); | 228 return IntRect(); |
| 229 | 229 |
| 230 IntRect localRect = pixelSnappedIntRect(m_renderer->localCaretRect(m_inlineB
ox, m_offset, extraWidthToEndOfLine)); | 230 IntRect localRect = pixelSnappedIntRect(m_renderer->localCaretRect(m_inlineB
ox, m_offset, extraWidthToEndOfLine)); |
| 231 return localRect == IntRect() ? IntRect() : m_renderer->localToAbsoluteQuad(
FloatRect(localRect)).enclosingBoundingBox(); | 231 return localRect == IntRect() ? IntRect() : m_renderer->localToAbsoluteQuad(
FloatRect(localRect)).enclosingBoundingBox(); |
| 232 } | 232 } |
| 233 | 233 |
| 234 bool renderObjectContainsPosition(RenderObject* target, const Position& position
) | 234 bool renderObjectContainsPosition(RenderObject* target, const Position& position
) |
| 235 { | 235 { |
| 236 for (RenderObject* renderer = rendererFromPosition(position); renderer && re
nderer->node(); renderer = renderer->parent()) { | 236 for (RenderObject* renderer = rendererFromPosition(position); renderer && re
nderer->node(); renderer = renderer->parent()) { |
| 237 if (renderer == target) | 237 if (renderer == target) |
| 238 return true; | 238 return true; |
| 239 } | 239 } |
| 240 return false; | 240 return false; |
| 241 } | 241 } |
| 242 | 242 |
| 243 }; | 243 }; |
| OLD | NEW |