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