1 /*
2 * Copyright (c) 2021 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/js_render_image.h"
17 #include "bridge/declarative_frontend/jsview/js_rendering_context.h"
18 #include "bridge/declarative_frontend/jsview/js_view_common_def.h"
19
20 namespace OHOS::Ace::Framework {
21
JSRenderImage()22 JSRenderImage::JSRenderImage()
23 {
24 }
25
Constructor(const JSCallbackInfo & args)26 void JSRenderImage::Constructor(const JSCallbackInfo& args)
27 {
28 auto jsCalendarController = Referenced::MakeRefPtr<JSRenderImage>();
29 jsCalendarController->IncRefCount();
30 args.SetReturnValue(Referenced::RawPtr(jsCalendarController));
31 auto context = PipelineBase::GetCurrentContext();
32 CHECK_NULL_VOID(context);
33 if (args.Length() <= 0 || !args[0]->IsString()) {
34 LOGE("args invalid");
35 return;
36 }
37
38 std::string text = "";
39 JSViewAbstract::ParseJsString(args[0], text);
40 if (context->IsFormRender()) {
41 SrcType srcType = ImageSourceInfo::ResolveURIType(text);
42 bool notSupport = (
43 srcType == SrcType::NETWORK || srcType == SrcType::FILE || srcType == SrcType::DATA_ABILITY);
44 if (notSupport) {
45 LOGE("Not supported src : %{public}s when form render", text.c_str());
46 return;
47 }
48 }
49
50 jsCalendarController->src_ = text;
51 }
52
Destructor(JSRenderImage * controller)53 void JSRenderImage::Destructor(JSRenderImage* controller)
54 {
55 if (controller != nullptr) {
56 controller->DecRefCount();
57 }
58 }
59
JSBind(BindingTarget globalObj)60 void JSRenderImage::JSBind(BindingTarget globalObj)
61 {
62 JSClass<JSRenderImage>::Declare("ImageBitmap");
63 JSClass<JSRenderImage>::CustomProperty("width", &JSRenderImage::JsGetWidth,
64 &JSRenderImage::JsSetWidth);
65 JSClass<JSRenderImage>::CustomProperty("height", &JSRenderImage::JsGetHeight,
66 &JSRenderImage::JsSetHeight);
67 JSClass<JSRenderImage>::CustomMethod("close", &JSRenderImage::JsClose);
68 JSClass<JSRenderImage>::Bind(globalObj, JSRenderImage::Constructor, JSRenderImage::Destructor);
69 }
70
GetSrc()71 std::string JSRenderImage::GetSrc()
72 {
73 return src_;
74 }
75
JsSetWidth(const JSCallbackInfo & info)76 void JSRenderImage::JsSetWidth(const JSCallbackInfo& info)
77 {
78 return;
79 }
80
JsSetHeight(const JSCallbackInfo & info)81 void JSRenderImage::JsSetHeight(const JSCallbackInfo& info)
82 {
83 return;
84 }
85
JsGetWidth(const JSCallbackInfo & info)86 void JSRenderImage::JsGetWidth(const JSCallbackInfo& info)
87 {
88 double width = 0.0;
89 width = width_;
90 width = SystemProperties::Px2Vp(width);
91 auto returnValue = JSVal(ToJSValue(width));
92 auto returnPtr = JSRef<JSVal>::Make(returnValue);
93 info.SetReturnValue(returnPtr);
94 }
95
JsGetHeight(const JSCallbackInfo & info)96 void JSRenderImage::JsGetHeight(const JSCallbackInfo& info)
97 {
98 double height = 0.0;
99 height = height_;
100
101 height = SystemProperties::Px2Vp(height);
102 auto returnValue = JSVal(ToJSValue(height));
103 auto returnPtr = JSRef<JSVal>::Make(returnValue);
104 info.SetReturnValue(returnPtr);
105 }
106
JsClose(const JSCallbackInfo & info)107 void JSRenderImage::JsClose(const JSCallbackInfo& info)
108 {
109 return;
110 }
111
GetWidth()112 double JSRenderImage::GetWidth()
113 {
114 return width_;
115 }
116
GetHeight()117 double JSRenderImage::GetHeight()
118 {
119 return height_;
120 }
121
122 } // namespace OHOS::Ace::Framework