Changeset 271135 in webkit


Ignore:
Timestamp:
Jan 4, 2021 10:13:53 AM (3 years ago)
Author:
Simon Fraser
Message:

[LFC Display] Hook up very basic repaint in the display tree
https://bugs.webkit.org/show_bug.cgi?id=220212

Reviewed by Zalan Bujtas.

Plumb setNeedsDisplay() from a Display::Box via the Tree to the View, and from there
just repaint the entire root layer. This is very preliminary.

  • display/DisplayTree.cpp:

(WebCore::Display::Tree::setBoxNeedsDisplay const):

  • display/DisplayTree.h:
  • display/DisplayView.cpp:

(WebCore::Display::View::prepareForDisplay):
(WebCore::Display::View::setNeedsDisplay):

  • display/DisplayView.h:
  • display/compositing/DisplayLayerController.cpp:

(WebCore::Display::LayerController::setNeedsDisplay):

  • display/compositing/DisplayLayerController.h:
  • display/css/DisplayBox.cpp:

(WebCore::Display::Box::Box):
(WebCore::Display::Box::setNeedsDisplay):

  • display/css/DisplayBox.h:
Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r271134 r271135  
     12020-12-31  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [LFC Display] Hook up very basic repaint in the display tree
     4        https://bugs.webkit.org/show_bug.cgi?id=220212
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Plumb setNeedsDisplay() from a Display::Box via the Tree to the View, and from there
     9        just repaint the entire root layer. This is very preliminary.
     10
     11        * display/DisplayTree.cpp:
     12        (WebCore::Display::Tree::setBoxNeedsDisplay const):
     13        * display/DisplayTree.h:
     14        * display/DisplayView.cpp:
     15        (WebCore::Display::View::prepareForDisplay):
     16        (WebCore::Display::View::setNeedsDisplay):
     17        * display/DisplayView.h:
     18        * display/compositing/DisplayLayerController.cpp:
     19        (WebCore::Display::LayerController::setNeedsDisplay):
     20        * display/compositing/DisplayLayerController.h:
     21        * display/css/DisplayBox.cpp:
     22        (WebCore::Display::Box::Box):
     23        (WebCore::Display::Box::setNeedsDisplay):
     24        * display/css/DisplayBox.h:
     25
    1262020-12-31  Simon Fraser  <simon.fraser@apple.com>
    227
  • trunk/Source/WebCore/display/DisplayTree.cpp

    r271133 r271135  
    5050}
    5151
     52void Tree::setBoxNeedsDisplay(Box&, Optional<AbsoluteFloatRect>) const
     53{
     54    // FIXME: For now, just repaint the world.
     55    if (m_view)
     56        m_view->setNeedsDisplay();
     57}
     58
    5259} // namespace Display
    5360} // namespace WebCore
  • trunk/Source/WebCore/display/DisplayTree.h

    r271133 r271135  
    2828#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
    2929
     30#include "FloatRect.h"
    3031#include <wtf/IsoMalloc.h>
    3132
     
    3334namespace Display {
    3435
     36class Box;
    3537class ContainerBox;
    3638class StackingItem;
    3739class View;
     40
     41using AbsoluteFloatRect = FloatRect;
    3842
    3943class Tree {
     
    5054     const ContainerBox& rootBox() const;
    5155
     56    void setBoxNeedsDisplay(Box&, Optional<AbsoluteFloatRect> subrect = WTF::nullopt) const;
     57
    5258private:
    5359    void setRootStackingItem(std::unique_ptr<StackingItem>&&);
  • trunk/Source/WebCore/display/DisplayView.cpp

    r270809 r271135  
    8080    auto treeBuilder = TreeBuilder { deviceScaleFactor() };
    8181    m_displayTree = treeBuilder.build(*layoutState);
     82    m_displayTree->setView(this);
    8283
    8384    m_layerController.prepareForDisplay(*m_displayTree);
     
    8788{
    8889    m_layerController.flushLayers();
     90}
     91
     92void View::setNeedsDisplay()
     93{
     94    m_layerController.setNeedsDisplay();
    8995}
    9096
  • trunk/Source/WebCore/display/DisplayView.h

    r270752 r271135  
    6363    Frame& frame() const;
    6464
     65    // FIXME: Temporary.
     66    void setNeedsDisplay();
     67
    6568    float deviceScaleFactor() const;
    6669
  • trunk/Source/WebCore/display/compositing/DisplayLayerController.cpp

    r270752 r271135  
    106106}
    107107
     108void LayerController::setNeedsDisplay()
     109{
     110    m_contentLayer->setNeedsDisplay();
     111}
     112
    108113void LayerController::flushLayers()
    109114{
  • trunk/Source/WebCore/display/compositing/DisplayLayerController.h

    r270752 r271135  
    5353    void setIsInWindow(bool);
    5454
     55    // FIXME: Temporary.
     56    void setNeedsDisplay();
     57
    5558    const View& view() const { return m_view; }
    5659
  • trunk/Source/WebCore/display/css/DisplayBox.cpp

    r271133 r271135  
    4444    , m_typeFlags(flags)
    4545{
    46     UNUSED_PARAM(m_tree);
    4746}
    4847
     
    5756{
    5857    return !isLineBreakBox() && style().participatesInZOrderSorting();
     58}
     59
     60void Box::setNeedsDisplay(Optional<AbsoluteFloatRect> subrect)
     61{
     62    m_tree.setBoxNeedsDisplay(*this, subrect);
    5963}
    6064
  • trunk/Source/WebCore/display/css/DisplayBox.h

    r271134 r271135  
    7777    void setNextSibling(std::unique_ptr<Box>&&);
    7878
     79    void setNeedsDisplay(Optional<AbsoluteFloatRect> subrect = WTF::nullopt);
     80
    7981    virtual String debugDescription() const;
    8082
Note: See TracChangeset for help on using the changeset viewer.