Changeset 237321 in webkit


Ignore:
Timestamp:
Oct 22, 2018 8:42:44 AM (6 years ago)
Author:
Alan Bujtas
Message:

[LFC][IFC] Implement Replaced helper class.
https://bugs.webkit.org/show_bug.cgi?id=190719

Reviewed by Antti Koivisto.

  • layout/layouttree/LayoutBox.cpp:

(WebCore::Layout::Box::Box):

  • layout/layouttree/LayoutBox.h:

(WebCore::Layout::Box::replaced const):

  • layout/layouttree/LayoutReplaced.cpp:

(WebCore::Layout::Replaced::Replaced):
(WebCore::Layout::Replaced::hasIntrinsicWidth const):
(WebCore::Layout::Replaced::hasIntrinsicHeight const):
(WebCore::Layout::Replaced::hasIntrinsicRatio const):
(WebCore::Layout::Replaced::intrinsicWidth const):
(WebCore::Layout::Replaced::intrinsicHeight const):
(WebCore::Layout::Replaced::intrinsicRatio const):

  • layout/layouttree/LayoutReplaced.h:

(WebCore::Layout::Replaced::hasIntrinsicWidth const): Deleted.
(WebCore::Layout::Replaced::hasIntrinsicHeight const): Deleted.
(WebCore::Layout::Replaced::hasIntrinsicRatio const): Deleted.
(WebCore::Layout::Replaced::intrinsicWidth const): Deleted.
(WebCore::Layout::Replaced::intrinsicHeight const): Deleted.
(WebCore::Layout::Replaced::intrinsicRatio const): Deleted.

  • layout/layouttree/LayoutTreeBuilder.cpp:

(WebCore::Layout::TreeBuilder::createSubTree):

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r237320 r237321  
     12018-10-22  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][IFC] Implement Replaced helper class.
     4        https://bugs.webkit.org/show_bug.cgi?id=190719
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * layout/layouttree/LayoutBox.cpp:
     9        (WebCore::Layout::Box::Box):
     10        * layout/layouttree/LayoutBox.h:
     11        (WebCore::Layout::Box::replaced const):
     12        * layout/layouttree/LayoutReplaced.cpp:
     13        (WebCore::Layout::Replaced::Replaced):
     14        (WebCore::Layout::Replaced::hasIntrinsicWidth const):
     15        (WebCore::Layout::Replaced::hasIntrinsicHeight const):
     16        (WebCore::Layout::Replaced::hasIntrinsicRatio const):
     17        (WebCore::Layout::Replaced::intrinsicWidth const):
     18        (WebCore::Layout::Replaced::intrinsicHeight const):
     19        (WebCore::Layout::Replaced::intrinsicRatio const):
     20        * layout/layouttree/LayoutReplaced.h:
     21        (WebCore::Layout::Replaced::hasIntrinsicWidth const): Deleted.
     22        (WebCore::Layout::Replaced::hasIntrinsicHeight const): Deleted.
     23        (WebCore::Layout::Replaced::hasIntrinsicRatio const): Deleted.
     24        (WebCore::Layout::Replaced::intrinsicWidth const): Deleted.
     25        (WebCore::Layout::Replaced::intrinsicHeight const): Deleted.
     26        (WebCore::Layout::Replaced::intrinsicRatio const): Deleted.
     27        * layout/layouttree/LayoutTreeBuilder.cpp:
     28        (WebCore::Layout::TreeBuilder::createSubTree):
     29
    1302018-10-22  Zalan Bujtas  <zalan@apple.com>
    231
  • trunk/Source/WebCore/layout/layouttree/LayoutBox.cpp

    r237287 r237321  
    4343    , m_baseTypeFlags(baseTypeFlags)
    4444{
     45    if (m_elementAttributes && m_elementAttributes.value().elementType == ElementType::Replaced)
     46        m_replaced = std::make_unique<Replaced>(*this);
    4547}
    4648
  • trunk/Source/WebCore/layout/layouttree/LayoutBox.h

    r237293 r237321  
    5252        TableHeaderGroup,
    5353        TableFooterGroup,
     54        Replaced,
    5455        GenericElement
    5556    };
     
    127128    const RenderStyle& style() const { return m_style; }
    128129
    129     std::optional<const Replaced> replaced() const { return m_replaced; }
     130    const Replaced* replaced() const { return m_replaced.get(); }
    130131
    131132    void setParent(Container& parent) { m_parent = &parent; }
     
    141142    Box* m_nextSibling { nullptr };
    142143
    143     std::optional<const Replaced> m_replaced;
     144    std::unique_ptr<const Replaced> m_replaced;
    144145
    145146    unsigned m_baseTypeFlags : 4;
  • trunk/Source/WebCore/layout/layouttree/LayoutReplaced.cpp

    r231895 r237321  
    3030
    3131#include "LayoutBox.h"
     32#include "RenderStyle.h"
    3233#include <wtf/IsoMallocInlines.h>
    3334
     
    3536namespace Layout {
    3637
    37 Replaced::Replaced(const LayoutBox&)
     38WTF_MAKE_ISO_ALLOCATED_IMPL(Replaced);
     39
     40Replaced::Replaced(const Box& layoutBox)
     41    : m_layoutBox(makeWeakPtr(layoutBox))
    3842{
     43}
     44
     45bool Replaced::hasIntrinsicWidth() const
     46{
     47    return m_layoutBox->style().logicalWidth().isIntrinsic();
     48}
     49
     50bool Replaced::hasIntrinsicHeight() const
     51{
     52    return m_layoutBox->style().logicalHeight().isIntrinsic();
     53}
     54
     55bool Replaced::hasIntrinsicRatio() const
     56{
     57    return m_layoutBox->style().aspectRatioType() == AspectRatioType::FromIntrinsic;
     58}
     59
     60LayoutUnit Replaced::intrinsicWidth() const
     61{
     62    ASSERT(hasIntrinsicWidth());
     63    return m_layoutBox->style().logicalWidth().value();
     64}
     65
     66LayoutUnit Replaced::intrinsicHeight() const
     67{
     68    ASSERT(hasIntrinsicHeight());
     69    return m_layoutBox->style().logicalHeight().value();
     70}
     71
     72LayoutUnit Replaced::intrinsicRatio() const
     73{
     74    ASSERT(hasIntrinsicRatio());
     75    ASSERT_NOT_IMPLEMENTED_YET();
     76    return 1;
    3977}
    4078
    4179}
    4280}
    43 
    4481#endif
  • trunk/Source/WebCore/layout/layouttree/LayoutReplaced.h

    r231895 r237321  
    3030#include "LayoutUnit.h"
    3131#include <wtf/IsoMalloc.h>
     32#include <wtf/WeakPtr.h>
    3233
    3334namespace WebCore {
     35namespace Layout {
    3436
    35 namespace Layout {
    36 class LayoutBox;
     37class Box;
    3738
    3839// HTMLAudioElement, HTMLCanvasElement. HTMLEmbedElement, HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLObjectElement, HTMLVideoElement.
     
    4041    WTF_MAKE_ISO_ALLOCATED(Replaced);
    4142public:
    42     friend class LayoutBox;
     43    Replaced(const Box&);
     44    ~Replaced() = default;
    4345
    44     bool hasIntrinsicWidth() const { return m_intrinsicWidth.has_value(); }
    45     bool hasIntrinsicHeight() const { return m_intrinsicHeight.has_value(); }
    46     bool hasIntrinsicRatio() const { return m_intrinsicRatio.has_value(); }
     46    bool hasIntrinsicWidth() const;
     47    bool hasIntrinsicHeight() const;
     48    bool hasIntrinsicRatio() const;
    4749    LayoutUnit intrinsicWidth() const;
    4850    LayoutUnit intrinsicHeight() const;
     
    5052
    5153private:
    52     Replaced(const LayoutBox&);
    53 
    54     std::optional<LayoutUnit> m_intrinsicWidth;
    55     std::optional<LayoutUnit> m_intrinsicHeight;
    56     std::optional<LayoutUnit> m_intrinsicRatio;
     54    WeakPtr<const Box> m_layoutBox;
    5755};
    58 
    59 inline LayoutUnit Replaced::intrinsicWidth() const
    60 {
    61     ASSERT(hasIntrinsicWidth());
    62     return m_intrinsicWidth.value_or(LayoutUnit::max());
    63 }
    64 
    65 inline LayoutUnit Replaced::intrinsicHeight() const
    66 {
    67     ASSERT(hasIntrinsicHeight());
    68     return m_intrinsicHeight.value_or(LayoutUnit::max());
    69 }
    70 
    71 inline LayoutUnit Replaced::intrinsicRatio() const
    72 {
    73     ASSERT(hasIntrinsicRatio());
    74     return m_intrinsicRatio.value_or(LayoutUnit::max());
    75 }
    7656
    7757}
    7858}
    79 
    8059#endif
  • trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp

    r237293 r237321  
    7878            if (element->hasTagName(HTMLNames::tfootTag))
    7979                return Box::ElementAttributes { Box::ElementType::TableFooterGroup };
     80            if (element->hasTagName(HTMLNames::imgTag))
     81                return Box::ElementAttributes { Box::ElementType::Replaced };
    8082            return Box::ElementAttributes { Box::ElementType::GenericElement };
    8183        }
Note: See TracChangeset for help on using the changeset viewer.