Title: [176387] trunk/Source/WebCore
Revision
176387
Author
[email protected]
Date
2014-11-20 00:36:11 -0800 (Thu, 20 Nov 2014)

Log Message

Caret renderer is always a RenderBlock.
<https://webkit.org/b/138912>

Reviewed by Chris Dumez.

Tighten typing in the code that finds and deals with the renderer
used to paint the caret (it's always a RenderBlock.)

* editing/FrameSelection.cpp:
(WebCore::CaretBase::updateCaretRect):
(WebCore::FrameSelection::caretRendererWithoutUpdatingLayout):
(WebCore::DragCaretController::caretRenderer):
(WebCore::repaintCaretForLocalRect):
(WebCore::CaretBase::paintCaret):
* editing/FrameSelection.h:
* editing/VisiblePosition.cpp:
(WebCore::VisiblePosition::absoluteCaretBounds):
* editing/htmlediting.cpp:
(WebCore::rendererForCaretPainting):
(WebCore::localCaretRectInRendererForCaretPainting):
(WebCore::absoluteBoundsForLocalCaretRect):
* editing/htmlediting.h:
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::paintCaret):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (176386 => 176387)


--- trunk/Source/WebCore/ChangeLog	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/ChangeLog	2014-11-20 08:36:11 UTC (rev 176387)
@@ -1,3 +1,30 @@
+2014-11-20  Andreas Kling  <[email protected]>
+
+        Caret renderer is always a RenderBlock.
+        <https://webkit.org/b/138912>
+
+        Reviewed by Chris Dumez.
+
+        Tighten typing in the code that finds and deals with the renderer
+        used to paint the caret (it's always a RenderBlock.)
+
+        * editing/FrameSelection.cpp:
+        (WebCore::CaretBase::updateCaretRect):
+        (WebCore::FrameSelection::caretRendererWithoutUpdatingLayout):
+        (WebCore::DragCaretController::caretRenderer):
+        (WebCore::repaintCaretForLocalRect):
+        (WebCore::CaretBase::paintCaret):
+        * editing/FrameSelection.h:
+        * editing/VisiblePosition.cpp:
+        (WebCore::VisiblePosition::absoluteCaretBounds):
+        * editing/htmlediting.cpp:
+        (WebCore::rendererForCaretPainting):
+        (WebCore::localCaretRectInRendererForCaretPainting):
+        (WebCore::absoluteBoundsForLocalCaretRect):
+        * editing/htmlediting.h:
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::paintCaret):
+
 2014-11-20  Antti Koivisto  <[email protected]>
 
         REGRESSION (r172854): Web Viewer in FileMaker does not render a Base64 encoded animated-GIF

Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (176386 => 176387)


--- trunk/Source/WebCore/editing/FrameSelection.cpp	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp	2014-11-20 08:36:11 UTC (rev 176387)
@@ -1327,17 +1327,17 @@
 {
     document->updateLayoutIgnorePendingStylesheets();
     m_caretRectNeedsUpdate = false;
-    RenderObject* renderer;
+    RenderBlock* renderer;
     m_caretLocalRect = localCaretRectInRendererForCaretPainting(caretPosition, renderer);
     return !m_caretLocalRect.isEmpty();
 }
 
-RenderObject* FrameSelection::caretRendererWithoutUpdatingLayout() const
+RenderBlock* FrameSelection::caretRendererWithoutUpdatingLayout() const
 {
     return rendererForCaretPainting(m_selection.start().deprecatedNode());
 }
 
-RenderObject* DragCaretController::caretRenderer() const
+RenderBlock* DragCaretController::caretRenderer() const
 {
     return rendererForCaretPainting(m_position.deepEquivalent().deprecatedNode());
 }
@@ -1358,11 +1358,8 @@
 
 static void repaintCaretForLocalRect(Node* node, const LayoutRect& rect)
 {
-    RenderObject* caretPainter = rendererForCaretPainting(node);
-    if (!caretPainter)
-        return;
-
-    caretPainter->repaintRectangle(rect);
+    if (auto* caretPainter = rendererForCaretPainting(node))
+        caretPainter->repaintRectangle(rect);
 }
 
 bool FrameSelection::recomputeCaretRect()
@@ -1481,9 +1478,8 @@
         return;
 
     LayoutRect drawingRect = localCaretRectWithoutUpdate();
-    RenderObject* renderer = rendererForCaretPainting(node);
-    if (is<RenderBox>(renderer))
-        downcast<RenderBox>(*renderer).flipForWritingMode(drawingRect);
+    if (auto* renderer = rendererForCaretPainting(node))
+        renderer->flipForWritingMode(drawingRect);
     drawingRect.moveBy(roundedIntPoint(paintOffset));
     LayoutRect caret = intersection(drawingRect, clipRect);
     if (caret.isEmpty())

Modified: trunk/Source/WebCore/editing/FrameSelection.h (176386 => 176387)


--- trunk/Source/WebCore/editing/FrameSelection.h	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/editing/FrameSelection.h	2014-11-20 08:36:11 UTC (rev 176387)
@@ -46,6 +46,7 @@
 class GraphicsContext;
 class HTMLFormElement;
 class MutableStyleProperties;
+class RenderBlock;
 class RenderObject;
 class RenderView;
 class Settings;
@@ -92,7 +93,7 @@
 public:
     DragCaretController();
 
-    RenderObject* caretRenderer() const;
+    RenderBlock* caretRenderer() const;
     void paintDragCaret(Frame*, GraphicsContext*, const LayoutPoint&, const LayoutRect& clipRect) const;
 
     bool isContentEditable() const { return m_position.rootEditableElement(); }
@@ -169,7 +170,7 @@
     void setExtent(const Position&, EAffinity, EUserTriggered = NotUserTriggered);
 
     // Return the renderer that is responsible for painting the caret (in the selection start node)
-    RenderObject* caretRendererWithoutUpdatingLayout() const;
+    RenderBlock* caretRendererWithoutUpdatingLayout() const;
 
     // Bounds of (possibly transformed) caret in absolute coords
     WEBCORE_EXPORT IntRect absoluteCaretBounds();

Modified: trunk/Source/WebCore/editing/VisiblePosition.cpp (176386 => 176387)


--- trunk/Source/WebCore/editing/VisiblePosition.cpp	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/editing/VisiblePosition.cpp	2014-11-20 08:36:11 UTC (rev 176387)
@@ -618,7 +618,7 @@
 
 IntRect VisiblePosition::absoluteCaretBounds() const
 {
-    RenderObject* renderer = nullptr;
+    RenderBlock* renderer = nullptr;
     LayoutRect localRect = localCaretRectInRendererForCaretPainting(*this, renderer);
     return absoluteBoundsForLocalCaretRect(renderer, localRect);
 }

Modified: trunk/Source/WebCore/editing/htmlediting.cpp (176386 => 176387)


--- trunk/Source/WebCore/editing/htmlediting.cpp	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/editing/htmlediting.cpp	2014-11-20 08:36:11 UTC (rev 176387)
@@ -1263,7 +1263,7 @@
     return node && !isRenderedTable(node) && !editingIgnoresContent(node);
 }
 
-RenderObject* rendererForCaretPainting(Node* node)
+RenderBlock* rendererForCaretPainting(Node* node)
 {
     if (!node)
         return nullptr;
@@ -1273,11 +1273,11 @@
         return nullptr;
 
     // If caretNode is a block and caret is inside it, then caret should be painted by that block.
-    bool paintedByBlock = renderer->isRenderBlockFlow() && caretRendersInsideNode(node);
-    return paintedByBlock ? renderer : renderer->containingBlock();
+    bool paintedByBlock = is<RenderBlockFlow>(*renderer) && caretRendersInsideNode(node);
+    return paintedByBlock ? downcast<RenderBlock>(renderer) : renderer->containingBlock();
 }
 
-LayoutRect localCaretRectInRendererForCaretPainting(const VisiblePosition& caretPosition, RenderObject*& caretPainter)
+LayoutRect localCaretRectInRendererForCaretPainting(const VisiblePosition& caretPosition, RenderBlock*& caretPainter)
 {
     if (caretPosition.isNull())
         return LayoutRect();
@@ -1304,14 +1304,13 @@
     return localRect;
 }
 
-IntRect absoluteBoundsForLocalCaretRect(RenderObject* rendererForCaretPainting, const LayoutRect& rect)
+IntRect absoluteBoundsForLocalCaretRect(RenderBlock* rendererForCaretPainting, const LayoutRect& rect)
 {
     if (!rendererForCaretPainting || rect.isEmpty())
         return IntRect();
 
     LayoutRect localRect(rect);
-    if (is<RenderBox>(*rendererForCaretPainting))
-        downcast<RenderBox>(*rendererForCaretPainting).flipForWritingMode(localRect);
+    rendererForCaretPainting->flipForWritingMode(localRect);
     return rendererForCaretPainting->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoundingBox();
 }
 

Modified: trunk/Source/WebCore/editing/htmlediting.h (176386 => 176387)


--- trunk/Source/WebCore/editing/htmlediting.h	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/editing/htmlediting.h	2014-11-20 08:36:11 UTC (rev 176387)
@@ -41,6 +41,7 @@
 class Node;
 class Position;
 class Range;
+class RenderBlock;
 class VisiblePosition;
 class VisibleSelection;
 
@@ -259,9 +260,9 @@
 
 // Miscellaaneous functions that for caret rendering
 
-RenderObject* rendererForCaretPainting(Node*);
-LayoutRect localCaretRectInRendererForCaretPainting(const VisiblePosition&, RenderObject*&);
-IntRect absoluteBoundsForLocalCaretRect(RenderObject* rendererForCaretPainting, const LayoutRect&);
+RenderBlock* rendererForCaretPainting(Node*);
+LayoutRect localCaretRectInRendererForCaretPainting(const VisiblePosition&, RenderBlock*&);
+IntRect absoluteBoundsForLocalCaretRect(RenderBlock* rendererForCaretPainting, const LayoutRect&);
 
 }
 

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (176386 => 176387)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2014-11-20 08:33:07 UTC (rev 176386)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2014-11-20 08:36:11 UTC (rev 176387)
@@ -1524,7 +1524,7 @@
 {
     // Paint the caret if the FrameSelection says so or if caret browsing is enabled
     bool caretBrowsing = frame().settings().caretBrowsingEnabled();
-    RenderObject* caretPainter;
+    RenderBlock* caretPainter;
     bool isContentEditable;
     if (type == CursorCaret) {
         caretPainter = frame().selection().caretRendererWithoutUpdatingLayout();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to