OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
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 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 30 matching lines...) Expand all Loading... |
41 #include "core/editing/TextAffinity.h" | 41 #include "core/editing/TextAffinity.h" |
42 #include "core/editing/VisiblePosition.h" | 42 #include "core/editing/VisiblePosition.h" |
43 #include "core/editing/iterators/BackwardsCharacterIterator.h" | 43 #include "core/editing/iterators/BackwardsCharacterIterator.h" |
44 #include "core/editing/iterators/CharacterIterator.h" | 44 #include "core/editing/iterators/CharacterIterator.h" |
45 #include "core/editing/iterators/SimplifiedBackwardsTextIterator.h" | 45 #include "core/editing/iterators/SimplifiedBackwardsTextIterator.h" |
46 #include "core/editing/iterators/TextIterator.h" | 46 #include "core/editing/iterators/TextIterator.h" |
47 #include "core/html/HTMLBRElement.h" | 47 #include "core/html/HTMLBRElement.h" |
48 #include "core/layout/HitTestRequest.h" | 48 #include "core/layout/HitTestRequest.h" |
49 #include "core/layout/HitTestResult.h" | 49 #include "core/layout/HitTestResult.h" |
50 #include "core/layout/LayoutBlockFlow.h" | 50 #include "core/layout/LayoutBlockFlow.h" |
| 51 #include "core/layout/LayoutInline.h" |
51 #include "core/layout/LayoutObject.h" | 52 #include "core/layout/LayoutObject.h" |
52 #include "core/layout/LayoutView.h" | 53 #include "core/layout/LayoutView.h" |
| 54 #include "core/layout/line/InlineIterator.h" |
53 #include "core/layout/line/InlineTextBox.h" | 55 #include "core/layout/line/InlineTextBox.h" |
54 #include "core/paint/DeprecatedPaintLayer.h" | 56 #include "core/paint/DeprecatedPaintLayer.h" |
55 #include "platform/Logging.h" | 57 #include "platform/Logging.h" |
56 #include "platform/RuntimeEnabledFeatures.h" | 58 #include "platform/RuntimeEnabledFeatures.h" |
57 #include "platform/heap/Handle.h" | 59 #include "platform/heap/Handle.h" |
58 #include "platform/text/TextBoundaries.h" | 60 #include "platform/text/TextBoundaries.h" |
59 | 61 |
60 namespace blink { | 62 namespace blink { |
61 | 63 |
62 using namespace HTMLNames; | 64 using namespace HTMLNames; |
(...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 return LayoutRect(); | 1445 return LayoutRect(); |
1444 | 1446 |
1445 InlineBoxPosition boxPosition = position.position().computeInlineBoxPosition
(position.affinity()); | 1447 InlineBoxPosition boxPosition = position.position().computeInlineBoxPosition
(position.affinity()); |
1446 | 1448 |
1447 if (boxPosition.inlineBox) | 1449 if (boxPosition.inlineBox) |
1448 layoutObject = &boxPosition.inlineBox->layoutObject(); | 1450 layoutObject = &boxPosition.inlineBox->layoutObject(); |
1449 | 1451 |
1450 return layoutObject->localCaretRect(boxPosition.inlineBox, boxPosition.offse
tInBox); | 1452 return layoutObject->localCaretRect(boxPosition.inlineBox, boxPosition.offse
tInBox); |
1451 } | 1453 } |
1452 | 1454 |
| 1455 static int boundingBoxLogicalHeight(LayoutObject *o, const IntRect &rect) |
| 1456 { |
| 1457 return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width(); |
| 1458 } |
| 1459 |
| 1460 bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject* layoutObject) |
| 1461 { |
| 1462 LayoutObject* stop = layoutObject->nextInPreOrderAfterChildren(); |
| 1463 for (LayoutObject *o = layoutObject->slowFirstChild(); o && o != stop; o = o
->nextInPreOrder()) { |
| 1464 if (o->nonPseudoNode()) { |
| 1465 if ((o->isText() && boundingBoxLogicalHeight(o, toLayoutText(o)->lin
esBoundingBox())) |
| 1466 || (o->isBox() && toLayoutBox(o)->pixelSnappedLogicalHeight()) |
| 1467 || (o->isLayoutInline() && isEmptyInline(LineLayoutItem(o)) && b
oundingBoxLogicalHeight(o, toLayoutInline(o)->linesBoundingBox()))) |
| 1468 return true; |
| 1469 } |
| 1470 } |
| 1471 return false; |
| 1472 } |
| 1473 |
1453 VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L
ocalFrame* frame) | 1474 VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L
ocalFrame* frame) |
1454 { | 1475 { |
1455 HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | H
itTestRequest::Active | HitTestRequest::IgnoreClipping; | 1476 HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | H
itTestRequest::Active | HitTestRequest::IgnoreClipping; |
1456 HitTestResult result(request, contentsPoint); | 1477 HitTestResult result(request, contentsPoint); |
1457 frame->document()->layoutView()->hitTest(result); | 1478 frame->document()->layoutView()->hitTest(result); |
1458 | 1479 |
1459 if (Node* node = result.innerNode()) | 1480 if (Node* node = result.innerNode()) |
1460 return frame->selection().selection().visiblePositionRespectingEditingBo
undary(result.localPoint(), node); | 1481 return frame->selection().selection().visiblePositionRespectingEditingBo
undary(result.localPoint(), node); |
1461 return VisiblePosition(); | 1482 return VisiblePosition(); |
1462 } | 1483 } |
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1901 { | 1922 { |
1902 return mostBackwardCaretPosition<EditingStrategy>(position, rule); | 1923 return mostBackwardCaretPosition<EditingStrategy>(position, rule); |
1903 } | 1924 } |
1904 | 1925 |
1905 PositionInComposedTree mostBackwardCaretPosition(const PositionInComposedTree& p
osition, EditingBoundaryCrossingRule rule) | 1926 PositionInComposedTree mostBackwardCaretPosition(const PositionInComposedTree& p
osition, EditingBoundaryCrossingRule rule) |
1906 { | 1927 { |
1907 return mostBackwardCaretPosition<EditingInComposedTreeStrategy>(position, ru
le); | 1928 return mostBackwardCaretPosition<EditingInComposedTreeStrategy>(position, ru
le); |
1908 } | 1929 } |
1909 | 1930 |
1910 } | 1931 } |
OLD | NEW |