OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 DragCaretController& dragCaretController = frame()->page()->dragCaretControl
ler(); | 553 DragCaretController& dragCaretController = frame()->page()->dragCaretControl
ler(); |
554 if (hasDragCaret(dragCaretController, this)) { | 554 if (hasDragCaret(dragCaretController, this)) { |
555 dragCaretController.paintDragCaret(frame(), paintInfo.context, paintOffs
et, paintInfo.rect); | 555 dragCaretController.paintDragCaret(frame(), paintInfo.context, paintOffs
et, paintInfo.rect); |
556 } | 556 } |
557 } | 557 } |
558 | 558 |
559 void RenderBlock::paintObject(PaintInfo& paintInfo, const LayoutPoint& paintOffs
et) | 559 void RenderBlock::paintObject(PaintInfo& paintInfo, const LayoutPoint& paintOffs
et) |
560 { | 560 { |
561 PaintPhase paintPhase = paintInfo.phase; | 561 PaintPhase paintPhase = paintInfo.phase; |
562 | 562 |
563 LayoutPoint scrolledOffset = paintOffset; | |
564 if (hasOverflowClip()) | |
565 scrolledOffset.move(-scrolledContentOffset()); | |
566 | |
567 if (paintPhase == PaintPhaseForeground) { | 563 if (paintPhase == PaintPhaseForeground) { |
568 if (hasBoxDecorationBackground()) | 564 if (hasBoxDecorationBackground()) |
569 paintBoxDecorationBackground(paintInfo, paintOffset); | 565 paintBoxDecorationBackground(paintInfo, paintOffset); |
570 } | 566 } |
571 | 567 |
572 if (paintPhase == PaintPhaseMask) { | 568 if (paintPhase == PaintPhaseMask) { |
573 paintMask(paintInfo, paintOffset); | 569 paintMask(paintInfo, paintOffset); |
574 return; | 570 return; |
575 } | 571 } |
576 | 572 |
577 if (paintPhase != PaintPhaseSelfOutline) | 573 if (paintPhase != PaintPhaseSelfOutline) |
578 paintContents(paintInfo, scrolledOffset); | 574 paintContents(paintInfo, paintOffset); |
579 | 575 |
580 paintSelection(paintInfo, scrolledOffset); // Fill in gaps in selection on l
ines and between blocks. | 576 paintSelection(paintInfo, paintOffset); // Fill in gaps in selection on line
s and between blocks. |
581 | 577 |
582 if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) | 578 if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) |
583 && style()->hasOutline() && !style()->outlineStyleIsAuto()) { | 579 && style()->hasOutline() && !style()->outlineStyleIsAuto()) { |
584 paintOutline(paintInfo, LayoutRect(paintOffset, size())); | 580 paintOutline(paintInfo, LayoutRect(paintOffset, size())); |
585 } | 581 } |
586 | 582 |
587 // If the caret's node's render object's containing block is this block, and
the paint action is PaintPhaseForeground, | 583 // If the caret's node's render object's containing block is this block, and
the paint action is PaintPhaseForeground, |
588 // then paint the caret. | 584 // then paint the caret. |
589 if (paintPhase == PaintPhaseForeground) | 585 if (paintPhase == PaintPhaseForeground) |
590 paintCarets(paintInfo, paintOffset); | 586 paintCarets(paintInfo, paintOffset); |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1124 bool useOverflowClip = hasOverflowClip() && !hasSelfPaintingLayer(); | 1120 bool useOverflowClip = hasOverflowClip() && !hasSelfPaintingLayer(); |
1125 bool checkChildren = !useOverflowClip; | 1121 bool checkChildren = !useOverflowClip; |
1126 if (!checkChildren) { | 1122 if (!checkChildren) { |
1127 LayoutRect clipRect = overflowClipRect(adjustedLocation); | 1123 LayoutRect clipRect = overflowClipRect(adjustedLocation); |
1128 if (style()->hasBorderRadius()) | 1124 if (style()->hasBorderRadius()) |
1129 checkChildren = locationInContainer.intersects(style()->getRoundedBo
rderFor(clipRect)); | 1125 checkChildren = locationInContainer.intersects(style()->getRoundedBo
rderFor(clipRect)); |
1130 else | 1126 else |
1131 checkChildren = locationInContainer.intersects(clipRect); | 1127 checkChildren = locationInContainer.intersects(clipRect); |
1132 } | 1128 } |
1133 if (checkChildren) { | 1129 if (checkChildren) { |
1134 // Hit test descendants first. | 1130 if (hitTestContents(request, result, locationInContainer, toLayoutPoint(
localOffset), hitTestAction)) { |
1135 LayoutSize scrolledOffset(localOffset); | |
1136 if (hasOverflowClip()) | |
1137 scrolledOffset -= scrolledContentOffset(); | |
1138 | |
1139 if (hitTestContents(request, result, locationInContainer, toLayoutPoint(
scrolledOffset), hitTestAction)) { | |
1140 updateHitTestResult(result, locationInContainer.point() - localOffse
t); | 1131 updateHitTestResult(result, locationInContainer.point() - localOffse
t); |
1141 return true; | 1132 return true; |
1142 } | 1133 } |
1143 } | 1134 } |
1144 | 1135 |
1145 // Check if the point is outside radii. | 1136 // Check if the point is outside radii. |
1146 if (style()->hasBorderRadius()) { | 1137 if (style()->hasBorderRadius()) { |
1147 LayoutRect borderRect = borderBoxRect(); | 1138 LayoutRect borderRect = borderBoxRect(); |
1148 borderRect.moveBy(adjustedLocation); | 1139 borderRect.moveBy(adjustedLocation); |
1149 RoundedRect border = style()->getRoundedBorderFor(borderRect); | 1140 RoundedRect border = style()->getRoundedBorderFor(borderRect); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM); | 1315 return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM); |
1325 if (pointLogicalLeft >= logicalWidth()) | 1316 if (pointLogicalLeft >= logicalWidth()) |
1326 return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM); | 1317 return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM); |
1327 if (pointLogicalTop < 0) | 1318 if (pointLogicalTop < 0) |
1328 return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM); | 1319 return createPositionWithAffinity(caretMinOffset(), DOWNSTREAM); |
1329 if (pointLogicalTop >= logicalHeight()) | 1320 if (pointLogicalTop >= logicalHeight()) |
1330 return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM); | 1321 return createPositionWithAffinity(caretMaxOffset(), DOWNSTREAM); |
1331 } | 1322 } |
1332 | 1323 |
1333 LayoutPoint pointInContents = point; | 1324 LayoutPoint pointInContents = point; |
1334 offsetForContents(pointInContents); | |
1335 LayoutPoint pointInLogicalContents(pointInContents); | 1325 LayoutPoint pointInLogicalContents(pointInContents); |
1336 | 1326 |
1337 if (isRenderParagraph()) | 1327 if (isRenderParagraph()) |
1338 return positionForPointWithInlineChildren(pointInLogicalContents); | 1328 return positionForPointWithInlineChildren(pointInLogicalContents); |
1339 | 1329 |
1340 RenderBox* lastCandidateBox = lastChildBox(); | 1330 RenderBox* lastCandidateBox = lastChildBox(); |
1341 while (lastCandidateBox && !isChildHitTestCandidate(lastCandidateBox)) | 1331 while (lastCandidateBox && !isChildHitTestCandidate(lastCandidateBox)) |
1342 lastCandidateBox = lastCandidateBox->previousSiblingBox(); | 1332 lastCandidateBox = lastCandidateBox->previousSiblingBox(); |
1343 | 1333 |
1344 if (lastCandidateBox) { | 1334 if (lastCandidateBox) { |
1345 if (pointInLogicalContents.y() > logicalTopForChild(lastCandidateBox) | 1335 if (pointInLogicalContents.y() > logicalTopForChild(lastCandidateBox) |
1346 || (pointInLogicalContents.y() == logicalTopForChild(lastCandidateBo
x))) | 1336 || (pointInLogicalContents.y() == logicalTopForChild(lastCandidateBo
x))) |
1347 return positionForPointRespectingEditingBoundaries(this, lastCandida
teBox, pointInContents); | 1337 return positionForPointRespectingEditingBoundaries(this, lastCandida
teBox, pointInContents); |
1348 | 1338 |
1349 for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBo
x->nextSiblingBox()) { | 1339 for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBo
x->nextSiblingBox()) { |
1350 if (!isChildHitTestCandidate(childBox)) | 1340 if (!isChildHitTestCandidate(childBox)) |
1351 continue; | 1341 continue; |
1352 LayoutUnit childLogicalBottom = logicalTopForChild(childBox) + logic
alHeightForChild(childBox); | 1342 LayoutUnit childLogicalBottom = logicalTopForChild(childBox) + logic
alHeightForChild(childBox); |
1353 // We hit child if our click is above the bottom of its padding box
(like IE6/7 and FF3). | 1343 // We hit child if our click is above the bottom of its padding box
(like IE6/7 and FF3). |
1354 if (isChildHitTestCandidate(childBox) && (pointInLogicalContents.y()
< childLogicalBottom)) | 1344 if (isChildHitTestCandidate(childBox) && (pointInLogicalContents.y()
< childLogicalBottom)) |
1355 return positionForPointRespectingEditingBoundaries(this, childBo
x, pointInContents); | 1345 return positionForPointRespectingEditingBoundaries(this, childBo
x, pointInContents); |
1356 } | 1346 } |
1357 } | 1347 } |
1358 | 1348 |
1359 // We only get here if there are no hit test candidate children below the cl
ick. | 1349 // We only get here if there are no hit test candidate children below the cl
ick. |
1360 return RenderBox::positionForPoint(point); | 1350 return RenderBox::positionForPoint(point); |
1361 } | 1351 } |
1362 | 1352 |
1363 void RenderBlock::offsetForContents(LayoutPoint& offset) const | |
1364 { | |
1365 if (hasOverflowClip()) | |
1366 offset += scrolledContentOffset(); | |
1367 } | |
1368 | |
1369 LayoutUnit RenderBlock::availableLogicalWidth() const | 1353 LayoutUnit RenderBlock::availableLogicalWidth() const |
1370 { | 1354 { |
1371 return RenderBox::availableLogicalWidth(); | 1355 return RenderBox::availableLogicalWidth(); |
1372 } | 1356 } |
1373 | 1357 |
1374 void RenderBlock::computePreferredLogicalWidths() | 1358 void RenderBlock::computePreferredLogicalWidths() |
1375 { | 1359 { |
1376 ASSERT(preferredLogicalWidthsDirty()); | 1360 ASSERT(preferredLogicalWidthsDirty()); |
1377 | 1361 |
1378 m_minPreferredLogicalWidth = 0; | 1362 m_minPreferredLogicalWidth = 0; |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1847 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
Object* obj) const | 1831 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
Object* obj) const |
1848 { | 1832 { |
1849 showRenderObject(); | 1833 showRenderObject(); |
1850 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) | 1834 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) |
1851 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); | 1835 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); |
1852 } | 1836 } |
1853 | 1837 |
1854 #endif | 1838 #endif |
1855 | 1839 |
1856 } // namespace blink | 1840 } // namespace blink |
OLD | NEW |