• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 <string>
17 
18 #include "bridge/cj_frontend/cppview/render_image.h"
19 #include "core/image/image_source_info.h"
20 #include "core/pipeline/pipeline_base.h"
21 
22 using namespace OHOS;
23 
24 namespace OHOS::Ace::Framework {
CJRenderImage()25 CJRenderImage::CJRenderImage() : FFIData() {}
CJRenderImage(const int32_t unit)26 CJRenderImage::CJRenderImage(const int32_t unit) : FFIData()
27 {
28     SetUnit(static_cast<CanvasUnit>(unit));
29 }
30 
InitCJRenderImage(const std::string & src)31 void CJRenderImage::InitCJRenderImage(const std::string& src)
32 {
33     this->LoadImage(src);
34 }
35 
InitCJRenderImage(const RefPtr<OHOS::Ace::PixelMap> & pixmap)36 void CJRenderImage::InitCJRenderImage(const RefPtr<OHOS::Ace::PixelMap>& pixmap)
37 {
38     this->LoadImage(pixmap);
39 }
40 
LoadImage(const ImageSourceInfo & sourceInfo)41 void CJRenderImage::LoadImage(const ImageSourceInfo& sourceInfo)
42 {
43     auto dataReadyCallback = [this](const ImageSourceInfo& sourceInfo) { this->OnImageDataReady(); };
44     auto loadSuccessCallback = [this](const ImageSourceInfo& sourceInfo) { this->OnImageLoadSuccess(); };
45     auto loadFailCallback = [this](const ImageSourceInfo& sourceInfo, const std::string& errorMsg,
46                                 ImageErrorInfo /* errorInfo */) { this->OnImageLoadFail(errorMsg); };
47     NG::LoadNotifier loadNotifier(dataReadyCallback, loadSuccessCallback, loadFailCallback);
48     loadingCtx_ = AceType::MakeRefPtr<NG::ImageLoadingContext>(sourceInfo, std::move(loadNotifier), true);
49     loadingCtx_->LoadImageData();
50 }
51 
LoadImage(const std::string & src)52 void CJRenderImage::LoadImage(const std::string& src)
53 {
54     src_ = src;
55     auto sourceInfo = ImageSourceInfo(src);
56     sourceInfo_ = sourceInfo;
57     LoadImage(sourceInfo);
58 }
59 
LoadImage(const RefPtr<OHOS::Ace::PixelMap> & pixmap)60 void CJRenderImage::LoadImage(const RefPtr<OHOS::Ace::PixelMap>& pixmap)
61 {
62     auto sourceInfo = ImageSourceInfo(pixmap);
63     sourceInfo_ = sourceInfo;
64     LoadImage(sourceInfo);
65 }
66 
OnImageDataReady()67 void CJRenderImage::OnImageDataReady()
68 {
69     CHECK_NULL_VOID(loadingCtx_);
70     width_ = loadingCtx_->GetImageSize().Width();
71     height_ = loadingCtx_->GetImageSize().Height();
72     loadingCtx_->MakeCanvasImageIfNeed(loadingCtx_->GetImageSize(), true, ImageFit::NONE);
73 }
74 
OnImageLoadSuccess()75 void CJRenderImage::OnImageLoadSuccess()
76 {
77     CHECK_NULL_VOID(loadingCtx_);
78     image_ = loadingCtx_->MoveCanvasImage();
79     CHECK_NULL_VOID(image_);
80     pixelMap_ = image_->GetPixelMap();
81     imageFit_ = loadingCtx_->GetImageFit();
82 }
83 
OnImageLoadFail(const std::string & errorMsg)84 void CJRenderImage::OnImageLoadFail(const std::string& errorMsg)
85 {
86     width_ = 0;
87     height_ = 0;
88     pixelMap_ = nullptr;
89 }
90 
GetHeight()91 double CJRenderImage::GetHeight()
92 {
93     double density = !NearZero(GetDensity()) ? GetDensity() : 1.0;
94     return height_ / density;
95 }
96 
GetWidth()97 double CJRenderImage::GetWidth()
98 {
99     double density = !NearZero(GetDensity()) ? GetDensity() : 1.0;
100     return width_ / density;
101 }
102 
GetDensity()103 double CJRenderImage::GetDensity()
104 {
105     double density = PipelineBase::GetCurrentDensity();
106     return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0;
107 }
108 } // namespace OHOS::Ace::Framework