• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "bridge/declarative_frontend/jsview/models/image_model_impl.h"
17 
18 #include "bridge/declarative_frontend/jsview/models/view_abstract_model_impl.h"
19 #include "bridge/declarative_frontend/view_stack_processor.h"
20 #include "core/components/image/image_component.h"
21 #include "core/components/image/image_event.h"
22 #include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h"
23 #include "frameworks/bridge/declarative_frontend/jsview/js_utils.h"
24 
25 namespace OHOS::Ace::Framework {
26 
SetAlt(const ImageSourceInfo & src)27 void ImageModelImpl::SetAlt(const ImageSourceInfo& src)
28 {
29     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
30     if (image) {
31         image->SetAlt(src.GetSrc());
32     }
33 }
34 
SetBorder(const Border & border)35 void ImageModelImpl::SetBorder(const Border& border)
36 {
37     auto box = ViewStackProcessor::GetInstance()->GetBoxComponent();
38     auto decoration = box->GetFrontDecoration();
39     if (!decoration) {
40         decoration = AceType::MakeRefPtr<Decoration>();
41         box->SetFrontDecoration(decoration);
42     }
43     decoration->SetBorder(border);
44     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
45     if (image) {
46         image->SetBorder(border);
47     }
48 }
49 
SetBackBorder()50 void ImageModelImpl::SetBackBorder()
51 {
52     auto box = ViewStackProcessor::GetInstance()->GetBoxComponent();
53     auto decoration = box->GetBackDecoration();
54     if (!decoration) {
55         decoration = AceType::MakeRefPtr<Decoration>();
56         box->SetBackDecoration(decoration);
57     }
58     SetBorder(decoration->GetBorder());
59 }
60 
SetBlur(double blur)61 void ImageModelImpl::SetBlur(double blur)
62 {
63     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
64     if (image) {
65         image->SetBlur(blur);
66     }
67 }
68 
SetImageFit(ImageFit value)69 void ImageModelImpl::SetImageFit(ImageFit value)
70 {
71     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
72     if (image) {
73         image->SetImageFit(value);
74     }
75 }
76 
SetMatchTextDirection(bool value)77 void ImageModelImpl::SetMatchTextDirection(bool value)
78 {
79     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
80     if (image) {
81         image->SetMatchTextDirection(value);
82     }
83 }
84 
SetFitOriginSize(bool value)85 void ImageModelImpl::SetFitOriginSize(bool value)
86 {
87     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
88     if (image) {
89         image->SetFitMaxSize(!value);
90     }
91 }
92 
SetOnComplete(std::function<void (const LoadImageSuccessEvent & info)> && callback)93 void ImageModelImpl::SetOnComplete(std::function<void(const LoadImageSuccessEvent& info)>&& callback)
94 {
95     auto onCompleteEvent = EventMarker([func = std::move(callback)](const BaseEventInfo* info) {
96         auto eventInfo = TypeInfoHelper::DynamicCast<LoadImageSuccessEvent>(info);
97         func(*eventInfo);
98     });
99     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
100     image->SetLoadSuccessEvent(onCompleteEvent);
101 }
102 
SetOnError(std::function<void (const LoadImageFailEvent & info)> && callback)103 void ImageModelImpl::SetOnError(std::function<void(const LoadImageFailEvent& info)>&& callback)
104 {
105     auto onErrorEvent = EventMarker([func = std::move(callback)](const BaseEventInfo* info) {
106         auto eventInfo = TypeInfoHelper::DynamicCast<LoadImageFailEvent>(info);
107         func(*eventInfo);
108     });
109     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
110     image->SetLoadFailEvent(onErrorEvent);
111 }
112 
SetSvgAnimatorFinishEvent(std::function<void ()> && callback)113 void ImageModelImpl::SetSvgAnimatorFinishEvent(std::function<void()>&& callback)
114 {
115     auto onFinishEvent = EventMarker([func = std::move(callback)]() { func(); });
116     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
117     image->SetSvgAnimatorFinishEvent(onFinishEvent);
118 }
119 
Create(const ImageInfoConfig & imageInfoConfig,RefPtr<PixelMap> & pixmap)120 void ImageModelImpl::Create(const ImageInfoConfig& imageInfoConfig, RefPtr<PixelMap>& pixmap)
121 {
122     RefPtr<ImageComponent> image =
123         AceType::MakeRefPtr<OHOS::Ace::ImageComponent>(imageInfoConfig.src ? *imageInfoConfig.src : "");
124     image->SetBundleInfo(imageInfoConfig.bundleName, imageInfoConfig.moduleName);
125     ViewStackProcessor::GetInstance()->ClaimElementId(image);
126     image->SetUseSkiaSvg(false);
127     ViewStackProcessor::GetInstance()->Push(image);
128     JSInteractableView::SetFocusable(false);
129     JSInteractableView::SetFocusNode(true);
130     if (!pixmap) {
131         return;
132     }
133 
134 #if defined(PIXEL_MAP_SUPPORTED)
135     image->SetPixmap(pixmap);
136 #endif
137 }
138 
SetImageSourceSize(const std::pair<Dimension,Dimension> & size)139 void ImageModelImpl::SetImageSourceSize(const std::pair<Dimension, Dimension>& size)
140 {
141     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
142     image->SetImageSourceSize(size);
143 }
144 
SetImageFill(const Color & color)145 void ImageModelImpl::SetImageFill(const Color& color)
146 {
147     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
148     image->SetImageFill(color);
149 }
150 
SetImageInterpolation(ImageInterpolation iterpolation)151 void ImageModelImpl::SetImageInterpolation(ImageInterpolation iterpolation)
152 {
153     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
154     image->SetImageInterpolation(iterpolation);
155 }
156 
SetImageRepeat(ImageRepeat imageRepeat)157 void ImageModelImpl::SetImageRepeat(ImageRepeat imageRepeat)
158 {
159     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
160     image->SetImageRepeat(imageRepeat);
161 }
162 
SetImageRenderMode(ImageRenderMode imageRenderMode)163 void ImageModelImpl::SetImageRenderMode(ImageRenderMode imageRenderMode)
164 {
165     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
166     image->SetImageRenderMode(imageRenderMode);
167 }
168 
IsSrcSvgImage()169 bool ImageModelImpl::IsSrcSvgImage()
170 {
171     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
172     return image && image->IsSrcSvgImage();
173 }
174 
SetAutoResize(bool autoResize)175 void ImageModelImpl::SetAutoResize(bool autoResize)
176 {
177     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
178     if (image) {
179         image->SetAutoResize(autoResize);
180     }
181 }
182 
SetSyncMode(bool syncMode)183 void ImageModelImpl::SetSyncMode(bool syncMode)
184 {
185     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
186     if (image) {
187         image->SetSyncMode(syncMode);
188     }
189 }
190 
SetColorFilterMatrix(const std::vector<float> & matrix)191 void ImageModelImpl::SetColorFilterMatrix(const std::vector<float>& matrix)
192 {
193     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
194     if (image) {
195         image->SetColorFilterMatrix(matrix);
196     }
197 }
198 
SetOnDragStart(NG::OnDragStartFunc && onDragStart)199 void ImageModelImpl::SetOnDragStart(NG::OnDragStartFunc&& onDragStart)
200 {
201     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
202     if (image) {
203         image->SetOnDragStartId(ViewAbstractModelImpl::ToDragFunc(std::move(onDragStart)));
204     }
205 }
206 
SetOnDragEnter(NG::OnDragDropFunc && onDragStartId)207 void ImageModelImpl::SetOnDragEnter(NG::OnDragDropFunc&& onDragStartId)
208 {
209     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
210     if (image) {
211         image->SetOnDragEnterId(std::move(onDragStartId));
212     }
213 }
214 
SetOnDragLeave(NG::OnDragDropFunc && onDragStartId)215 void ImageModelImpl::SetOnDragLeave(NG::OnDragDropFunc&& onDragStartId)
216 {
217     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
218     if (image) {
219         image->SetOnDragLeaveId(std::move(onDragStartId));
220     }
221 }
222 
SetOnDragMove(NG::OnDragDropFunc && onDragMoveId)223 void ImageModelImpl::SetOnDragMove(NG::OnDragDropFunc&& onDragMoveId)
224 {
225     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
226     if (image) {
227         image->SetOnDragMoveId(std::move(onDragMoveId));
228     }
229 }
230 
SetOnDrop(NG::OnDragDropFunc && onDropId)231 void ImageModelImpl::SetOnDrop(NG::OnDragDropFunc&& onDropId)
232 {
233     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
234     if (image) {
235         image->SetOnDropId(std::move(onDropId));
236     }
237 }
238 
SetCopyOption(const CopyOptions & copyOption)239 void ImageModelImpl::SetCopyOption(const CopyOptions& copyOption)
240 {
241     auto image = AceType::DynamicCast<ImageComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
242     if (image) {
243         image->SetCopyOption(copyOption);
244     }
245 }
246 
UpdateDragItemInfo(DragItemInfo & itemInfo)247 bool ImageModelImpl::UpdateDragItemInfo(DragItemInfo& itemInfo)
248 {
249     auto component = ViewStackProcessor::GetInstance()->Finish();
250     if (!component) {
251         LOGE("Custom component is null.");
252         return false;
253     }
254     itemInfo.customComponent = component;
255     return true;
256 }
257 
GetIsAnimation()258 bool ImageModelImpl::GetIsAnimation()
259 {
260     return false;
261 }
262 
263 } // namespace OHOS::Ace::Framework
264