blob: 33f2bcf35eff4bc4cd62c9fe869126473ab12d1a [file] [log] [blame]
/*
Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
2004, 2005 Rob Buis <buis@kde.org>
Copyright (C) Research In Motion Limited 2010. All rights reserved.
Based on khtml code by:
Copyright (C) 2000-2003 Lars Knoll (knoll@kde.org)
(C) 2000 Antti Koivisto (koivisto@kde.org)
(C) 2000-2003 Dirk Mueller (mueller@kde.org)
(C) 2002-2003 Apple Computer, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_SVG_COMPUTED_STYLE_DEFS_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_SVG_COMPUTED_STYLE_DEFS_H_
#include "base/memory/scoped_refptr.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/css/style_color.h"
#include "third_party/blink/renderer/core/style/style_path.h"
#include "third_party/blink/renderer/platform/geometry/length.h"
#include "third_party/blink/renderer/platform/graphics/color.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/ref_counted.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
class StyleSVGResource;
typedef base::RefCountedData<WTF::Vector<Length>> SVGDashArray;
enum SVGPaintType {
SVG_PAINTTYPE_RGBCOLOR,
SVG_PAINTTYPE_NONE,
SVG_PAINTTYPE_CURRENTCOLOR,
SVG_PAINTTYPE_URI_NONE,
SVG_PAINTTYPE_URI_CURRENTCOLOR,
SVG_PAINTTYPE_URI_RGBCOLOR,
SVG_PAINTTYPE_URI
};
enum EBaselineShift { BS_LENGTH, BS_SUB, BS_SUPER };
enum ETextAnchor { TA_START, TA_MIDDLE, TA_END };
enum EColorInterpolation { CI_AUTO, CI_SRGB, CI_LINEARRGB };
enum EColorRendering { CR_AUTO, CR_OPTIMIZESPEED, CR_OPTIMIZEQUALITY };
enum EShapeRendering {
SR_AUTO,
SR_OPTIMIZESPEED,
SR_CRISPEDGES,
SR_GEOMETRICPRECISION
};
enum EAlignmentBaseline {
AB_AUTO,
AB_BASELINE,
AB_BEFORE_EDGE,
AB_TEXT_BEFORE_EDGE,
AB_MIDDLE,
AB_CENTRAL,
AB_AFTER_EDGE,
AB_TEXT_AFTER_EDGE,
AB_IDEOGRAPHIC,
AB_ALPHABETIC,
AB_HANGING,
AB_MATHEMATICAL
};
enum EDominantBaseline {
DB_AUTO,
DB_USE_SCRIPT,
DB_NO_CHANGE,
DB_RESET_SIZE,
DB_IDEOGRAPHIC,
DB_ALPHABETIC,
DB_HANGING,
DB_MATHEMATICAL,
DB_CENTRAL,
DB_MIDDLE,
DB_TEXT_AFTER_EDGE,
DB_TEXT_BEFORE_EDGE
};
enum EVectorEffect { VE_NONE, VE_NON_SCALING_STROKE };
enum EBufferedRendering { BR_AUTO, BR_DYNAMIC, BR_STATIC };
enum EMaskType { MT_LUMINANCE, MT_ALPHA };
enum EPaintOrderType {
PT_NONE = 0,
PT_FILL = 1,
PT_STROKE = 2,
PT_MARKERS = 3
};
enum EPaintOrder {
kPaintOrderNormal = 0,
kPaintOrderFillStrokeMarkers = 1,
kPaintOrderFillMarkersStroke = 2,
kPaintOrderStrokeFillMarkers = 3,
kPaintOrderStrokeMarkersFill = 4,
kPaintOrderMarkersFillStroke = 5,
kPaintOrderMarkersStrokeFill = 6
};
struct SVGPaint {
CORE_EXPORT SVGPaint();
SVGPaint(Color color);
SVGPaint(const SVGPaint& paint);
CORE_EXPORT ~SVGPaint();
CORE_EXPORT SVGPaint& operator=(const SVGPaint& paint);
CORE_EXPORT bool operator==(const SVGPaint&) const;
bool operator!=(const SVGPaint& other) const { return !(*this == other); }
bool IsNone() const { return type == SVG_PAINTTYPE_NONE; }
bool IsColor() const {
return type == SVG_PAINTTYPE_RGBCOLOR || type == SVG_PAINTTYPE_CURRENTCOLOR;
}
// Used by CSSPropertyEquality::PropertiesEqual.
bool EqualTypeOrColor(const SVGPaint& other) const {
return type == other.type &&
(type != SVG_PAINTTYPE_RGBCOLOR || color == other.color);
}
bool HasFallbackColor() const {
return type == SVG_PAINTTYPE_URI_CURRENTCOLOR ||
type == SVG_PAINTTYPE_URI_RGBCOLOR;
}
bool HasColor() const { return IsColor() || HasFallbackColor(); }
bool HasUrl() const { return type >= SVG_PAINTTYPE_URI_NONE; }
bool HasCurrentColor() const {
return type == SVG_PAINTTYPE_CURRENTCOLOR ||
type == SVG_PAINTTYPE_URI_CURRENTCOLOR;
}
StyleSVGResource* Resource() const { return resource.get(); }
const Color& GetColor() const { return color; }
const AtomicString& GetUrl() const;
scoped_refptr<StyleSVGResource> resource;
Color color;
SVGPaintType type;
};
// Inherited/Non-Inherited Style Datastructures
class StyleFillData : public RefCounted<StyleFillData> {
USING_FAST_MALLOC(StyleFillData);
public:
static scoped_refptr<StyleFillData> Create() {
return base::AdoptRef(new StyleFillData);
}
scoped_refptr<StyleFillData> Copy() const {
return base::AdoptRef(new StyleFillData(*this));
}
bool operator==(const StyleFillData&) const;
bool operator!=(const StyleFillData& other) const {
return !(*this == other);
}
float opacity;
SVGPaint paint;
SVGPaint visited_link_paint;
private:
StyleFillData();
StyleFillData(const StyleFillData&);
};
class UnzoomedLength {
DISALLOW_NEW();
public:
explicit UnzoomedLength(const Length& length) : length_(length) {}
bool IsZero() const { return length_.IsZero(); }
bool operator==(const UnzoomedLength& other) const {
return length_ == other.length_;
}
bool operator!=(const UnzoomedLength& other) const {
return !operator==(other);
}
const Length& length() const { return length_; }
private:
Length length_;
};
class CORE_EXPORT StyleStrokeData : public RefCounted<StyleStrokeData> {
USING_FAST_MALLOC(StyleStrokeData);
public:
static scoped_refptr<StyleStrokeData> Create() {
return base::AdoptRef(new StyleStrokeData);
}
scoped_refptr<StyleStrokeData> Copy() const {
return base::AdoptRef(new StyleStrokeData(*this));
}
bool operator==(const StyleStrokeData&) const;
bool operator!=(const StyleStrokeData& other) const {
return !(*this == other);
}
float opacity;
float miter_limit;
UnzoomedLength width;
Length dash_offset;
scoped_refptr<SVGDashArray> dash_array;
SVGPaint paint;
SVGPaint visited_link_paint;
private:
StyleStrokeData();
StyleStrokeData(const StyleStrokeData&);
};
class StyleStopData : public RefCounted<StyleStopData> {
USING_FAST_MALLOC(StyleStopData);
public:
static scoped_refptr<StyleStopData> Create() {
return base::AdoptRef(new StyleStopData);
}
scoped_refptr<StyleStopData> Copy() const {
return base::AdoptRef(new StyleStopData(*this));
}
bool operator==(const StyleStopData&) const;
bool operator!=(const StyleStopData& other) const {
return !(*this == other);
}
StyleColor color;
float opacity;
private:
StyleStopData();
StyleStopData(const StyleStopData&);
};
// Note: the rule for this class is, *no inheritance* of these props
class CORE_EXPORT StyleMiscData : public RefCounted<StyleMiscData> {
USING_FAST_MALLOC(StyleMiscData);
public:
static scoped_refptr<StyleMiscData> Create() {
return base::AdoptRef(new StyleMiscData);
}
scoped_refptr<StyleMiscData> Copy() const {
return base::AdoptRef(new StyleMiscData(*this));
}
bool operator==(const StyleMiscData&) const;
bool operator!=(const StyleMiscData& other) const {
return !(*this == other);
}
Length baseline_shift_value;
Color flood_color;
Color lighting_color;
float flood_opacity;
bool flood_color_is_current_color;
bool lighting_color_is_current_color;
private:
StyleMiscData();
StyleMiscData(const StyleMiscData&);
};
// Non-inherited resources
class StyleResourceData : public RefCounted<StyleResourceData> {
USING_FAST_MALLOC(StyleResourceData);
public:
static scoped_refptr<StyleResourceData> Create() {
return base::AdoptRef(new StyleResourceData);
}
~StyleResourceData();
scoped_refptr<StyleResourceData> Copy() const {
return base::AdoptRef(new StyleResourceData(*this));
}
bool operator==(const StyleResourceData&) const;
bool operator!=(const StyleResourceData& other) const {
return !(*this == other);
}
scoped_refptr<StyleSVGResource> masker;
private:
StyleResourceData();
StyleResourceData(const StyleResourceData&);
};
// Inherited resources
class StyleInheritedResourceData
: public RefCounted<StyleInheritedResourceData> {
USING_FAST_MALLOC(StyleInheritedResourceData);
public:
static scoped_refptr<StyleInheritedResourceData> Create() {
return base::AdoptRef(new StyleInheritedResourceData);
}
~StyleInheritedResourceData();
scoped_refptr<StyleInheritedResourceData> Copy() const {
return base::AdoptRef(new StyleInheritedResourceData(*this));
}
bool operator==(const StyleInheritedResourceData&) const;
bool operator!=(const StyleInheritedResourceData& other) const {
return !(*this == other);
}
scoped_refptr<StyleSVGResource> marker_start;
scoped_refptr<StyleSVGResource> marker_mid;
scoped_refptr<StyleSVGResource> marker_end;
private:
StyleInheritedResourceData();
StyleInheritedResourceData(const StyleInheritedResourceData&);
};
// Geometry properties
class StyleGeometryData : public RefCounted<StyleGeometryData> {
USING_FAST_MALLOC(StyleGeometryData);
public:
static scoped_refptr<StyleGeometryData> Create() {
return base::AdoptRef(new StyleGeometryData);
}
scoped_refptr<StyleGeometryData> Copy() const;
bool operator==(const StyleGeometryData&) const;
bool operator!=(const StyleGeometryData& other) const {
return !(*this == other);
}
scoped_refptr<StylePath> d;
Length cx;
Length cy;
Length x;
Length y;
Length r;
Length rx;
Length ry;
private:
StyleGeometryData();
StyleGeometryData(const StyleGeometryData&);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_SVG_COMPUTED_STYLE_DEFS_H_