summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/shapes/ShapeInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/shapes/ShapeInfo.h')
-rw-r--r--Source/WebCore/rendering/shapes/ShapeInfo.h217
1 files changed, 0 insertions, 217 deletions
diff --git a/Source/WebCore/rendering/shapes/ShapeInfo.h b/Source/WebCore/rendering/shapes/ShapeInfo.h
deleted file mode 100644
index f571f242e..000000000
--- a/Source/WebCore/rendering/shapes/ShapeInfo.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-* Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-*
-* 1. Redistributions of source code must retain the above
-* copyright notice, this list of conditions and the following
-* disclaimer.
-* 2. Redistributions in binary form must reproduce the above
-* copyright notice, this list of conditions and the following
-* disclaimer in the documentation and/or other materials
-* provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-* SUCH DAMAGE.
-*/
-
-#ifndef ShapeInfo_h
-#define ShapeInfo_h
-
-#if ENABLE(CSS_SHAPES)
-
-#include "FloatRect.h"
-#include "LayoutUnit.h"
-#include "RenderStyle.h"
-#include "Shape.h"
-#include "ShapeValue.h"
-#include <wtf/OwnPtr.h>
-#include <wtf/Vector.h>
-
-namespace WebCore {
-
-template<class KeyType, class InfoType>
-class MappedInfo {
-public:
- static InfoType& ensureInfo(const KeyType& key)
- {
- InfoMap& infoMap = MappedInfo<KeyType, InfoType>::infoMap();
- if (InfoType* info = infoMap.get(&key))
- return *info;
- typename InfoMap::AddResult result = infoMap.add(&key, std::make_unique<InfoType>(key));
- return *result.iterator->value;
- }
- static void removeInfo(const KeyType& key) { infoMap().remove(&key); }
- static InfoType* info(const KeyType& key) { return infoMap().get(&key); }
-
-private:
- typedef HashMap<const KeyType*, std::unique_ptr<InfoType>> InfoMap;
- static InfoMap& infoMap()
- {
- DEFINE_STATIC_LOCAL(InfoMap, staticInfoMap, ());
- return staticInfoMap;
- }
-};
-
-template<class RenderType>
-class ShapeInfo {
- WTF_MAKE_FAST_ALLOCATED;
-public:
- virtual ~ShapeInfo() { }
-
- void setShapeSize(LayoutUnit logicalWidth, LayoutUnit logicalHeight)
- {
- LayoutBox box = resolvedLayoutBox();
- switch (box) {
- case MarginBox:
- logicalHeight += m_renderer.marginLogicalHeight();
- logicalWidth += m_renderer.marginLogicalWidth();
- break;
- case BorderBox:
- break;
- case PaddingBox:
- logicalHeight -= m_renderer.borderLogicalHeight();
- logicalWidth -= m_renderer.borderLogicalWidth();
- break;
- case ContentBox:
- logicalHeight -= m_renderer.borderAndPaddingLogicalHeight();
- logicalWidth -= m_renderer.borderAndPaddingLogicalWidth();
- break;
- case BoundingBox:
- case BoxMissing:
- ASSERT_NOT_REACHED();
- break;
- }
-
- LayoutSize newLogicalSize(logicalWidth, logicalHeight);
- if (m_shapeLogicalSize == newLogicalSize)
- return;
- dirtyShapeSize();
- m_shapeLogicalSize = newLogicalSize;
- }
-
- SegmentList computeSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineHeight) const;
-
- LayoutUnit shapeLogicalTop() const { return computedShapeLogicalBoundingBox().y() + logicalTopOffset(); }
- LayoutUnit shapeLogicalBottom() const { return computedShapeLogicalBoundingBox().maxY() + logicalTopOffset(); }
- LayoutUnit shapeLogicalLeft() const { return computedShapeLogicalBoundingBox().x() + logicalLeftOffset(); }
- LayoutUnit shapeLogicalRight() const { return computedShapeLogicalBoundingBox().maxX() + logicalLeftOffset(); }
- LayoutUnit shapeLogicalWidth() const { return computedShapeLogicalBoundingBox().width(); }
- LayoutUnit shapeLogicalHeight() const { return computedShapeLogicalBoundingBox().height(); }
-
- LayoutUnit logicalLineTop() const { return m_shapeLineTop + logicalTopOffset(); }
- LayoutUnit logicalLineBottom() const { return m_shapeLineTop + m_lineHeight + logicalTopOffset(); }
- LayoutUnit logicalLineBottom(LayoutUnit lineHeight) const { return m_shapeLineTop + lineHeight + logicalTopOffset(); }
-
- LayoutUnit shapeContainingBlockLogicalHeight() const { return (m_renderer.style().boxSizing() == CONTENT_BOX) ? (m_shapeLogicalSize.height() + m_renderer.borderAndPaddingLogicalHeight()) : m_shapeLogicalSize.height(); }
-
- virtual bool lineOverlapsShapeBounds() const = 0;
-
- void dirtyShapeSize() { m_shape.clear(); }
- bool shapeSizeDirty() { return !m_shape.get(); }
- const RenderType& owner() const { return m_renderer; }
- LayoutSize shapeSize() const { return m_shapeLogicalSize; }
-
- LayoutRect computedShapePhysicalBoundingBox() const
- {
- LayoutRect physicalBoundingBox = computedShapeLogicalBoundingBox();
- physicalBoundingBox.setX(physicalBoundingBox.x() + logicalLeftOffset());
- physicalBoundingBox.setY(physicalBoundingBox.y() + logicalTopOffset());
- if (m_renderer.style().isFlippedBlocksWritingMode())
- physicalBoundingBox.setY(m_renderer.logicalHeight() - physicalBoundingBox.maxY());
- if (!m_renderer.style().isHorizontalWritingMode())
- physicalBoundingBox = physicalBoundingBox.transposedRect();
- return physicalBoundingBox;
- }
-
- FloatPoint shapeToRendererPoint(FloatPoint point) const
- {
- FloatPoint result = FloatPoint(point.x() + logicalLeftOffset(), point.y() + logicalTopOffset());
- if (m_renderer.style().isFlippedBlocksWritingMode())
- result.setY(m_renderer.logicalHeight() - result.y());
- if (!m_renderer.style().isHorizontalWritingMode())
- result = result.transposedPoint();
- return result;
- }
-
- FloatSize shapeToRendererSize(FloatSize size) const
- {
- if (!m_renderer.style().isHorizontalWritingMode())
- return size.transposedSize();
- return size;
- }
-
- const Shape& computedShape() const;
-
-protected:
- explicit ShapeInfo(const RenderType& renderer)
- : m_renderer(renderer)
- {
- }
-
- virtual LayoutBox resolvedLayoutBox() const = 0;
- virtual LayoutRect computedShapeLogicalBoundingBox() const = 0;
- virtual ShapeValue* shapeValue() const = 0;
- virtual void getIntervals(LayoutUnit, LayoutUnit, SegmentList&) const = 0;
-
- virtual WritingMode writingMode() const { return m_renderer.style().writingMode(); }
-
- LayoutUnit logicalTopOffset() const
- {
- LayoutBox box = resolvedLayoutBox();
- switch (box) {
- case MarginBox: return -m_renderer.marginBefore();
- case BorderBox: return LayoutUnit();
- case PaddingBox: return m_renderer.borderBefore();
- case ContentBox: return m_renderer.borderAndPaddingBefore();
- case BoundingBox: break;
- case BoxMissing: break;
- }
- ASSERT_NOT_REACHED();
- return LayoutUnit();
- }
-
- LayoutUnit logicalLeftOffset() const
- {
- if (m_renderer.isRenderRegion())
- return LayoutUnit();
- LayoutBox box = resolvedLayoutBox();
- switch (box) {
- case MarginBox: return -m_renderer.marginStart();
- case BorderBox: return LayoutUnit();
- case PaddingBox: return m_renderer.borderStart();
- case ContentBox: return m_renderer.borderAndPaddingStart();
- case BoundingBox: break;
- case BoxMissing: break;
- }
- ASSERT_NOT_REACHED();
- return LayoutUnit();
- }
-
- LayoutUnit m_shapeLineTop;
- LayoutUnit m_lineHeight;
-
- const RenderType& m_renderer;
-
-private:
- mutable OwnPtr<Shape> m_shape;
- LayoutSize m_shapeLogicalSize;
-};
-
-bool checkShapeImageOrigin(Document&, CachedImage&);
-
-}
-#endif
-#endif