RenderLayerModelObject.h [plain text]
#pragma once
#include "RenderElement.h"
namespace WebCore {
class RenderLayer;
struct RepaintLayoutRects {
LayoutRect m_repaintRect; LayoutRect m_outlineBox;
RepaintLayoutRects(const RenderLayerModelObject& renderer, const RenderLayerModelObject* repaintContainer, const RenderGeometryMap* = nullptr);
RepaintLayoutRects() { };
};
class RenderLayerModelObject : public RenderElement {
WTF_MAKE_ISO_ALLOCATED(RenderLayerModelObject);
public:
virtual ~RenderLayerModelObject();
void destroyLayer();
bool hasSelfPaintingLayer() const;
RenderLayer* layer() const { return m_layer.get(); }
void styleWillChange(StyleDifference, const RenderStyle& newStyle) override;
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
virtual void updateFromStyle() { }
virtual bool requiresLayer() const = 0;
virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const { return false; }
virtual bool isScrollableOrRubberbandableBox() const { return false; }
bool shouldPlaceBlockDirectionScrollbarOnLeft() const;
void computeRepaintLayoutRects(const RenderLayerModelObject* repaintContainer, const RenderGeometryMap* = nullptr);
RepaintLayoutRects repaintLayoutRects() const;
bool hasRepaintLayoutRects() const;
void setRepaintLayoutRects(const RepaintLayoutRects&);
void clearRepaintLayoutRects();
protected:
RenderLayerModelObject(Element&, RenderStyle&&, BaseTypeFlags);
RenderLayerModelObject(Document&, RenderStyle&&, BaseTypeFlags);
void createLayer();
void willBeDestroyed() override;
private:
std::unique_ptr<RenderLayer> m_layer;
static bool s_wasFloating;
static bool s_hadLayer;
static bool s_hadTransform;
static bool s_layerWasSelfPainting;
};
}
SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderLayerModelObject, isRenderLayerModelObject())