• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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