1 /*
2 * Copyright (c) 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 #include "core/interfaces/native/node/video_modifier.h"
16
17 #include <cstdint>
18
19 #include "core/components/common/properties/alignment.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/base/view_abstract.h"
22 #include "core/components_ng/pattern/video/video_model_ng.h"
23 #include "core/pipeline/base/element_register.h"
24 #include "frameworks/core/components/common/layout/constants.h"
25
26 namespace OHOS::Ace::NG {
27 constexpr ArkUI_Bool DEFAULT_CONTROLS_VALUE = true;
28 constexpr ArkUI_Bool DEFAULT_LOOP = false;
29 constexpr ArkUI_Bool DEFAULT_MUTED = false;
30 constexpr ImageFit DEFAULT_OBJECT_FIT = ImageFit::COVER;
31
SetAutoPlay(ArkUINodeHandle node,ArkUI_Uint32 autoPlay)32 void SetAutoPlay(ArkUINodeHandle node, ArkUI_Uint32 autoPlay)
33 {
34 auto* frameNode = reinterpret_cast<FrameNode*>(node);
35 CHECK_NULL_VOID(frameNode);
36 VideoModelNG::SetAutoPlay(frameNode, static_cast<ArkUI_Bool>(autoPlay));
37 }
38
ResetAutoPlay(ArkUINodeHandle node)39 void ResetAutoPlay(ArkUINodeHandle node)
40 {
41 auto* frameNode = reinterpret_cast<FrameNode*>(node);
42 CHECK_NULL_VOID(frameNode);
43 VideoModelNG::SetAutoPlay(frameNode, false);
44 }
45
SetVideoObjectFit(ArkUINodeHandle node,ArkUI_Int32 objectFit)46 void SetVideoObjectFit(ArkUINodeHandle node, ArkUI_Int32 objectFit)
47 {
48 auto* frameNode = reinterpret_cast<FrameNode*>(node);
49 CHECK_NULL_VOID(frameNode);
50 VideoModelNG::SetObjectFit(frameNode, static_cast<ImageFit>(objectFit));
51 }
52
ResetVideoObjectFit(ArkUINodeHandle node)53 void ResetVideoObjectFit(ArkUINodeHandle node)
54 {
55 auto* frameNode = reinterpret_cast<FrameNode*>(node);
56 CHECK_NULL_VOID(frameNode);
57 VideoModelNG::SetObjectFit(frameNode, DEFAULT_OBJECT_FIT);
58 }
59
SetVideoControls(ArkUINodeHandle node,ArkUI_Uint32 controlsValue)60 void SetVideoControls(ArkUINodeHandle node, ArkUI_Uint32 controlsValue)
61 {
62 auto* frameNode = reinterpret_cast<FrameNode*>(node);
63 CHECK_NULL_VOID(frameNode);
64 VideoModelNG::SetControls(frameNode, static_cast<ArkUI_Bool>(controlsValue));
65 }
66
ResetVideoControls(ArkUINodeHandle node)67 void ResetVideoControls(ArkUINodeHandle node)
68 {
69 auto* frameNode = reinterpret_cast<FrameNode*>(node);
70 CHECK_NULL_VOID(frameNode);
71 VideoModelNG::SetControls(frameNode, DEFAULT_CONTROLS_VALUE);
72 }
73
SetVideoLoop(ArkUINodeHandle node,ArkUI_Uint32 value)74 void SetVideoLoop(ArkUINodeHandle node, ArkUI_Uint32 value)
75 {
76 auto* frameNode = reinterpret_cast<FrameNode*>(node);
77 CHECK_NULL_VOID(frameNode);
78 VideoModelNG::SetLoop(frameNode, static_cast<ArkUI_Bool>(value));
79 }
80
ResetVideoLoop(ArkUINodeHandle node)81 void ResetVideoLoop(ArkUINodeHandle node)
82 {
83 auto* frameNode = reinterpret_cast<FrameNode*>(node);
84 CHECK_NULL_VOID(frameNode);
85 VideoModelNG::SetLoop(frameNode, DEFAULT_LOOP);
86 }
87
SetVideoMuted(ArkUINodeHandle node,ArkUI_Uint32 value)88 void SetVideoMuted(ArkUINodeHandle node, ArkUI_Uint32 value)
89 {
90 auto* frameNode = reinterpret_cast<FrameNode*>(node);
91 CHECK_NULL_VOID(frameNode);
92 VideoModelNG::SetMuted(frameNode, static_cast<ArkUI_Bool>(value));
93 }
94
ResetVideoMuted(ArkUINodeHandle node)95 void ResetVideoMuted(ArkUINodeHandle node)
96 {
97 auto* frameNode = reinterpret_cast<FrameNode*>(node);
98 CHECK_NULL_VOID(frameNode);
99 VideoModelNG::SetMuted(frameNode, DEFAULT_MUTED);
100 }
101
SetVideoOpacity(ArkUINodeHandle node,ArkUI_Float32 opacity)102 void SetVideoOpacity(ArkUINodeHandle node, ArkUI_Float32 opacity)
103 {
104 auto *frameNode = reinterpret_cast<FrameNode *>(node);
105 CHECK_NULL_VOID(frameNode);
106 if ((LessNotEqual(opacity, 0.0)) || opacity > 1) {
107 opacity = 1.0f;
108 }
109 ViewAbstract::SetOpacity(frameNode, opacity);
110 }
111
ResetVideoOpacity(ArkUINodeHandle node)112 void ResetVideoOpacity(ArkUINodeHandle node)
113 {
114 auto *frameNode = reinterpret_cast<FrameNode *>(node);
115 CHECK_NULL_VOID(frameNode);
116 ViewAbstract::SetOpacity(frameNode, 1.0f);
117 }
118
SetVideoSurfaceBackgroundColor(ArkUINodeHandle node,ArkUI_Uint32 color)119 void SetVideoSurfaceBackgroundColor(ArkUINodeHandle node, ArkUI_Uint32 color)
120 {
121 auto *frameNode = reinterpret_cast<FrameNode *>(node);
122 CHECK_NULL_VOID(frameNode);
123 Color backgroundColor = Color(color);
124 if (backgroundColor != Color::TRANSPARENT) {
125 backgroundColor = Color::BLACK;
126 }
127
128 VideoModelNG::SetSurfaceBackgroundColor(frameNode, backgroundColor);
129 }
130
ResetVideoSurfaceBackgroundColor(ArkUINodeHandle node)131 void ResetVideoSurfaceBackgroundColor(ArkUINodeHandle node)
132 {
133 auto *frameNode = reinterpret_cast<FrameNode *>(node);
134 CHECK_NULL_VOID(frameNode);
135 VideoModelNG::SetSurfaceBackgroundColor(frameNode, Color::BLACK);
136 }
137
SetVideoShortcutKeyEnabled(ArkUINodeHandle node,ArkUI_Uint32 value)138 void SetVideoShortcutKeyEnabled(ArkUINodeHandle node, ArkUI_Uint32 value)
139 {
140 auto* frameNode = reinterpret_cast<FrameNode*>(node);
141 CHECK_NULL_VOID(frameNode);
142 VideoModelNG::SetShortcutKeyEnabled(frameNode, static_cast<ArkUI_Bool>(value));
143 }
144
ResetVideoShortcutKeyEnabled(ArkUINodeHandle node)145 void ResetVideoShortcutKeyEnabled(ArkUINodeHandle node)
146 {
147 auto* frameNode = reinterpret_cast<FrameNode*>(node);
148 CHECK_NULL_VOID(frameNode);
149 VideoModelNG::SetShortcutKeyEnabled(frameNode, false);
150 }
151
152 namespace NodeModifier {
GetVideoModifier()153 const ArkUIVideoModifier* GetVideoModifier()
154 {
155 static const ArkUIVideoModifier modifier = {
156 SetAutoPlay,
157 ResetAutoPlay,
158 SetVideoObjectFit,
159 ResetVideoObjectFit,
160 SetVideoControls,
161 ResetVideoControls,
162 SetVideoLoop,
163 ResetVideoLoop,
164 SetVideoMuted,
165 ResetVideoMuted,
166 SetVideoOpacity,
167 ResetVideoOpacity,
168 SetVideoSurfaceBackgroundColor,
169 ResetVideoSurfaceBackgroundColor,
170 SetVideoShortcutKeyEnabled,
171 ResetVideoShortcutKeyEnabled
172 };
173
174 return &modifier;
175 }
176
GetCJUIVideoModifier()177 const CJUIVideoModifier* GetCJUIVideoModifier()
178 {
179 static const CJUIVideoModifier modifier = {
180 SetAutoPlay,
181 ResetAutoPlay,
182 SetVideoObjectFit,
183 ResetVideoObjectFit,
184 SetVideoControls,
185 ResetVideoControls,
186 SetVideoLoop,
187 ResetVideoLoop,
188 SetVideoMuted,
189 ResetVideoMuted,
190 SetVideoOpacity,
191 ResetVideoOpacity
192 };
193
194 return &modifier;
195 }
196 } // namespace NodeModifier
197 } // namespace OHOS::Ace::NG