xref: /third_party/skia/include/core/HMSymbol.h (revision cb93a386)
1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#ifndef LIB_RS_SRC_HM_SYMBOL_H_
16#define LIB_RS_SRC_HM_SYMBOL_H_
17#include <iostream>
18#include <vector>
19#include <string>
20#include <map>
21
22#include "third_party/skia/include/core/SkPath.h"
23
24enum AnimationType {
25    INVALID_ANIMATION_TYPE = 0,
26    SCALE_TYPE = 1,
27    VARIABLE_COLOR_TYPE = 2,
28    APPEAR_TYPE = 3,
29    DISAPPEAR_TYPE = 4,
30    BOUNCE_TYPE = 5,
31    PULSE_TYPE = 6,
32    REPLACE_APPEAR_TYPE = 7,
33    REPLACE_DISAPPEAR_TYPE = 8,
34};
35
36enum CurveType {
37    INVALID_CURVE_TYPE = 0,
38    SPRING = 1,
39    LINEAR = 2,
40    FRICTION = 3,
41    SHARP = 4,
42};
43
44enum CommonSubType {
45    DOWN = 0,
46    UP = 1,
47};
48
49using PiecewiseParameter = struct PiecewiseParameter {
50    CurveType curveType = CurveType::INVALID_CURVE_TYPE;
51    std::map<std::string, float> curveArgs;
52    uint32_t duration = 0;
53    int delay = 0;
54    std::map<std::string, std::vector<float>> properties;
55};
56
57using AnimationPara = struct AnimationPara {
58    uint16_t animationMode = 0; // 0 is default value, is byLayer effect
59    CommonSubType commonSubType = CommonSubType::DOWN;
60    std::vector<std::vector<PiecewiseParameter>> groupParameters;
61};
62
63using AnimationInfo = struct AnimationInfo {
64    AnimationType animationType = AnimationType::INVALID_ANIMATION_TYPE;
65    std::map<uint32_t, AnimationPara> animationParas;
66};
67
68using SColor = struct SColor {
69    float a = 1;
70    U8CPU r = 0;
71    U8CPU g = 0;
72    U8CPU b = 0;
73};
74
75using GroupInfo = struct GroupInfo {
76    std::vector<size_t> layerIndexes;
77    std::vector<size_t> maskIndexes;
78};
79
80using GroupSetting = struct GroupSetting {
81    std::vector<GroupInfo> groupInfos;
82    int animationIndex = -1; // -1 is default value, the level has no effecet
83};
84
85using AnimationSetting = struct AnimationSetting {
86    std::vector<AnimationType> animationTypes;
87    std::vector<GroupSetting> groupSettings;
88};
89
90using RenderGroup = struct RenderGroup {
91    std::vector<GroupInfo> groupInfos;
92    SColor color;
93};
94
95enum EffectStrategy {
96    NONE = 0,
97    SCALE = 1,
98    VARIABLE_COLOR = 2,
99    APPEAR = 3,
100    DISAPPEAR = 4,
101    BOUNCE = 5,
102    PULSE = 6,
103    REPLACE_APPEAR = 7,
104    REPLACE_DISAPPEAR = 8,
105};
106
107using SymbolLayers = struct SymbolLayers {
108    uint16_t symbolGlyphId = 0;
109    std::vector<std::vector<size_t>> layers;
110    std::vector<RenderGroup> renderGroups;
111};
112
113enum SymbolRenderingStrategy {
114    SINGLE = 0,
115    MULTIPLE_COLOR = 1,
116    MULTIPLE_OPACITY = 2,
117};
118
119
120using SymbolLayersGroups = struct SymbolLayersGroups {
121    uint16_t symbolGlyphId = 0;
122    std::vector<std::vector<size_t>> layers;
123    std::map<SymbolRenderingStrategy, std::vector<RenderGroup>> renderModeGroups;
124    std::vector<AnimationSetting> animationSettings;
125};
126
127class SK_API HMSymbolData
128{
129public:
130    SymbolLayers symbolInfo_;
131    SkPath path_;
132    uint64_t symbolId_ = 0;
133};
134
135class SK_API HMSymbol
136{
137public:
138    HMSymbol(){};
139
140    ~HMSymbol(){};
141
142    static void PathOutlineDecompose(const SkPath& path, std::vector<SkPath>& paths);
143
144    static void MultilayerPath(const std::vector<std::vector<size_t>>& multMap,
145        const std::vector<SkPath>& paths, std::vector<SkPath>& multPaths);
146};
147
148#endif