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