1 /* 2 * Copyright (c) 2021-2023 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 ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 17 #define ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 18 19 #include "command/rs_command_templates.h" 20 #include "common/rs_macros.h" 21 #include "common/rs_vector4.h" 22 #ifndef ROSEN_CROSS_PLATFORM 23 #include "surface_type.h" 24 #endif 25 26 class SkMatrix; 27 struct SkRect; 28 29 namespace OHOS { 30 namespace Rosen { 31 32 enum RSSurfaceNodeCommandType : uint16_t { 33 SURFACE_NODE_CREATE, 34 SURFACE_NODE_SET_CONTEXT_MATRIX, 35 SURFACE_NODE_SET_CONTEXT_ALPHA, 36 SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 37 SURFACE_NODE_SET_SECURITY_LAYER, 38 SURFACE_NODE_SET_COLOR_SPACE, 39 SURFACE_NODE_UPDATE_SURFACE_SIZE, 40 SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 41 SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 42 SURFACE_NODE_SET_CONTEXT_BOUNDS, 43 SURFACE_NODE_SET_ABILITY_BG_ALPHA, 44 SURFACE_NODE_UPDATE_PARENT_WITHOUT_TRANSITION, 45 SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 46 SURFACE_NODE_SET_APP_FREEZE, 47 SURFACE_NODE_SET_SURFACE_NODE_TYPE, 48 SURFACE_NODE_SET_CONTAINER_WINDOW, 49 SURFACE_NODE_SET_ANIMATION_FINISHED 50 }; 51 52 class RSB_EXPORT SurfaceNodeCommandHelper { 53 public: 54 static void Create(RSContext& context, NodeId nodeId); 55 static void SetContextMatrix(RSContext& context, NodeId nodeId, SkMatrix matrix); 56 static void SetContextAlpha(RSContext& context, NodeId nodeId, float alpha); 57 static void SetContextClipRegion(RSContext& context, NodeId nodeId, SkRect clipRect); 58 static void SetSecurityLayer(RSContext& context, NodeId nodeId, bool isSecurityLayer); 59 #ifndef ROSEN_CROSS_PLATFORM 60 static void SetColorSpace(RSContext& context, NodeId nodeId, ColorGamut colorSpace); 61 #endif 62 static void UpdateSurfaceDefaultSize(RSContext& context, NodeId nodeId, float width, float height); 63 static void ConnectToNodeInRenderService(RSContext& context, NodeId id); 64 static void SetCallbackForRenderThreadRefresh(RSContext& context, NodeId id, std::function<void(void)> callback); 65 static void SetContextBounds(RSContext& context, NodeId id, Vector4f bounds); 66 static void SetAbilityBGAlpha(RSContext& context, NodeId id, uint8_t alpha); 67 static void UpdateParentWithoutTransition(RSContext& context, NodeId nodeId, NodeId parentId); 68 static void SetIsNotifyUIBufferAvailable(RSContext& context, NodeId nodeId, bool available); 69 static void SetAppFreeze(RSContext& context, NodeId nodeId, bool isAppFreeze); 70 static void SetSurfaceNodeType(RSContext& context, NodeId nodeId, RSSurfaceNodeType type); 71 static void SetContainerWindow(RSContext& context, NodeId nodeId, bool hasContainerWindow, float density); 72 static void SetAnimationFinished(RSContext& context, NodeId nodeId); 73 }; 74 75 ADD_COMMAND(RSSurfaceNodeCreate, ARG(SURFACE_NODE, SURFACE_NODE_CREATE, SurfaceNodeCommandHelper::Create, NodeId)) 76 ADD_COMMAND(RSSurfaceNodeSetContextMatrix, 77 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, SurfaceNodeCommandHelper::SetContextMatrix, NodeId, SkMatrix)) 78 ADD_COMMAND(RSSurfaceNodeSetContextAlpha, 79 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_ALPHA, SurfaceNodeCommandHelper::SetContextAlpha, NodeId, float)) 80 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 81 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, SkRect)) 82 ADD_COMMAND(RSSurfaceNodeSetSecurityLayer, 83 ARG(SURFACE_NODE, SURFACE_NODE_SET_SECURITY_LAYER, SurfaceNodeCommandHelper::SetSecurityLayer, NodeId, bool)) 84 ADD_COMMAND(RSSurfaceNodeUpdateSurfaceDefaultSize, ARG(SURFACE_NODE, SURFACE_NODE_UPDATE_SURFACE_SIZE, 85 SurfaceNodeCommandHelper::UpdateSurfaceDefaultSize, NodeId, float, float)) 86 ADD_COMMAND(RSSurfaceNodeConnectToNodeInRenderService, 87 ARG(SURFACE_NODE, SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 88 SurfaceNodeCommandHelper::ConnectToNodeInRenderService, NodeId)) 89 ADD_COMMAND(RSSurfaceNodeSetCallbackForRenderThreadRefresh, 90 ARG(SURFACE_NODE, SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 91 SurfaceNodeCommandHelper::SetCallbackForRenderThreadRefresh, NodeId, std::function<void(void)>)) 92 ADD_COMMAND(RSSurfaceNodeSetBounds, 93 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_BOUNDS, SurfaceNodeCommandHelper::SetContextBounds, NodeId, Vector4f)) 94 ADD_COMMAND(RSSurfaceNodeSetAbilityBGAlpha, 95 ARG(SURFACE_NODE, SURFACE_NODE_SET_ABILITY_BG_ALPHA, SurfaceNodeCommandHelper::SetAbilityBGAlpha, NodeId, uint8_t)) 96 ADD_COMMAND(RSSurfaceNodeUpdateParentWithoutTransition, 97 ARG(SURFACE_NODE, SURFACE_NODE_UPDATE_PARENT_WITHOUT_TRANSITION, 98 SurfaceNodeCommandHelper::UpdateParentWithoutTransition, NodeId, NodeId)) 99 ADD_COMMAND(RSSurfaceNodeSetIsNotifyUIBufferAvailable, 100 ARG(SURFACE_NODE, SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 101 SurfaceNodeCommandHelper::SetIsNotifyUIBufferAvailable, NodeId, bool)) 102 ADD_COMMAND(RSSurfaceNodeSetAppFreeze, 103 ARG(SURFACE_NODE, SURFACE_NODE_SET_APP_FREEZE, SurfaceNodeCommandHelper::SetAppFreeze, NodeId, bool)) 104 ADD_COMMAND(RSSurfaceNodeSetSurfaceNodeType, 105 ARG(SURFACE_NODE, SURFACE_NODE_SET_SURFACE_NODE_TYPE, 106 SurfaceNodeCommandHelper::SetSurfaceNodeType, NodeId, RSSurfaceNodeType)) 107 ADD_COMMAND(RSSurfaceNodeSetContainerWindow, 108 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTAINER_WINDOW, SurfaceNodeCommandHelper::SetContainerWindow, 109 NodeId, bool, float)) 110 ADD_COMMAND(RSSurfaceNodeSetAnimationFinished, 111 ARG(SURFACE_NODE, SURFACE_NODE_SET_ANIMATION_FINISHED, SurfaceNodeCommandHelper::SetAnimationFinished, NodeId)) 112 113 #ifndef ROSEN_CROSS_PLATFORM 114 ADD_COMMAND(RSSurfaceNodeSetColorSpace, 115 ARG(SURFACE_NODE, SURFACE_NODE_SET_COLOR_SPACE, SurfaceNodeCommandHelper::SetColorSpace, NodeId, ColorGamut)) 116 #endif 117 } // namespace Rosen 118 } // namespace OHOS 119 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 120