2011-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Extract a DragCaretController from FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60273

        Extracted CaretBase and DragCaretController from FrameSelection. CaretBase is a base class for
        DragCaretController and FrameSelection and provides functions to paint caret.

        Since DragCaretController doesn't need to store selection, it only holds one VisiblePosition.

        * WebCore.exp.in:
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::CaretBase): Added.
        (WebCore::DragCaretController::DragCaretController): Added; Set m_caretVisible true.
        (WebCore::DragCaretController::isContentRichlyEditable): Added.
        (WebCore::FrameSelection::FrameSelection): Several member variables are move to CaretBase.
        (WebCore::DragCaretController::setCaretPosition): Extracted from FrameSelection::setSelection.
        (WebCore::FrameSelection::setSelection): Removed an early exit for DragCaretController.
        (WebCore::clearRenderViewSelection): Extracted from FrameSelection::respondToNodeModification.
        (WebCore::DragCaretController::nodeWillBeRemoved): Extracted from FrameSelection::nodeWillBeRemoved
        and respondToNodeModification. Note that the position DragCaretController holds is equivalent to
        FrameSelection's base or start so when removingNodeRemovesPosition returns true for m_position,
        we used to execute the first if clause and cleared render tree selection and DOM tree selection.
        This is exactly what new DragCaretController::nodeWillBeRemoved does.
        (WebCore::FrameSelection::nodeWillBeRemoved): Simplified early exist conditions.
        (WebCore::FrameSelection::respondToNodeModification): Calls clearRenderViewSelection.
        (WebCore::CaretBase::updateCaretRect): Takes document, caretPosition, selection type, and boolean isOrphaned.
        Note that we can't obtain the document from caretPosition because VisiblePosition can be null even if
        FrameSelection's start was not null.
        (WebCore::caretRendersInsideNode): Moved; Made static local.
        (WebCore::CaretBase::caretRenderer): Extracted from FrameSelection::caretRenderer.
        (WebCore::FrameSelection::caretRenderer): Calls CaretBase::caretRenderer.
        (WebCore::DragCaretController::caretRenderer): Ditto.
        (WebCore::FrameSelection::localCaretRect): Calls updateCaretRect with extra arguments.
        (WebCore::CaretBase::absoluteBoundsForLocalRect): Moved from FrameSelection; Takes Node*.
        (WebCore::CaretBase::caretRepaintRect): Ditto.
        (WebCore::FrameSelection::recomputeCaretRect): Calls absoluteBoundsForLocalRect, caretRepaintRect,
        and shouldRepaintCaret with extra arguments.
        (WebCore::CaretBase::shouldRepaintCaret): Takes a boolean isContentEditable.
        (WebCore::FrameSelection::invalidateCaretRect): Calls CaretBase::invalidateCaretRect.
        (WebCore::CaretBase::invalidateCaretRect): Extracted from FrameSelection::invalidateCaretRect.
        (WebCore::FrameSelection::paintCaret): Calls CaretBase::paintCaret.
        (WebCore::CaretBase::paintCaret): Extracted from FrameSelection::paintCaret.
        (WebCore::FrameSelection::updateAppearance): Removed an assertion that this function is never called for
        DragCaretController.
        (WebCore::DragCaretController::paintDragCaret): Moved from FrameSelection::paintDragCaret.
        * editing/FrameSelection.h:
        (WebCore::CaretBase::localCaretRectForPainting): Added.
        (WebCore::DragCaretController::isContentEditable): Added.
        (WebCore::DragCaretController::hasCaret): Added.
        (WebCore::DragCaretController::caretPosition): Added.
        (WebCore::DragCaretController::clear): Added.
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag): Uses DragCaretController.
        (WebCore::DragController::dispatchTextInputEventFor): Ditto.
        (WebCore::DragController::concludeEditDrag): Ditto.
        (WebCore::DragController::placeDragCaret): Ditto.
        * page/Page.cpp:
        (WebCore::Page::Page): Instantiates DragCaretController instead of FrameSelection.
        * page/Page.h:
        (WebCore::Page::dragCaretController): Returns DragCaretController* instead of FrameSelection*.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Uses FrameSelection and DragCaretController.


git-svn-id: svn://svn.chromium.org/blink/trunk@86039 bbb929c8-8fbe-4397-9dbb-9b2b20218538
8 files changed
tree: 7211add159c85cb7b2c12f6d560c902a15125ba4
  1. third_party/