Skia
2D Graphics Library
SkSVGValue.h
Go to the documentation of this file.
1 /*
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 SkSVGValue_DEFINED
9 #define SkSVGValue_DEFINED
10 
11 #include "include/core/SkColor.h"
12 #include "include/core/SkMatrix.h"
13 #include "include/core/SkPath.h"
14 #include "include/core/SkTypes.h"
15 #include "include/private/base/SkNoncopyable.h"
17 
18 class SK_API SkSVGValue : public SkNoncopyable {
19 public:
20  enum class Type {
21  kColor,
22  kFilter,
23  kLength,
24  kNumber,
25  kObjectBoundingBoxUnits,
27  kStopColor,
28  kString,
29  kTransform,
30  kViewBox,
31  };
32 
33  Type type() const { return fType; }
34 
35  template <typename T>
36  const T* as() const {
37  return fType == T::TYPE ? static_cast<const T*>(this) : nullptr;
38  }
39 
40 protected:
41  SkSVGValue(Type t) : fType(t) { }
42 
43 private:
44  Type fType;
45 
46  using INHERITED = SkNoncopyable;
47 };
48 
49 template <typename T, SkSVGValue::Type ValueType>
50 class SK_API SkSVGWrapperValue final : public SkSVGValue {
51 public:
52  static constexpr Type TYPE = ValueType;
53 
54  explicit SkSVGWrapperValue(const T& v)
55  : INHERITED(ValueType)
56  , fWrappedValue(v) { }
57 
58  operator const T&() const { return fWrappedValue; }
59  const T* operator->() const { return &fWrappedValue; }
60 
61 private:
62  // Stack-only
63  void* operator new(size_t) = delete;
64  void* operator new(size_t, void*) = delete;
65 
66  const T& fWrappedValue;
67 
68  using INHERITED = SkSVGValue;
69 };
70 
78 
81 
84 
85 #endif // SkSVGValue_DEFINED
@ kColor
hue and saturation of source with luminosity of destination
Types, consts, functions, and macros for colors.
Definition: SkSVGTypes.h:454
Definition: SkSVGValue.h:18
Type type() const
Definition: SkSVGValue.h:33
SkSVGValue(Type t)
Definition: SkSVGValue.h:41
Type
Definition: SkSVGValue.h:20
const T * as() const
Definition: SkSVGValue.h:36
Definition: SkSVGValue.h:50
SkSVGWrapperValue(const T &v)
Definition: SkSVGValue.h:54
const T * operator->() const
Definition: SkSVGValue.h:59
Definition: SkSVGTypes.h:585