blob: 4ad3cd76511eb07b0a9dd0f102ae59a82044b826 [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,
19 kCx, // <circle>, <ellipse>, <radialGradient>: center x position
20 kCy, // <circle>, <ellipse>, <radialGradient>: center y position
21 kD,
22 kFill,
23 kFillOpacity,
24 kFillRule,
Tyler Dennistonb3cafbc2020-10-30 15:00:48 -040025 kFilter,
Tyler Dennistondf208a32020-10-30 16:01:54 -040026 kFilterUnits,
Florin Malitab3418102020-10-15 18:10:29 -040027 kFontFamily,
28 kFontSize,
29 kFontStyle,
30 kFontWeight,
31 kFx, // <radialGradient>: focal point x position
32 kFy, // <radialGradient>: focal point y position
Tyler Dennistonab76ab42020-10-21 15:08:45 -040033 kGradientUnits,
Florin Malitab3418102020-10-15 18:10:29 -040034 kGradientTransform,
35 kHeight,
36 kHref,
37 kOffset,
38 kOpacity,
39 kPatternTransform,
40 kPoints,
Florin Malita385e7442020-10-21 16:55:46 -040041 kPreserveAspectRatio,
Florin Malitab3418102020-10-15 18:10:29 -040042 kR, // <circle>, <radialGradient>: radius
43 kRx, // <ellipse>,<rect>: horizontal (corner) radius
44 kRy, // <ellipse>,<rect>: vertical (corner) radius
45 kSpreadMethod,
Florin Malitab3418102020-10-15 18:10:29 -040046 kStroke,
47 kStrokeDashArray,
48 kStrokeDashOffset,
49 kStrokeOpacity,
50 kStrokeLineCap,
51 kStrokeLineJoin,
52 kStrokeMiterLimit,
53 kStrokeWidth,
54 kTransform,
55 kText,
56 kTextAnchor,
57 kViewBox,
58 kVisibility,
59 kWidth,
60 kX,
61 kX1, // <line>: first endpoint x
62 kX2, // <line>: second endpoint x
63 kY,
64 kY1, // <line>: first endpoint y
65 kY2, // <line>: second endpoint y
66
67 kUnknown,
68};
69
70struct SkSVGPresentationAttributes {
71 static SkSVGPresentationAttributes MakeInitial();
72
Tyler Denniston75c38f92020-11-17 12:26:25 -050073 // TODO: SkSVGProperty adds an extra ptr per attribute; refactor to reduce overhead.
Florin Malitab3418102020-10-15 18:10:29 -040074
Tyler Denniston75c38f92020-11-17 12:26:25 -050075 SkSVGProperty<SkSVGPaint , true> fFill;
76 SkSVGProperty<SkSVGNumberType, true> fFillOpacity;
77 SkSVGProperty<SkSVGFillRule , true> fFillRule;
78 SkSVGProperty<SkSVGFillRule , true> fClipRule;
Florin Malitab3418102020-10-15 18:10:29 -040079
Tyler Denniston75c38f92020-11-17 12:26:25 -050080 SkSVGProperty<SkSVGPaint , true> fStroke;
81 SkSVGProperty<SkSVGDashArray , true> fStrokeDashArray;
82 SkSVGProperty<SkSVGLength , true> fStrokeDashOffset;
83 SkSVGProperty<SkSVGLineCap , true> fStrokeLineCap;
84 SkSVGProperty<SkSVGLineJoin , true> fStrokeLineJoin;
85 SkSVGProperty<SkSVGNumberType, true> fStrokeMiterLimit;
86 SkSVGProperty<SkSVGNumberType, true> fStrokeOpacity;
87 SkSVGProperty<SkSVGLength , true> fStrokeWidth;
Florin Malitab3418102020-10-15 18:10:29 -040088
Tyler Denniston75c38f92020-11-17 12:26:25 -050089 SkSVGProperty<SkSVGVisibility, true> fVisibility;
Florin Malitab3418102020-10-15 18:10:29 -040090
Tyler Denniston75c38f92020-11-17 12:26:25 -050091 SkSVGProperty<SkSVGColorType , true> fColor;
Florin Malitab3418102020-10-15 18:10:29 -040092
Tyler Denniston75c38f92020-11-17 12:26:25 -050093 SkSVGProperty<SkSVGFontFamily, true> fFontFamily;
94 SkSVGProperty<SkSVGFontStyle , true> fFontStyle;
95 SkSVGProperty<SkSVGFontSize , true> fFontSize;
96 SkSVGProperty<SkSVGFontWeight, true> fFontWeight;
97 SkSVGProperty<SkSVGTextAnchor, true> fTextAnchor;
Florin Malita39fe8c82020-10-20 10:43:03 -040098
Florin Malitab3418102020-10-15 18:10:29 -040099 // uninherited
Tyler Denniston75c38f92020-11-17 12:26:25 -0500100 SkSVGProperty<SkSVGNumberType, false> fOpacity;
101 SkSVGProperty<SkSVGClip , false> fClipPath;
102 SkSVGProperty<SkSVGFilterType, false> fFilter;
Tyler Denniston04e03bc2020-12-09 14:16:25 -0500103 SkSVGProperty<SkSVGColor , false> fStopColor;
104 SkSVGProperty<SkSVGNumberType, false> fStopOpacity;
Tyler Denniston8ed04432020-12-10 15:51:04 -0500105 SkSVGProperty<SkSVGColor , false> fFloodColor;
106 SkSVGProperty<SkSVGNumberType, false> fFloodOpacity;
Florin Malitab3418102020-10-15 18:10:29 -0400107};
108
109#endif // SkSVGAttribute_DEFINED