blob: b8f13cb90bd8f31e04136acc8dd61fd062cb0795 [file] [log] [blame]
Florin Malitab3418102020-10-15 18:10:29 -04001/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkSVGAttribute_DEFINED
9#define SkSVGAttribute_DEFINED
10
11#include "modules/svg/include/SkSVGTypes.h"
12#include "src/core/SkTLazy.h"
13
14class SkSVGRenderContext;
15
16enum class SkSVGAttribute {
Florin Malitab3418102020-10-15 18:10:29 -040017 kClipRule,
18 kColor,
Florin Malita73d57bf2021-01-15 08:58:09 -050019 kColorInterpolation,
Tyler Denniston7bb85db2021-01-13 12:08:04 -050020 kColorInterpolationFilters,
Florin Malitab3418102020-10-15 18:10:29 -040021 kCx, // <circle>, <ellipse>, <radialGradient>: center x position
22 kCy, // <circle>, <ellipse>, <radialGradient>: center y position
23 kD,
24 kFill,
25 kFillOpacity,
26 kFillRule,
Tyler Dennistonb3cafbc2020-10-30 15:00:48 -040027 kFilter,
Tyler Dennistondf208a32020-10-30 16:01:54 -040028 kFilterUnits,
Florin Malitab3418102020-10-15 18:10:29 -040029 kFontFamily,
30 kFontSize,
31 kFontStyle,
32 kFontWeight,
33 kFx, // <radialGradient>: focal point x position
34 kFy, // <radialGradient>: focal point y position
Tyler Dennistonab76ab42020-10-21 15:08:45 -040035 kGradientUnits,
Florin Malitab3418102020-10-15 18:10:29 -040036 kGradientTransform,
37 kHeight,
38 kHref,
39 kOffset,
40 kOpacity,
41 kPatternTransform,
42 kPoints,
Florin Malita385e7442020-10-21 16:55:46 -040043 kPreserveAspectRatio,
Florin Malitab3418102020-10-15 18:10:29 -040044 kR, // <circle>, <radialGradient>: radius
45 kRx, // <ellipse>,<rect>: horizontal (corner) radius
46 kRy, // <ellipse>,<rect>: vertical (corner) radius
47 kSpreadMethod,
Florin Malitab3418102020-10-15 18:10:29 -040048 kStroke,
49 kStrokeDashArray,
50 kStrokeDashOffset,
51 kStrokeOpacity,
52 kStrokeLineCap,
53 kStrokeLineJoin,
54 kStrokeMiterLimit,
55 kStrokeWidth,
56 kTransform,
57 kText,
58 kTextAnchor,
59 kViewBox,
60 kVisibility,
61 kWidth,
62 kX,
63 kX1, // <line>: first endpoint x
64 kX2, // <line>: second endpoint x
65 kY,
66 kY1, // <line>: first endpoint y
67 kY2, // <line>: second endpoint y
68
69 kUnknown,
70};
71
72struct SkSVGPresentationAttributes {
73 static SkSVGPresentationAttributes MakeInitial();
74
Tyler Denniston75c38f92020-11-17 12:26:25 -050075 // TODO: SkSVGProperty adds an extra ptr per attribute; refactor to reduce overhead.
Florin Malitab3418102020-10-15 18:10:29 -040076
Tyler Denniston75c38f92020-11-17 12:26:25 -050077 SkSVGProperty<SkSVGPaint , true> fFill;
78 SkSVGProperty<SkSVGNumberType, true> fFillOpacity;
79 SkSVGProperty<SkSVGFillRule , true> fFillRule;
80 SkSVGProperty<SkSVGFillRule , true> fClipRule;
Florin Malitab3418102020-10-15 18:10:29 -040081
Tyler Denniston75c38f92020-11-17 12:26:25 -050082 SkSVGProperty<SkSVGPaint , true> fStroke;
83 SkSVGProperty<SkSVGDashArray , true> fStrokeDashArray;
84 SkSVGProperty<SkSVGLength , true> fStrokeDashOffset;
85 SkSVGProperty<SkSVGLineCap , true> fStrokeLineCap;
86 SkSVGProperty<SkSVGLineJoin , true> fStrokeLineJoin;
87 SkSVGProperty<SkSVGNumberType, true> fStrokeMiterLimit;
88 SkSVGProperty<SkSVGNumberType, true> fStrokeOpacity;
89 SkSVGProperty<SkSVGLength , true> fStrokeWidth;
Florin Malitab3418102020-10-15 18:10:29 -040090
Tyler Denniston75c38f92020-11-17 12:26:25 -050091 SkSVGProperty<SkSVGVisibility, true> fVisibility;
Florin Malitab3418102020-10-15 18:10:29 -040092
Tyler Denniston75c38f92020-11-17 12:26:25 -050093 SkSVGProperty<SkSVGColorType , true> fColor;
Florin Malita73d57bf2021-01-15 08:58:09 -050094 SkSVGProperty<SkSVGColorspace, true> fColorInterpolation;
Tyler Denniston7bb85db2021-01-13 12:08:04 -050095 SkSVGProperty<SkSVGColorspace, true> fColorInterpolationFilters;
Florin Malitab3418102020-10-15 18:10:29 -040096
Tyler Denniston75c38f92020-11-17 12:26:25 -050097 SkSVGProperty<SkSVGFontFamily, true> fFontFamily;
98 SkSVGProperty<SkSVGFontStyle , true> fFontStyle;
99 SkSVGProperty<SkSVGFontSize , true> fFontSize;
100 SkSVGProperty<SkSVGFontWeight, true> fFontWeight;
101 SkSVGProperty<SkSVGTextAnchor, true> fTextAnchor;
Florin Malita39fe8c82020-10-20 10:43:03 -0400102
Florin Malitab3418102020-10-15 18:10:29 -0400103 // uninherited
Tyler Denniston75c38f92020-11-17 12:26:25 -0500104 SkSVGProperty<SkSVGNumberType, false> fOpacity;
Florin Malita836c2ca2021-01-13 11:48:02 -0500105 SkSVGProperty<SkSVGFuncIRI , false> fClipPath;
106 SkSVGProperty<SkSVGFuncIRI , false> fMask;
107 SkSVGProperty<SkSVGFuncIRI , false> fFilter;
Tyler Denniston04e03bc2020-12-09 14:16:25 -0500108 SkSVGProperty<SkSVGColor , false> fStopColor;
109 SkSVGProperty<SkSVGNumberType, false> fStopOpacity;
Tyler Denniston8ed04432020-12-10 15:51:04 -0500110 SkSVGProperty<SkSVGColor , false> fFloodColor;
111 SkSVGProperty<SkSVGNumberType, false> fFloodOpacity;
Tyler Denniston32b30892021-01-26 14:36:32 -0500112 SkSVGProperty<SkSVGColor , false> fLightingColor;
Florin Malitab3418102020-10-15 18:10:29 -0400113};
114
115#endif // SkSVGAttribute_DEFINED