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