OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple 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 | 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 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1193 } | 1193 } |
1194 | 1194 |
1195 static bool isNonOrphanedCaret(const VisibleSelection& selection) | 1195 static bool isNonOrphanedCaret(const VisibleSelection& selection) |
1196 { | 1196 { |
1197 return selection.isCaret() && !selection.start().isOrphan() && !selection.en
d().isOrphan(); | 1197 return selection.isCaret() && !selection.start().isOrphan() && !selection.en
d().isOrphan(); |
1198 } | 1198 } |
1199 | 1199 |
1200 IntRect FrameSelection::absoluteCaretBounds() | 1200 IntRect FrameSelection::absoluteCaretBounds() |
1201 { | 1201 { |
1202 ASSERT(m_frame->document()->lifecycle().state() != DocumentLifecycle::InPain
tInvalidation); | 1202 ASSERT(m_frame->document()->lifecycle().state() != DocumentLifecycle::InPain
tInvalidation); |
1203 m_frame->document()->updateLayoutIgnorePendingStylesheets(); | 1203 m_frame->document()->updateLayout(); |
1204 if (!isNonOrphanedCaret(m_selection)) { | 1204 if (!isNonOrphanedCaret(m_selection)) { |
1205 clearCaretRect(); | 1205 clearCaretRect(); |
1206 } else { | 1206 } else { |
1207 updateCaretRect(m_frame->document(), VisiblePosition(m_selection.start()
, m_selection.affinity())); | 1207 updateCaretRect(m_frame->document(), VisiblePosition(m_selection.start()
, m_selection.affinity())); |
1208 } | 1208 } |
1209 return absoluteBoundsForLocalRect(m_selection.start().deprecatedNode(), loca
lCaretRectWithoutUpdate()); | 1209 return absoluteBoundsForLocalRect(m_selection.start().deprecatedNode(), loca
lCaretRectWithoutUpdate()); |
1210 } | 1210 } |
1211 | 1211 |
1212 static LayoutRect localCaretRect(const VisibleSelection& m_selection, const Posi
tionWithAffinity& caretPosition, RenderObject*& renderer) | 1212 static LayoutRect localCaretRect(const VisibleSelection& m_selection, const Posi
tionWithAffinity& caretPosition, RenderObject*& renderer) |
1213 { | 1213 { |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 | 1459 |
1460 VisibleSelection selection; | 1460 VisibleSelection selection; |
1461 VisiblePosition endVisiblePosition = paintBlockCursor ? modifyExtendingForwa
rd(CharacterGranularity) : m_selection.visibleEnd(); | 1461 VisiblePosition endVisiblePosition = paintBlockCursor ? modifyExtendingForwa
rd(CharacterGranularity) : m_selection.visibleEnd(); |
1462 selection = VisibleSelection(m_selection.visibleStart(), endVisiblePosition)
; | 1462 selection = VisibleSelection(m_selection.visibleStart(), endVisiblePosition)
; |
1463 | 1463 |
1464 if (!selection.isRange()) { | 1464 if (!selection.isRange()) { |
1465 view->clearSelection(); | 1465 view->clearSelection(); |
1466 return; | 1466 return; |
1467 } | 1467 } |
1468 | 1468 |
1469 m_frame->document()->updateLayoutIgnorePendingStylesheets(); | 1469 m_frame->document()->updateLayout(); |
1470 | 1470 |
1471 // Use the rightmost candidate for the start of the selection, and the leftm
ost candidate for the end of the selection. | 1471 // Use the rightmost candidate for the start of the selection, and the leftm
ost candidate for the end of the selection. |
1472 // Example: foo <a>bar</a>. Imagine that a line wrap occurs after 'foo', an
d that 'bar' is selected. If we pass [foo, 3] | 1472 // Example: foo <a>bar</a>. Imagine that a line wrap occurs after 'foo', an
d that 'bar' is selected. If we pass [foo, 3] |
1473 // as the start of the selection, the selection painting code will think tha
t content on the line containing 'foo' is selected | 1473 // as the start of the selection, the selection painting code will think tha
t content on the line containing 'foo' is selected |
1474 // and will fill the gap before 'bar'. | 1474 // and will fill the gap before 'bar'. |
1475 Position startPos = selection.start(); | 1475 Position startPos = selection.start(); |
1476 Position candidate = startPos.downstream(); | 1476 Position candidate = startPos.downstream(); |
1477 if (candidate.isCandidate()) | 1477 if (candidate.isCandidate()) |
1478 startPos = candidate; | 1478 startPos = candidate; |
1479 Position endPos = selection.end(); | 1479 Position endPos = selection.end(); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1620 if (!selectStartTarget) | 1620 if (!selectStartTarget) |
1621 return true; | 1621 return true; |
1622 | 1622 |
1623 return selectStartTarget->dispatchEvent(Event::createCancelableBubble(EventT
ypeNames::selectstart)); | 1623 return selectStartTarget->dispatchEvent(Event::createCancelableBubble(EventT
ypeNames::selectstart)); |
1624 } | 1624 } |
1625 | 1625 |
1626 void FrameSelection::setShouldShowBlockCursor(bool shouldShowBlockCursor) | 1626 void FrameSelection::setShouldShowBlockCursor(bool shouldShowBlockCursor) |
1627 { | 1627 { |
1628 m_shouldShowBlockCursor = shouldShowBlockCursor; | 1628 m_shouldShowBlockCursor = shouldShowBlockCursor; |
1629 | 1629 |
1630 m_frame->document()->updateLayoutIgnorePendingStylesheets(); | 1630 m_frame->document()->updateLayout(); |
1631 | 1631 |
1632 updateAppearance(); | 1632 updateAppearance(); |
1633 } | 1633 } |
1634 | 1634 |
1635 void FrameSelection::didChangeVisibleSelection() | 1635 void FrameSelection::didChangeVisibleSelection() |
1636 { | 1636 { |
1637 ASSERT(m_observingVisibleSelection); | 1637 ASSERT(m_observingVisibleSelection); |
1638 // Invalidate the logical range when the underlying VisibleSelection has cha
nged. | 1638 // Invalidate the logical range when the underlying VisibleSelection has cha
nged. |
1639 m_logicalRange = nullptr; | 1639 m_logicalRange = nullptr; |
1640 m_selection.clearChangeObserver(); | 1640 m_selection.clearChangeObserver(); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1716 sel.showTreeForThis(); | 1716 sel.showTreeForThis(); |
1717 } | 1717 } |
1718 | 1718 |
1719 void showTree(const blink::FrameSelection* sel) | 1719 void showTree(const blink::FrameSelection* sel) |
1720 { | 1720 { |
1721 if (sel) | 1721 if (sel) |
1722 sel->showTreeForThis(); | 1722 sel->showTreeForThis(); |
1723 } | 1723 } |
1724 | 1724 |
1725 #endif | 1725 #endif |
OLD | NEW |