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 #ifndef USE_ROSEN_DRAWING 27 class SkMatrix; 28 struct SkRect; 29 #else 30 #include "utils/matrix.h" 31 #include "utils/rect.h" 32 #endif 33 34 namespace OHOS { 35 namespace Rosen { 36 37 enum RSSurfaceNodeCommandType : uint16_t { 38 SURFACE_NODE_CREATE, 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_FINGERPRINT, 44 SURFACE_NODE_SET_COLOR_SPACE, 45 SURFACE_NODE_UPDATE_SURFACE_SIZE, 46 SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 47 SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 48 SURFACE_NODE_SET_CONTEXT_BOUNDS, 49 SURFACE_NODE_SET_ABILITY_BG_ALPHA, 50 SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 51 SURFACE_NODE_SET_SURFACE_NODE_TYPE, 52 SURFACE_NODE_SET_CONTAINER_WINDOW, 53 SURFACE_NODE_SET_ANIMATION_FINISHED, 54 SURFACE_NODE_MARK_UIHIDDEN, 55 SURFACE_NODE_ATTACH_TO_DISPLAY, 56 SURFACE_NODE_DETACH_TO_DISPLAY, 57 }; 58 59 class RSB_EXPORT SurfaceNodeCommandHelper { 60 public: 61 static void Create(RSContext& context, NodeId nodeId); 62 #ifndef USE_ROSEN_DRAWING 63 static void SetContextMatrix(RSContext& context, NodeId nodeId, const std::optional<SkMatrix>& matrix); 64 #else 65 static void SetContextMatrix(RSContext& context, NodeId nodeId, const std::optional<Drawing::Matrix>& matrix); 66 #endif 67 static void SetContextAlpha(RSContext& context, NodeId nodeId, float alpha); 68 #ifndef USE_ROSEN_DRAWING 69 static void SetContextClipRegion(RSContext& context, NodeId nodeId, const std::optional<SkRect>& clipRect); 70 #else 71 static void SetContextClipRegion(RSContext& context, NodeId nodeId, const std::optional<Drawing::Rect>& clipRect); 72 #endif 73 static void SetSecurityLayer(RSContext& context, NodeId nodeId, bool isSecurityLayer); 74 static void SetFingerprint(RSContext& context, NodeId nodeId, bool hasFingerprint); 75 #ifndef ROSEN_CROSS_PLATFORM 76 static void SetColorSpace(RSContext& context, NodeId nodeId, GraphicColorGamut colorSpace); 77 #endif 78 static void UpdateSurfaceDefaultSize(RSContext& context, NodeId nodeId, float width, float height); 79 static void ConnectToNodeInRenderService(RSContext& context, NodeId id); 80 static void SetCallbackForRenderThreadRefresh(RSContext& context, NodeId id, bool isRefresh); 81 static void SetContextBounds(RSContext& context, NodeId id, Vector4f bounds); 82 static void SetAbilityBGAlpha(RSContext& context, NodeId id, uint8_t alpha); 83 static void SetIsNotifyUIBufferAvailable(RSContext& context, NodeId nodeId, bool available); 84 static void MarkUIHidden(RSContext& context, NodeId nodeId, bool isHidden); 85 static void SetSurfaceNodeType(RSContext& context, NodeId nodeId, uint8_t surfaceNodeType); 86 static void SetContainerWindow(RSContext& context, NodeId nodeId, bool hasContainerWindow, float density); 87 static void SetAnimationFinished(RSContext& context, NodeId nodeId); 88 static void AttachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 89 static void DetachToDisplay(RSContext& context, NodeId nodeId, uint64_t screenId); 90 }; 91 92 ADD_COMMAND(RSSurfaceNodeCreate, ARG(SURFACE_NODE, SURFACE_NODE_CREATE, SurfaceNodeCommandHelper::Create, NodeId)) 93 #ifndef USE_ROSEN_DRAWING 94 ADD_COMMAND( 95 RSSurfaceNodeSetContextMatrix, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, 96 SurfaceNodeCommandHelper::SetContextMatrix, NodeId, std::optional<SkMatrix>)) 97 #else 98 ADD_COMMAND(RSSurfaceNodeSetContextMatrix, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_MATRIX, 99 SurfaceNodeCommandHelper::SetContextMatrix, NodeId, std::optional<Drawing::Matrix>)) 100 #endif 101 ADD_COMMAND(RSSurfaceNodeSetContextAlpha, 102 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_ALPHA, SurfaceNodeCommandHelper::SetContextAlpha, NodeId, float)) 103 #ifndef USE_ROSEN_DRAWING 104 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 105 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, std::optional<SkRect>)) 106 #else 107 ADD_COMMAND(RSSurfaceNodeSetContextClipRegion, ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_CLIP_REGION, 108 SurfaceNodeCommandHelper::SetContextClipRegion, NodeId, std::optional<Drawing::Rect>)) 109 #endif 110 ADD_COMMAND(RSSurfaceNodeSetSecurityLayer, 111 ARG(SURFACE_NODE, SURFACE_NODE_SET_SECURITY_LAYER, SurfaceNodeCommandHelper::SetSecurityLayer, NodeId, bool)) 112 ADD_COMMAND(RSSurfaceNodeSetFingerprint, 113 ARG(SURFACE_NODE, SURFACE_NODE_SET_FINGERPRINT, SurfaceNodeCommandHelper::SetFingerprint, NodeId, bool)) 114 ADD_COMMAND(RSSurfaceNodeUpdateSurfaceDefaultSize, ARG(SURFACE_NODE, SURFACE_NODE_UPDATE_SURFACE_SIZE, 115 SurfaceNodeCommandHelper::UpdateSurfaceDefaultSize, NodeId, float, float)) 116 ADD_COMMAND(RSSurfaceNodeConnectToNodeInRenderService, 117 ARG(SURFACE_NODE, SURFACE_NODE_CONNECT_TO_NODE_IN_RENDER_SERVICE, 118 SurfaceNodeCommandHelper::ConnectToNodeInRenderService, NodeId)) 119 ADD_COMMAND(RSSurfaceNodeSetCallbackForRenderThreadRefresh, 120 ARG(SURFACE_NODE, SURFACE_NODE_SET_CALLBACK_FOR_RENDER_THREAD, 121 SurfaceNodeCommandHelper::SetCallbackForRenderThreadRefresh, NodeId, bool)) 122 ADD_COMMAND(RSSurfaceNodeSetBounds, 123 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTEXT_BOUNDS, SurfaceNodeCommandHelper::SetContextBounds, NodeId, Vector4f)) 124 ADD_COMMAND(RSSurfaceNodeSetAbilityBGAlpha, 125 ARG(SURFACE_NODE, SURFACE_NODE_SET_ABILITY_BG_ALPHA, SurfaceNodeCommandHelper::SetAbilityBGAlpha, NodeId, uint8_t)) 126 ADD_COMMAND(RSSurfaceNodeSetIsNotifyUIBufferAvailable, 127 ARG(SURFACE_NODE, SURFACE_NODE_SET_IS_NOTIFY_BUFFER_AVAILABLE, 128 SurfaceNodeCommandHelper::SetIsNotifyUIBufferAvailable, NodeId, bool)) 129 ADD_COMMAND(RSSurfaceNodeMarkUIHidden, 130 ARG(SURFACE_NODE, SURFACE_NODE_MARK_UIHIDDEN, SurfaceNodeCommandHelper::MarkUIHidden, NodeId, bool)) 131 ADD_COMMAND(RSSurfaceNodeSetSurfaceNodeType, 132 ARG(SURFACE_NODE, SURFACE_NODE_SET_SURFACE_NODE_TYPE, 133 SurfaceNodeCommandHelper::SetSurfaceNodeType, NodeId, uint8_t)) 134 ADD_COMMAND(RSSurfaceNodeSetContainerWindow, 135 ARG(SURFACE_NODE, SURFACE_NODE_SET_CONTAINER_WINDOW, SurfaceNodeCommandHelper::SetContainerWindow, 136 NodeId, bool, float)) 137 ADD_COMMAND(RSSurfaceNodeSetAnimationFinished, 138 ARG(SURFACE_NODE, SURFACE_NODE_SET_ANIMATION_FINISHED, SurfaceNodeCommandHelper::SetAnimationFinished, NodeId)) 139 ADD_COMMAND(RSSurfaceNodeAttachToDisplay, 140 ARG(SURFACE_NODE, SURFACE_NODE_ATTACH_TO_DISPLAY, SurfaceNodeCommandHelper::AttachToDisplay, NodeId, uint64_t)) 141 ADD_COMMAND(RSSurfaceNodeDetachToDisplay, 142 ARG(SURFACE_NODE, SURFACE_NODE_DETACH_TO_DISPLAY, SurfaceNodeCommandHelper::DetachToDisplay, NodeId, uint64_t)) 143 144 #ifndef ROSEN_CROSS_PLATFORM 145 ADD_COMMAND(RSSurfaceNodeSetColorSpace, 146 ARG(SURFACE_NODE, SURFACE_NODE_SET_COLOR_SPACE, SurfaceNodeCommandHelper::SetColorSpace, NodeId, GraphicColorGamut)) 147 #endif 148 } // namespace Rosen 149 } // namespace OHOS 150 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_SURFACE_NODE_COMMAND_H 151