blob: d6996638ccdcf47873b3b900650db3f68bbf14da [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
Florin Malitab3418102020-10-15 18:10:29 -040023 kFill,
24 kFillOpacity,
25 kFillRule,
Tyler Dennistonb3cafbc2020-10-30 15:00:48 -040026 kFilter,
Tyler Dennistondf208a32020-10-30 16:01:54 -040027 kFilterUnits,
Florin Malitab3418102020-10-15 18:10:29 -040028 kFontFamily,
29 kFontSize,
30 kFontStyle,
31 kFontWeight,
32 kFx, // <radialGradient>: focal point x position
33 kFy, // <radialGradient>: focal point y position
Tyler Dennistonab76ab42020-10-21 15:08:45 -040034 kGradientUnits,
Florin Malitab3418102020-10-15 18:10:29 -040035 kGradientTransform,
36 kHeight,
37 kHref,
Florin Malitab3418102020-10-15 18:10:29 -040038 kOpacity,
Florin Malitab3418102020-10-15 18:10:29 -040039 kPoints,
Florin Malita385e7442020-10-21 16:55:46 -040040 kPreserveAspectRatio,
Florin Malitab3418102020-10-15 18:10:29 -040041 kR, // <circle>, <radialGradient>: radius
42 kRx, // <ellipse>,<rect>: horizontal (corner) radius
43 kRy, // <ellipse>,<rect>: vertical (corner) radius
44 kSpreadMethod,
Florin Malitab3418102020-10-15 18:10:29 -040045 kStroke,
46 kStrokeDashArray,
47 kStrokeDashOffset,
48 kStrokeOpacity,
49 kStrokeLineCap,
50 kStrokeLineJoin,
51 kStrokeMiterLimit,
52 kStrokeWidth,
53 kTransform,
54 kText,
55 kTextAnchor,
56 kViewBox,
57 kVisibility,
58 kWidth,
59 kX,
60 kX1, // <line>: first endpoint x
61 kX2, // <line>: second endpoint x
62 kY,
63 kY1, // <line>: first endpoint y
64 kY2, // <line>: second endpoint y
65
66 kUnknown,
67};
68
69struct SkSVGPresentationAttributes {
70 static SkSVGPresentationAttributes MakeInitial();
71
Tyler Denniston75c38f92020-11-17 12:26:25 -050072 // TODO: SkSVGProperty adds an extra ptr per attribute; refactor to reduce overhead.
Florin Malitab3418102020-10-15 18:10:29 -040073
Tyler Denniston75c38f92020-11-17 12:26:25 -050074 SkSVGProperty<SkSVGPaint , true> fFill;
75 SkSVGProperty<SkSVGNumberType, true> fFillOpacity;
76 SkSVGProperty<SkSVGFillRule , true> fFillRule;
77 SkSVGProperty<SkSVGFillRule , true> fClipRule;
Florin Malitab3418102020-10-15 18:10:29 -040078
Tyler Denniston75c38f92020-11-17 12:26:25 -050079 SkSVGProperty<SkSVGPaint , true> fStroke;
80 SkSVGProperty<SkSVGDashArray , true> fStrokeDashArray;
81 SkSVGProperty<SkSVGLength , true> fStrokeDashOffset;
82 SkSVGProperty<SkSVGLineCap , true> fStrokeLineCap;
83 SkSVGProperty<SkSVGLineJoin , true> fStrokeLineJoin;
84 SkSVGProperty<SkSVGNumberType, true> fStrokeMiterLimit;
85 SkSVGProperty<SkSVGNumberType, true> fStrokeOpacity;
86 SkSVGProperty<SkSVGLength , true> fStrokeWidth;
Florin Malitab3418102020-10-15 18:10:29 -040087
Tyler Denniston75c38f92020-11-17 12:26:25 -050088 SkSVGProperty<SkSVGVisibility, true> fVisibility;
Florin Malitab3418102020-10-15 18:10:29 -040089
Tyler Denniston75c38f92020-11-17 12:26:25 -050090 SkSVGProperty<SkSVGColorType , true> fColor;
Florin Malita73d57bf2021-01-15 08:58:09 -050091 SkSVGProperty<SkSVGColorspace, true> fColorInterpolation;
Tyler Denniston7bb85db2021-01-13 12:08:04 -050092 SkSVGProperty<SkSVGColorspace, true> fColorInterpolationFilters;
Florin Malitab3418102020-10-15 18:10:29 -040093
Tyler Denniston75c38f92020-11-17 12:26:25 -050094 SkSVGProperty<SkSVGFontFamily, true> fFontFamily;
95 SkSVGProperty<SkSVGFontStyle , true> fFontStyle;
96 SkSVGProperty<SkSVGFontSize , true> fFontSize;
97 SkSVGProperty<SkSVGFontWeight, true> fFontWeight;
98 SkSVGProperty<SkSVGTextAnchor, true> fTextAnchor;
Florin Malita39fe8c82020-10-20 10:43:03 -040099
Florin Malitab3418102020-10-15 18:10:29 -0400100 // uninherited
Tyler Denniston75c38f92020-11-17 12:26:25 -0500101 SkSVGProperty<SkSVGNumberType, false> fOpacity;
Florin Malita836c2ca2021-01-13 11:48:02 -0500102 SkSVGProperty<SkSVGFuncIRI , false> fClipPath;
Tyler Denniston80ba6172021-05-03 13:12:21 -0400103 SkSVGProperty<SkSVGDisplay , false> fDisplay;
Florin Malita836c2ca2021-01-13 11:48:02 -0500104 SkSVGProperty<SkSVGFuncIRI , false> fMask;
105 SkSVGProperty<SkSVGFuncIRI , false> fFilter;
Tyler Denniston04e03bc2020-12-09 14:16:25 -0500106 SkSVGProperty<SkSVGColor , false> fStopColor;
107 SkSVGProperty<SkSVGNumberType, false> fStopOpacity;
Tyler Denniston8ed04432020-12-10 15:51:04 -0500108 SkSVGProperty<SkSVGColor , false> fFloodColor;
109 SkSVGProperty<SkSVGNumberType, false> fFloodOpacity;
Tyler Denniston32b30892021-01-26 14:36:32 -0500110 SkSVGProperty<SkSVGColor , false> fLightingColor;
Florin Malitab3418102020-10-15 18:10:29 -0400111};
112
113#endif // SkSVGAttribute_DEFINED