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