DisplayBoxDecorationPainter.h [plain text]
#pragma once
#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
#include "FloatRoundedRect.h"
namespace WebCore {
class FillLayer;
class GraphicsContext;
enum class ShadowStyle : uint8_t;
namespace Display {
class BoxModelBox;
class FillLayerImageGeometry;
struct PaintingContext;
enum class BackgroundBleedAvoidance : uint8_t {
None,
ShrinkBackground,
UseTransparencyLayer,
BackgroundOverBorder
};
class BoxDecorationPainter {
public:
BoxDecorationPainter(const BoxModelBox&, PaintingContext&, bool includeLeftEdge = true, bool includeRightEdge = true);
void paintBackgroundAndBorders(PaintingContext&) const;
private:
friend class BorderPainter;
static BackgroundBleedAvoidance determineBackgroundBleedAvoidance(const BoxModelBox&, PaintingContext&);
void paintBorders(PaintingContext&) const;
void paintBoxShadow(PaintingContext&, ShadowStyle) const;
void paintBackground(PaintingContext&) const;
void paintBackgroundImages(PaintingContext&) const;
void paintFillLayer(PaintingContext&, const FillLayer&, const FillLayerImageGeometry&) const;
FloatRoundedRect borderRoundedRect() const { return m_borderRect; }
FloatRoundedRect innerBorderRoundedRect() const;
FloatRoundedRect backgroundRoundedRectAdjustedForBleedAvoidance(const PaintingContext&) const;
bool includeLeftEdge() const { return m_includeLeftEdge; }
bool includeRightEdge() const { return m_includeRightEdge; }
const BoxModelBox& m_box;
const FloatRoundedRect m_borderRect;
const BackgroundBleedAvoidance m_bleedAvoidance { BackgroundBleedAvoidance::None };
bool m_includeLeftEdge { true };
bool m_includeRightEdge { true };
};
} }
#endif // ENABLE(LAYOUT_FORMATTING_CONTEXT)