1 /*
2  * Copyright (c) 2022 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 
16 #ifndef RENDER_SERVICE_CLIENT_CORE_ANIMATION_RS_MODIFIER_TYPE_H
17 #define RENDER_SERVICE_CLIENT_CORE_ANIMATION_RS_MODIFIER_TYPE_H
18 
19 #include <bitset>
20 #include <cstdint>
21 #include <map>
22 
23 namespace OHOS {
24 namespace Rosen {
25 // NOTE:
26 // 1. Following LUTs must be updated according when this enum is updated :
27 //    a. g_propertyResetterLUT in rs_properties.cpp
28 //    b. g_propertyToDrawableLut in rs_drawable_content.cpp
29 // 2. Property modifier(i.e. to be applied to RSProperties) MUST be added before CUSTOM enum, elsewise it will not work
30 enum class RSModifierType : int16_t {
31     INVALID = 0,
32     BOUNDS,
33     FRAME,
34     POSITION_Z,
35     POSITION_Z_APPLICABLE_CAMERA3D,
36     PIVOT,
37     PIVOT_Z,
38     QUATERNION,
39     ROTATION,
40     ROTATION_X,
41     ROTATION_Y,
42     CAMERA_DISTANCE,
43     SCALE,
44     SKEW,
45     PERSP,
46     TRANSLATE,
47     TRANSLATE_Z,
48     SUBLAYER_TRANSFORM,
49     CORNER_RADIUS,
50     ALPHA,
51     ALPHA_OFFSCREEN,
52     FOREGROUND_COLOR,
53     BACKGROUND_COLOR,
54     BACKGROUND_SHADER,
55     BG_IMAGE,
56     BG_IMAGE_INNER_RECT,
57     BG_IMAGE_WIDTH,
58     BG_IMAGE_HEIGHT,
59     BG_IMAGE_POSITION_X,
60     BG_IMAGE_POSITION_Y,
61     SURFACE_BG_COLOR,
62     BORDER_COLOR,
63     BORDER_WIDTH,
64     BORDER_STYLE,
65     BORDER_DASH_WIDTH,
66     BORDER_DASH_GAP,
67     FILTER,
68     BACKGROUND_FILTER,
69     LINEAR_GRADIENT_BLUR_PARA,
70     DYNAMIC_LIGHT_UP_RATE,
71     DYNAMIC_LIGHT_UP_DEGREE,
72     FG_BRIGHTNESS_RATES,
73     FG_BRIGHTNESS_SATURATION,
74     FG_BRIGHTNESS_POSCOEFF,
75     FG_BRIGHTNESS_NEGCOEFF,
76     FG_BRIGHTNESS_FRACTION,
77     BG_BRIGHTNESS_RATES,
78     BG_BRIGHTNESS_SATURATION,
79     BG_BRIGHTNESS_POSCOEFF,
80     BG_BRIGHTNESS_NEGCOEFF,
81     BG_BRIGHTNESS_FRACTION,
82     FRAME_GRAVITY,
83     CLIP_RRECT,
84     CLIP_BOUNDS,
85     CLIP_TO_BOUNDS,
86     CLIP_TO_FRAME,
87     VISIBLE,
88     SHADOW_COLOR,
89     SHADOW_OFFSET_X,
90     SHADOW_OFFSET_Y,
91     SHADOW_ALPHA,
92     SHADOW_ELEVATION,
93     SHADOW_RADIUS,
94     SHADOW_PATH,
95     SHADOW_MASK,
96     SHADOW_COLOR_STRATEGY,
97     MASK,
98     SPHERIZE,
99     LIGHT_UP_EFFECT,
100     PIXEL_STRETCH,
101     PIXEL_STRETCH_PERCENT,
102     PIXEL_STRETCH_TILE_MODE,
103     USE_EFFECT,
104     USE_EFFECT_TYPE,
105     COLOR_BLEND_MODE,
106     COLOR_BLEND_APPLY_TYPE,
107     SANDBOX,
108     GRAY_SCALE,
109     BRIGHTNESS,
110     CONTRAST,
111     SATURATE,
112     SEPIA,
113     INVERT,
114     AIINVERT,
115     SYSTEMBAREFFECT,
116     WATER_RIPPLE_PROGRESS,
117     WATER_RIPPLE_PARAMS,
118     HUE_ROTATE,
119     COLOR_BLEND,
120     PARTICLE,
121     SHADOW_IS_FILLED,
122     OUTLINE_COLOR,
123     OUTLINE_WIDTH,
124     OUTLINE_STYLE,
125     OUTLINE_DASH_WIDTH,
126     OUTLINE_DASH_GAP,
127     OUTLINE_RADIUS,
128     GREY_COEF,
129     LIGHT_INTENSITY,
130     LIGHT_COLOR,
131     LIGHT_POSITION,
132     ILLUMINATED_BORDER_WIDTH,
133     ILLUMINATED_TYPE,
134     BLOOM,
135     FOREGROUND_EFFECT_RADIUS,
136     USE_SHADOW_BATCHING,
137     MOTION_BLUR_PARA,
138     PARTICLE_EMITTER_UPDATER,
139     PARTICLE_NOISE_FIELD,
140     FLY_OUT_DEGREE,
141     FLY_OUT_PARAMS,
142     DISTORTION_K,
143     DYNAMIC_DIM_DEGREE,
144     MAGNIFIER_PARA,
145     BACKGROUND_BLUR_RADIUS,
146     BACKGROUND_BLUR_SATURATION,
147     BACKGROUND_BLUR_BRIGHTNESS,
148     BACKGROUND_BLUR_MASK_COLOR,
149     BACKGROUND_BLUR_COLOR_MODE,
150     BACKGROUND_BLUR_RADIUS_X,
151     BACKGROUND_BLUR_RADIUS_Y,
152     FOREGROUND_BLUR_RADIUS,
153     FOREGROUND_BLUR_SATURATION,
154     FOREGROUND_BLUR_BRIGHTNESS,
155     FOREGROUND_BLUR_MASK_COLOR,
156     FOREGROUND_BLUR_COLOR_MODE,
157     FOREGROUND_BLUR_RADIUS_X,
158     FOREGROUND_BLUR_RADIUS_Y,
159     ATTRACTION_FRACTION,
160     ATTRACTION_DSTPOINT,
161     CUSTOM,
162     EXTENDED,
163     TRANSITION,
164     BACKGROUND_STYLE,
165     CONTENT_STYLE,
166     FOREGROUND_STYLE,
167     OVERLAY_STYLE,
168     NODE_MODIFIER,
169     ENV_FOREGROUND_COLOR,
170     ENV_FOREGROUND_COLOR_STRATEGY,
171     GEOMETRYTRANS,
172     CUSTOM_CLIP_TO_FRAME,
173     BEHIND_WINDOW_FILTER_RADIUS,
174     BEHIND_WINDOW_FILTER_SATURATION,
175     BEHIND_WINDOW_FILTER_BRIGHTNESS,
176     BEHIND_WINDOW_FILTER_MASK_COLOR,
177     CHILDREN, // PLACEHOLDER, no such modifier, but we need a dirty flag
178     MAX_RS_MODIFIER_TYPE,
179 };
180 
181 enum class RSPropertyModifierType : uint8_t {
182     GEOMETRY = 0,
183     BACKGROUND,
184     CONTENT,
185     FOREGROUND,
186     OVERLAY,
187     APPEARANCE,
188     CUSTOM,
189 };
190 
191 using ModifierDirtyTypes = std::bitset<static_cast<int>(RSModifierType::MAX_RS_MODIFIER_TYPE)>;
192 
193 enum class RSRenderPropertyType : int16_t {
194     INVALID = 0,
195     PROPERTY_FLOAT,
196     PROPERTY_COLOR,
197     PROPERTY_MATRIX3F,
198     PROPERTY_QUATERNION,
199     PROPERTY_FILTER,
200     PROPERTY_VECTOR2F,
201     PROPERTY_VECTOR4F,
202     PROPERTY_VECTOR4_COLOR,
203     PROPERTY_SKMATRIX,
204     PROPERTY_RRECT,
205 };
206 
207 enum class RSPropertyUnit : int16_t {
208     UNKNOWN = 0,
209     PIXEL_POSITION,
210     PIXEL_SIZE,
211     RATIO_SCALE,
212     ANGLE_ROTATION,
213 };
214 
215 class RSModifierTypeString {
216 public:
GetModifierTypeString(RSModifierType type)217     std::string GetModifierTypeString(RSModifierType type) const
218     {
219         auto iter = RS_MODIFIER_TYPE_TO_STRING.find(type);
220         if (iter != RS_MODIFIER_TYPE_TO_STRING.end()) {
221             return iter->second;
222         } else {
223             return "UNKNOWN";
224         }
225     }
226 
227 private:
228     const std::map<RSModifierType, std::string> RS_MODIFIER_TYPE_TO_STRING = {
229         { RSModifierType::INVALID, "Invalid" },
230         { RSModifierType::BOUNDS, "Bounds" },
231         { RSModifierType::FRAME, "Frame" },
232         { RSModifierType::POSITION_Z, "PositionZ" },
233         { RSModifierType::POSITION_Z_APPLICABLE_CAMERA3D, "PositionZApplicableCamera3D" },
234         { RSModifierType::PIVOT, "Pivot" },
235         { RSModifierType::PIVOT_Z, "PivotZ" },
236         { RSModifierType::QUATERNION, "Quaternion" },
237         { RSModifierType::ROTATION, "Rotation" },
238         { RSModifierType::ROTATION_X, "RotationX" },
239         { RSModifierType::ROTATION_Y, "RotationY" },
240         { RSModifierType::CAMERA_DISTANCE, "CameraDistance" },
241         { RSModifierType::SCALE, "Scale" },
242         { RSModifierType::SKEW, "Skew" },
243         { RSModifierType::PERSP, "Persp" },
244         { RSModifierType::TRANSLATE, "Translate" },
245         { RSModifierType::TRANSLATE_Z, "TranslateZ" },
246         { RSModifierType::SUBLAYER_TRANSFORM, "SublayerTransform" },
247         { RSModifierType::CORNER_RADIUS, "CornerRadius" },
248         { RSModifierType::ALPHA, "Alpha" },
249         { RSModifierType::ALPHA_OFFSCREEN, "AlphaOffscreen" },
250         { RSModifierType::FOREGROUND_COLOR, "ForegroundColor" },
251         { RSModifierType::BACKGROUND_COLOR, "BackgroundColor" },
252         { RSModifierType::BACKGROUND_SHADER, "BackgroundShader" },
253         { RSModifierType::BG_IMAGE, "BgImage" },
254         { RSModifierType::BG_IMAGE_INNER_RECT, "BgImageInnerRect" },
255         { RSModifierType::BG_IMAGE_WIDTH, "BgImageWidth" },
256         { RSModifierType::BG_IMAGE_HEIGHT, "BgImageHeight" },
257         { RSModifierType::BG_IMAGE_POSITION_X, "BgImagePositionX" },
258         { RSModifierType::BG_IMAGE_POSITION_Y, "BgImagePositionY" },
259         { RSModifierType::SURFACE_BG_COLOR, "SurfaceBgColor" },
260         { RSModifierType::BORDER_COLOR, "BorderColor" },
261         { RSModifierType::BORDER_WIDTH, "BorderWidth" },
262         { RSModifierType::BORDER_STYLE, "BorderStyle" },
263         { RSModifierType::BORDER_DASH_WIDTH, "BorderDashWidth" },
264         { RSModifierType::BORDER_DASH_GAP, "BorderDashGap" },
265         { RSModifierType::FILTER, "Filter" },
266         { RSModifierType::BACKGROUND_FILTER, "BackgroundFilter" },
267         { RSModifierType::LINEAR_GRADIENT_BLUR_PARA, "LinearGradientBlurPara" },
268         { RSModifierType::DYNAMIC_LIGHT_UP_RATE, "DynamicLightUpRate" },
269         { RSModifierType::DYNAMIC_LIGHT_UP_DEGREE, "DynamicLightUpDegree" },
270         { RSModifierType::FG_BRIGHTNESS_RATES, "FgBrightnessRates" },
271         { RSModifierType::FG_BRIGHTNESS_SATURATION, "FgBrightnessSaturation" },
272         { RSModifierType::FG_BRIGHTNESS_POSCOEFF, "FgBrightnessPoscoeff" },
273         { RSModifierType::FG_BRIGHTNESS_NEGCOEFF, "FgBrightnessNegcoeff" },
274         { RSModifierType::FG_BRIGHTNESS_FRACTION, "FgBrightnessFraction" },
275         { RSModifierType::BG_BRIGHTNESS_RATES, "BgBrightnessRates" },
276         { RSModifierType::BG_BRIGHTNESS_SATURATION, "BgBrightnessSaturation" },
277         { RSModifierType::BG_BRIGHTNESS_POSCOEFF, "BgBrightnessPoscoeff" },
278         { RSModifierType::BG_BRIGHTNESS_NEGCOEFF, "BgBrightnessNegcoeff" },
279         { RSModifierType::BG_BRIGHTNESS_FRACTION, "BgBrightnessFraction" },
280         { RSModifierType::FRAME_GRAVITY, "FrameGravity" },
281         { RSModifierType::CLIP_RRECT, "ClipRrect" },
282         { RSModifierType::CLIP_BOUNDS, "ClipBounds" },
283         { RSModifierType::CLIP_TO_BOUNDS, "ClipToBounds" },
284         { RSModifierType::CLIP_TO_FRAME, "ClipToFrame" },
285         { RSModifierType::VISIBLE, "Visible" },
286         { RSModifierType::SHADOW_COLOR, "ShadowColor" },
287         { RSModifierType::SHADOW_OFFSET_X, "ShadowOffsetX" },
288         { RSModifierType::SHADOW_OFFSET_Y, "ShadowOffsetY" },
289         { RSModifierType::SHADOW_ALPHA, "ShadowAlpha" },
290         { RSModifierType::SHADOW_ELEVATION, "ShadowElevation" },
291         { RSModifierType::SHADOW_RADIUS, "ShadowRadius" },
292         { RSModifierType::SHADOW_PATH, "ShadowPath" },
293         { RSModifierType::SHADOW_MASK, "ShadowMask" },
294         { RSModifierType::SHADOW_COLOR_STRATEGY, "ShadowColorStrategy" },
295         { RSModifierType::MASK, "Mask" },
296         { RSModifierType::SPHERIZE, "Spherize" },
297         { RSModifierType::LIGHT_UP_EFFECT, "LightUpEffect" },
298         { RSModifierType::PIXEL_STRETCH, "PixelStretch" },
299         { RSModifierType::PIXEL_STRETCH_PERCENT, "PixelStretchPercent" },
300         { RSModifierType::PIXEL_STRETCH_TILE_MODE, "PixelStretchTileMode" },
301         { RSModifierType::USE_EFFECT, "UseEffect" },
302         { RSModifierType::USE_EFFECT_TYPE, "UseEffectType" },
303         { RSModifierType::COLOR_BLEND_MODE, "ColorBlendMode" },
304         { RSModifierType::COLOR_BLEND_APPLY_TYPE, "ColorBlendApplyType" },
305         { RSModifierType::SANDBOX, "Sandbox" },
306         { RSModifierType::GRAY_SCALE, "GrayScale" },
307         { RSModifierType::BRIGHTNESS, "Brightness" },
308         { RSModifierType::CONTRAST, "Contrast" },
309         { RSModifierType::SATURATE, "Saturate" },
310         { RSModifierType::SEPIA, "Sepia" },
311         { RSModifierType::INVERT, "Invert" },
312         { RSModifierType::AIINVERT, "Aiinvert" },
313         { RSModifierType::SYSTEMBAREFFECT, "Systembareffect" },
314         { RSModifierType::HUE_ROTATE, "HueRotate" },
315         { RSModifierType::COLOR_BLEND, "ColorBlend" },
316         { RSModifierType::PARTICLE, "Particle" },
317         { RSModifierType::SHADOW_IS_FILLED, "ShadowIsFilled" },
318         { RSModifierType::OUTLINE_COLOR, "OutlineColor" },
319         { RSModifierType::OUTLINE_WIDTH, "OutlineWidth" },
320         { RSModifierType::OUTLINE_STYLE, "OutlineStyle" },
321         { RSModifierType::OUTLINE_DASH_WIDTH, "OutlineDashWidth" },
322         { RSModifierType::OUTLINE_DASH_GAP, "OutlineDashGap" },
323         { RSModifierType::OUTLINE_RADIUS, "OutlineRadius" },
324         { RSModifierType::GREY_COEF, "GreyCoef" },
325         { RSModifierType::LIGHT_INTENSITY, "LightIntensity" },
326         { RSModifierType::LIGHT_COLOR, "LightColor" },
327         { RSModifierType::LIGHT_POSITION, "LightPosition" },
328         { RSModifierType::ILLUMINATED_BORDER_WIDTH, "IlluminatedBorderWidth" },
329         { RSModifierType::ILLUMINATED_TYPE, "IlluminatedType" },
330         { RSModifierType::BLOOM, "Bloom" },
331         { RSModifierType::FOREGROUND_EFFECT_RADIUS, "ForegroundEffectRadius" },
332         { RSModifierType::USE_SHADOW_BATCHING, "UseShadowBatching" },
333         { RSModifierType::MOTION_BLUR_PARA, "MotionBlurPara" },
334         { RSModifierType::PARTICLE_EMITTER_UPDATER, "ParticleEmitterUpdater" },
335         { RSModifierType::PARTICLE_NOISE_FIELD, "ParticleNoiseField" },
336         { RSModifierType::DYNAMIC_DIM_DEGREE, "DynamicDimDegree" },
337         { RSModifierType::MAGNIFIER_PARA, "MagnifierPara" },
338         { RSModifierType::BACKGROUND_BLUR_RADIUS, "BackgroundBlurRadius" },
339         { RSModifierType::BACKGROUND_BLUR_SATURATION, "BackgroundBlurSaturation" },
340         { RSModifierType::BACKGROUND_BLUR_BRIGHTNESS, "BackgroundBlurBrightness" },
341         { RSModifierType::BACKGROUND_BLUR_MASK_COLOR, "BackgroundBlurMaskColor" },
342         { RSModifierType::BACKGROUND_BLUR_COLOR_MODE, "BackgroundBlurColorMode" },
343         { RSModifierType::BACKGROUND_BLUR_RADIUS_X, "BackgroundBlurRadiusX" },
344         { RSModifierType::BACKGROUND_BLUR_RADIUS_Y, "BackgroundBlurRadiusY" },
345         { RSModifierType::FOREGROUND_BLUR_RADIUS, "ForegroundBlurRadius" },
346         { RSModifierType::FOREGROUND_BLUR_SATURATION, "ForegroundBlurSaturation" },
347         { RSModifierType::FOREGROUND_BLUR_BRIGHTNESS, "ForegroundBlurBrightness" },
348         { RSModifierType::FOREGROUND_BLUR_MASK_COLOR, "ForegroundBlurMaskColor" },
349         { RSModifierType::FOREGROUND_BLUR_COLOR_MODE, "ForegroundBlurColorMode" },
350         { RSModifierType::FOREGROUND_BLUR_RADIUS_X, "ForegroundBlurRadiusX" },
351         { RSModifierType::FOREGROUND_BLUR_RADIUS_Y, "ForegroundBlurRadiusY" },
352         { RSModifierType::CUSTOM, "Custom" },
353         { RSModifierType::EXTENDED, "Extended" },
354         { RSModifierType::TRANSITION, "Transition" },
355         { RSModifierType::BACKGROUND_STYLE, "BackgroundStyle" },
356         { RSModifierType::CONTENT_STYLE, "ContentStyle" },
357         { RSModifierType::FOREGROUND_STYLE, "ForegroundStyle" },
358         { RSModifierType::OVERLAY_STYLE, "OverlayStyle" },
359         { RSModifierType::NODE_MODIFIER, "NodeModifier" },
360         { RSModifierType::ENV_FOREGROUND_COLOR, "EnvForegroundColor" },
361         { RSModifierType::ENV_FOREGROUND_COLOR_STRATEGY, "EnvForegroundColorStrategy" },
362         { RSModifierType::GEOMETRYTRANS, "Geometrytrans" },
363         { RSModifierType::CUSTOM_CLIP_TO_FRAME, "CustomClipToFrame" },
364         { RSModifierType::BEHIND_WINDOW_FILTER_RADIUS, "BehindWindowFilterRadius" },
365         { RSModifierType::BEHIND_WINDOW_FILTER_SATURATION, "BehindWindowFilterSaturation" },
366         { RSModifierType::BEHIND_WINDOW_FILTER_BRIGHTNESS, "BehindWindowFilterBrightness" },
367         { RSModifierType::BEHIND_WINDOW_FILTER_MASK_COLOR, "BehindWindowFilterMaskColor" },
368         { RSModifierType::CHILDREN, "Children" },
369         { RSModifierType::MAX_RS_MODIFIER_TYPE, "MaxRsModifierType" },
370     };
371 };
372 
373 } // namespace Rosen
374 } // namespace OHOS
375 
376 #endif // RENDER_SERVICE_CLIENT_CORE_ANIMATION_RS_MODIFIER_TYPE_H
377