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 #include "platform/common/rs_surface_ext.h" 23 #include "surface_type.h" 24 25 #ifndef USE_ROSEN_DRAWING 26 class SkMatrix; 27 struct SkRect; 28 #else 29 #include "utils/matrix.h" 30 #include "utils/rect.h" 31 #endif 32 33 namespace OHOS { 34 namespace Rosen { 35 36 enum RSSurfaceNodeCommandType : uint16_t { 37 SURFACE_NODE_CREATE, 38 SURFACE_NODE_CREATE_WITH_CONFIG, 39 SURFACE_NODE_SET_CONTEXT_MATRIX, 40 SURFACE_NODE_SET_CONTEXT_ALPHA, 41 SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 42 SURFACE_NODE_SET_SECURITY_LAYER, 43 SURFACE_NODE_SET_SKIP_LAYER, 44 SURFACE_NODE_SET_FINGERPRINT, 45 SURFACE_NODE_SET_COLOR_SPACE, 46 SURFACE_NODE_UPDATE_SURFACE_SIZE, 47 SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 48 SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 49 SURFACE_NODE_SET_CONTEXT_BOUNDS, 50 SURFACE_NODE_SET_ABILITY_BG_ALPHA, 51 SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 52 SURFACE_NODE_SET_SURFACE_NODE_TYPE, 53 SURFACE_NODE_SET_CONTAINER_WINDOW, 54 SURFACE_NODE_SET_ANIMATION_FINISHED, 55 SURFACE_NODE_MARK_UIHIDDEN, 56 SURFACE_NODE_SET_IS_TEXTURE_EXPORT_NODE, 57 SURFACE_NODE_ATTACH_TO_DISPLAY, 58 SURFACE_NODE_DETACH_TO_DISPLAY, 59 SURFACE_NODE_SET_BOOT_ANIMATION, 60 SURFACE_NODE_CREATE_SURFACE_EXT, 61 SURFACE_NODE_SET_FOREGROUND, 62 SURFACE_NODE_SET_SURFACE_ID, 63 SURFACE_NODE_SET_FORCE_UIFIRST, 64 }; 65 66 class RSB_EXPORT SurfaceNodeCommandHelper { 67 public: 68 static void Create(RSContext& context, NodeId nodeId, 69 RSSurfaceNodeType surfaceNodeType = RSSurfaceNodeType::DEFAULT, bool isTextureExportNode = false); 70 static void CreateWithConfig( 71 RSContext& context, NodeId nodeId, std::string name, uint8_t type, std::string bundleName); 72 #ifndef USE_ROSEN_DRAWING 73 static void SetContextMatrix(RSContext& context, NodeId nodeId, const std::optional<SkMatrix>& matrix); 74 #else 75 static void SetContextMatrix(RSContext& context, NodeId nodeId, const std::optional<Drawing::Matrix>& matrix); 76 #endif 77 static void SetContextAlpha(RSContext& context, NodeId nodeId, float alpha); 78 #ifndef USE_ROSEN_DRAWING 79 static void SetContextClipRegion(RSContext& context, NodeId nodeId, const std::optional<SkRect>& clipRect); 80 #else 81 static void SetContextClipRegion(RSContext& context, NodeId nodeId, const std::optional<Drawing::Rect>& clipRect); 82 #endif 83 static void SetSecurityLayer(RSContext& context, NodeId nodeId, bool isSecurityLayer); 84 static void SetSkipLayer(RSContext& context, NodeId nodeId, bool isSkipLayer); 85 static void SetFingerprint(RSContext& context, NodeId nodeId, bool hasFingerprint); 86 static void SetColorSpace(RSContext& context, NodeId nodeId, GraphicColorGamut colorSpace); 87 static void UpdateSurfaceDefaultSize(RSContext& context, NodeId nodeId, float width, float height); 88 static void ConnectToNodeInRenderService(RSContext& context, NodeId id); 89 static void SetCallbackForRenderThreadRefresh(RSContext& context, NodeId id, bool isRefresh); 90 static void SetContextBounds(RSContext& context, NodeId id, Vector4f bounds); 91 static void SetIsTextureExportNode(RSContext& context, NodeId id, bool isTextureExportNode); 92 static void SetAbilityBGAlpha(RSContext& context, NodeId id, uint8_t alpha); 93 static void SetIsNotifyUIBufferAvailable(RSContext& context, NodeId nodeId, bool available); 94 static void MarkUIHidden(RSContext& context, NodeId nodeId, bool isHidden); 95 static void SetSurfaceNodeType(RSContext& context, NodeId nodeId, uint8_t surfaceNodeType); 96 static void SetContainerWindow(RSContext& context, NodeId nodeId, bool hasContainerWindow, float density); 97 static void SetAnimationFinished(RSContext& context, NodeId nodeId); 98 static void AttachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 99 static void DetachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 100 static void SetBootAnimation(RSContext& context, NodeId nodeId, bool isBootAnimation); 101 #ifdef USE_SURFACE_TEXTURE 102 static void CreateSurfaceExt(RSContext& context, NodeId id, const std::shared_ptr<RSSurfaceTexture>& surfaceExt); 103 #endif 104 static void SetForeground(RSContext& context, NodeId nodeId, bool isForeground); 105 static void SetSurfaceId(RSContext& context, NodeId nodeId, SurfaceId surfaceId); 106 static void SetForceUIFirst(RSContext& context, NodeId nodeId, bool forceUIFirst); 107 }; 108 109 ADD_COMMAND(RSSurfaceNodeCreate, 110 ARG(SURFACE_NODE, SURFACE_NODE_CREATE, SurfaceNodeCommandHelper::Create, NodeId, RSSurfaceNodeType, bool)) 111 ADD_COMMAND(RSSurfaceNodeCreateWithConfig, 112 ARG(SURFACE_NODE, SURFACE_NODE_CREATE_WITH_CONFIG, SurfaceNodeCommandHelper::CreateWithConfig, NodeId, std::string, 113 uint8_t, std::string)) 114 #ifndef USE_ROSEN_DRAWING 115 ADD_COMMAND( 116 RSSurfaceNodeSetContextMatrix, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, 117 SurfaceNodeCommandHelper::SetContextMatrix, NodeId, std::optional<SkMatrix>)) 118 #else 119 ADD_COMMAND(RSSurfaceNodeSetContextMatrix, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, 120 SurfaceNodeCommandHelper::SetContextMatrix, NodeId, std::optional<Drawing::Matrix>)) 121 #endif 122 ADD_COMMAND(RSSurfaceNodeSetContextAlpha, 123 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_ALPHA, SurfaceNodeCommandHelper::SetContextAlpha, NodeId, float)) 124 #ifndef USE_ROSEN_DRAWING 125 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 126 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, std::optional<SkRect>)) 127 #else 128 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 129 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, std::optional<Drawing::Rect>)) 130 #endif 131 ADD_COMMAND(RSSurfaceNodeSetBootAnimation, 132 ARG(SURFACE_NODE, SURFACE_NODE_SET_BOOT_ANIMATION, SurfaceNodeCommandHelper::SetBootAnimation, NodeId, bool)) 133 ADD_COMMAND(RSSurfaceNodeSetSecurityLayer, 134 ARG(SURFACE_NODE, SURFACE_NODE_SET_SECURITY_LAYER, SurfaceNodeCommandHelper::SetSecurityLayer, NodeId, bool)) 135 ADD_COMMAND(RSSurfaceNodeSetSkipLayer, 136 ARG(SURFACE_NODE, SURFACE_NODE_SET_SKIP_LAYER, SurfaceNodeCommandHelper::SetSkipLayer, NodeId, bool)) 137 ADD_COMMAND(RSSurfaceNodeSetFingerprint, 138 ARG(SURFACE_NODE, SURFACE_NODE_SET_FINGERPRINT, SurfaceNodeCommandHelper::SetFingerprint, NodeId, bool)) 139 ADD_COMMAND(RSSurfaceNodeUpdateSurfaceDefaultSize, ARG(SURFACE_NODE, SURFACE_NODE_UPDATE_SURFACE_SIZE, 140 SurfaceNodeCommandHelper::UpdateSurfaceDefaultSize, NodeId, float, float)) 141 ADD_COMMAND(RSSurfaceNodeConnectToNodeInRenderService, 142 ARG(SURFACE_NODE, SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 143 SurfaceNodeCommandHelper::ConnectToNodeInRenderService, NodeId)) 144 ADD_COMMAND(RSSurfaceNodeSetCallbackForRenderThreadRefresh, 145 ARG(SURFACE_NODE, SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 146 SurfaceNodeCommandHelper::SetCallbackForRenderThreadRefresh, NodeId, bool)) 147 ADD_COMMAND(RSSurfaceNodeSetBounds, 148 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_BOUNDS, SurfaceNodeCommandHelper::SetContextBounds, NodeId, Vector4f)) 149 ADD_COMMAND(RSSurfaceNodeSetAbilityBGAlpha, 150 ARG(SURFACE_NODE, SURFACE_NODE_SET_ABILITY_BG_ALPHA, SurfaceNodeCommandHelper::SetAbilityBGAlpha, NodeId, uint8_t)) 151 ADD_COMMAND(RSSurfaceNodeSetIsNotifyUIBufferAvailable, 152 ARG(SURFACE_NODE, SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 153 SurfaceNodeCommandHelper::SetIsNotifyUIBufferAvailable, NodeId, bool)) 154 ADD_COMMAND(RSSurfaceNodeMarkUIHidden, 155 ARG(SURFACE_NODE, SURFACE_NODE_MARK_UIHIDDEN, SurfaceNodeCommandHelper::MarkUIHidden, NodeId, bool)) 156 ADD_COMMAND(RSSurfaceNodeSetIsTextureExportNode, 157 ARG(SURFACE_NODE, SURFACE_NODE_SET_IS_TEXTURE_EXPORT_NODE, 158 SurfaceNodeCommandHelper::SetIsTextureExportNode, NodeId, bool)) 159 ADD_COMMAND(RSSurfaceNodeSetSurfaceNodeType, 160 ARG(SURFACE_NODE, SURFACE_NODE_SET_SURFACE_NODE_TYPE, 161 SurfaceNodeCommandHelper::SetSurfaceNodeType, NodeId, uint8_t)) 162 ADD_COMMAND(RSSurfaceNodeSetContainerWindow, 163 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTAINER_WINDOW, SurfaceNodeCommandHelper::SetContainerWindow, 164 NodeId, bool, float)) 165 ADD_COMMAND(RSSurfaceNodeSetAnimationFinished, 166 ARG(SURFACE_NODE, SURFACE_NODE_SET_ANIMATION_FINISHED, SurfaceNodeCommandHelper::SetAnimationFinished, NodeId)) 167 ADD_COMMAND(RSSurfaceNodeAttachToDisplay, 168 ARG(SURFACE_NODE, SURFACE_NODE_ATTACH_TO_DISPLAY, SurfaceNodeCommandHelper::AttachToDisplay, NodeId, uint64_t)) 169 ADD_COMMAND(RSSurfaceNodeDetachToDisplay, 170 ARG(SURFACE_NODE, SURFACE_NODE_DETACH_TO_DISPLAY, SurfaceNodeCommandHelper::DetachToDisplay, NodeId, uint64_t)) 171 ADD_COMMAND(RSSurfaceNodeSetColorSpace, 172 ARG(SURFACE_NODE, SURFACE_NODE_SET_COLOR_SPACE, SurfaceNodeCommandHelper::SetColorSpace, NodeId, GraphicColorGamut)) 173 ADD_COMMAND(RSurfaceNodeSetSurfaceId, 174 ARG(SURFACE_NODE, SURFACE_NODE_SET_SURFACE_ID, SurfaceNodeCommandHelper::SetSurfaceId, NodeId, SurfaceId)) 175 176 #ifdef USE_SURFACE_TEXTURE 177 ADD_COMMAND(RSSurfaceNodeCreateSurfaceExt, 178 ARG(SURFACE_NODE, SURFACE_NODE_CREATE_SURFACE_EXT, 179 SurfaceNodeCommandHelper::CreateSurfaceExt, NodeId, std::shared_ptr<RSSurfaceTexture>)) 180 #endif 181 ADD_COMMAND(RSSurfaceNodeSetForeground, 182 ARG(SURFACE_NODE, SURFACE_NODE_SET_FOREGROUND, SurfaceNodeCommandHelper::SetForeground, NodeId, bool)) 183 ADD_COMMAND(RSSurfaceNodeSetForceUIFirst, 184 ARG(SURFACE_NODE, SURFACE_NODE_SET_FORCE_UIFIRST, SurfaceNodeCommandHelper::SetForceUIFirst, NodeId, bool)) 185 } // namespace Rosen 186 } // namespace OHOS 187 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 188