| 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 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 | 324 |
| 325 m_selectionEditor->setVisibleSelection(s, options); | 325 m_selectionEditor->setVisibleSelection(s, options); |
| 326 setCaretRectNeedsUpdate(); | 326 setCaretRectNeedsUpdate(); |
| 327 | 327 |
| 328 if (!s.isNone() && !(options & DoNotSetFocus)) | 328 if (!s.isNone() && !(options & DoNotSetFocus)) |
| 329 setFocusedNodeIfNeeded(); | 329 setFocusedNodeIfNeeded(); |
| 330 | 330 |
| 331 if (!(options & DoNotUpdateAppearance)) { | 331 if (!(options & DoNotUpdateAppearance)) { |
| 332 // Hits in compositing/overflow/do-not-paint-outline-into-composited-scr
olling-contents.html | 332 // Hits in compositing/overflow/do-not-paint-outline-into-composited-scr
olling-contents.html |
| 333 DisableCompositingQueryAsserts disabler; | 333 DisableCompositingQueryAsserts disabler; |
| 334 updateAppearance(ResetCaretBlink); | 334 stopCaretBlinkTimer(); |
| 335 updateAppearance(); |
| 335 } | 336 } |
| 336 | 337 |
| 337 // Always clear the x position used for vertical arrow navigation. | 338 // Always clear the x position used for vertical arrow navigation. |
| 338 // It will be restored by the vertical arrow navigation code if necessary. | 339 // It will be restored by the vertical arrow navigation code if necessary. |
| 339 m_selectionEditor->resetXPosForVerticalArrowNavigation(); | 340 m_selectionEditor->resetXPosForVerticalArrowNavigation(); |
| 340 RefPtrWillBeRawPtr<LocalFrame> protector(m_frame.get()); | 341 RefPtrWillBeRawPtr<LocalFrame> protector(m_frame.get()); |
| 341 // This may dispatch a synchronous focus-related events. | 342 // This may dispatch a synchronous focus-related events. |
| 342 selectFrameElementInParentIfFullySelected(); | 343 selectFrameElementInParentIfFullySelected(); |
| 343 notifyLayoutObjectOfSelectionChange(userTriggered); | 344 notifyLayoutObjectOfSelectionChange(userTriggered); |
| 344 // If the selections are same in the DOM tree but not in the composed tree, | 345 // If the selections are same in the DOM tree but not in the composed tree, |
| (...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 bool FrameSelection::isAppearanceDirty() const | 974 bool FrameSelection::isAppearanceDirty() const |
| 974 { | 975 { |
| 975 return m_pendingSelection->hasPendingSelection(); | 976 return m_pendingSelection->hasPendingSelection(); |
| 976 } | 977 } |
| 977 | 978 |
| 978 void FrameSelection::commitAppearanceIfNeeded(LayoutView& layoutView) | 979 void FrameSelection::commitAppearanceIfNeeded(LayoutView& layoutView) |
| 979 { | 980 { |
| 980 return m_pendingSelection->commit(layoutView); | 981 return m_pendingSelection->commit(layoutView); |
| 981 } | 982 } |
| 982 | 983 |
| 983 void FrameSelection::updateAppearance(ResetCaretBlinkOption option) | 984 void FrameSelection::updateAppearance() |
| 984 { | 985 { |
| 985 // Paint a block cursor instead of a caret in overtype mode unless the caret
is at the end of a line (in this case | 986 // Paint a block cursor instead of a caret in overtype mode unless the caret
is at the end of a line (in this case |
| 986 // the FrameSelection will paint a blinking caret as usual). | 987 // the FrameSelection will paint a blinking caret as usual). |
| 987 bool paintBlockCursor = m_shouldShowBlockCursor && selection().isCaret() &&
!isLogicalEndOfLine(selection().visibleEnd()); | 988 bool paintBlockCursor = m_shouldShowBlockCursor && selection().isCaret() &&
!isLogicalEndOfLine(selection().visibleEnd()); |
| 988 | 989 |
| 989 bool shouldBlink = !paintBlockCursor && shouldBlinkCaret(); | 990 bool shouldBlink = !paintBlockCursor && shouldBlinkCaret(); |
| 990 | 991 |
| 991 // If the caret moved, stop the blink timer so we can restart with a | 992 // If the caret moved, stop the blink timer so we can restart with a |
| 992 // black caret in the new location. | 993 // black caret in the new location. |
| 993 if (option == ResetCaretBlink || !shouldBlink || shouldStopBlinkingDueToTypi
ngCommand(m_frame)) { | 994 if (!shouldBlink || shouldStopBlinkingDueToTypingCommand(m_frame)) |
| 994 m_caretBlinkTimer.stop(); | 995 stopCaretBlinkTimer(); |
| 995 | |
| 996 m_shouldPaintCaret = false; | |
| 997 setCaretRectNeedsUpdate(); | |
| 998 } | |
| 999 | 996 |
| 1000 // Start blinking with a black caret. Be sure not to restart if we're | 997 // Start blinking with a black caret. Be sure not to restart if we're |
| 1001 // already blinking in the right location. | 998 // already blinking in the right location. |
| 1002 if (shouldBlink && !m_caretBlinkTimer.isActive()) { | 999 if (shouldBlink && !m_caretBlinkTimer.isActive()) { |
| 1003 if (double blinkInterval = LayoutTheme::theme().caretBlinkInterval()) | 1000 if (double blinkInterval = LayoutTheme::theme().caretBlinkInterval()) |
| 1004 m_caretBlinkTimer.startRepeating(blinkInterval, BLINK_FROM_HERE); | 1001 m_caretBlinkTimer.startRepeating(blinkInterval, BLINK_FROM_HERE); |
| 1005 | 1002 |
| 1006 m_shouldPaintCaret = true; | 1003 m_shouldPaintCaret = true; |
| 1007 setCaretRectNeedsUpdate(); | 1004 setCaretRectNeedsUpdate(); |
| 1008 } | 1005 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1045 void FrameSelection::caretBlinkTimerFired(Timer<FrameSelection>*) | 1042 void FrameSelection::caretBlinkTimerFired(Timer<FrameSelection>*) |
| 1046 { | 1043 { |
| 1047 ASSERT(caretIsVisible()); | 1044 ASSERT(caretIsVisible()); |
| 1048 ASSERT(isCaret()); | 1045 ASSERT(isCaret()); |
| 1049 if (isCaretBlinkingSuspended() && m_shouldPaintCaret) | 1046 if (isCaretBlinkingSuspended() && m_shouldPaintCaret) |
| 1050 return; | 1047 return; |
| 1051 m_shouldPaintCaret = !m_shouldPaintCaret; | 1048 m_shouldPaintCaret = !m_shouldPaintCaret; |
| 1052 setCaretRectNeedsUpdate(); | 1049 setCaretRectNeedsUpdate(); |
| 1053 } | 1050 } |
| 1054 | 1051 |
| 1052 void FrameSelection::stopCaretBlinkTimer() |
| 1053 { |
| 1054 m_caretBlinkTimer.stop(); |
| 1055 m_shouldPaintCaret = false; |
| 1056 setCaretRectNeedsUpdate(); |
| 1057 } |
| 1058 |
| 1055 void FrameSelection::notifyLayoutObjectOfSelectionChange(EUserTriggered userTrig
gered) | 1059 void FrameSelection::notifyLayoutObjectOfSelectionChange(EUserTriggered userTrig
gered) |
| 1056 { | 1060 { |
| 1057 if (HTMLTextFormControlElement* textControl = enclosingTextFormControl(start
())) | 1061 if (HTMLTextFormControlElement* textControl = enclosingTextFormControl(start
())) |
| 1058 textControl->selectionChanged(userTriggered == UserTriggered); | 1062 textControl->selectionChanged(userTriggered == UserTriggered); |
| 1059 } | 1063 } |
| 1060 | 1064 |
| 1061 // Helper function that tells whether a particular node is an element that has a
n entire | 1065 // Helper function that tells whether a particular node is an element that has a
n entire |
| 1062 // LocalFrame and FrameView, a <frame>, <iframe>, or <object>. | 1066 // LocalFrame and FrameView, a <frame>, <iframe>, or <object>. |
| 1063 static bool isFrameElement(const Node* n) | 1067 static bool isFrameElement(const Node* n) |
| 1064 { | 1068 { |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1407 | 1411 |
| 1408 void showTree(const blink::FrameSelection* sel) | 1412 void showTree(const blink::FrameSelection* sel) |
| 1409 { | 1413 { |
| 1410 if (sel) | 1414 if (sel) |
| 1411 sel->showTreeForThis(); | 1415 sel->showTreeForThis(); |
| 1412 else | 1416 else |
| 1413 fprintf(stderr, "Cannot showTree for (nil) FrameSelection.\n"); | 1417 fprintf(stderr, "Cannot showTree for (nil) FrameSelection.\n"); |
| 1414 } | 1418 } |
| 1415 | 1419 |
| 1416 #endif | 1420 #endif |
| OLD | NEW |