• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "frameworks/bridge/declarative_frontend/jsview/js_polyline.h"
17 
18 #include "core/components/shape/shape_component.h"
19 #include "frameworks/base/memory/referenced.h"
20 #include "frameworks/bridge/declarative_frontend/engine/functions/js_function.h"
21 #include "frameworks/bridge/declarative_frontend/view_stack_processor.h"
22 
23 namespace OHOS::Ace::Framework {
24 
Create(const JSCallbackInfo & info)25 void JSPolyline::Create(const JSCallbackInfo& info)
26 {
27     RefPtr<Component> polylineComponent = AceType::MakeRefPtr<OHOS::Ace::ShapeComponent>(ShapeType::POLYLINE);
28     ViewStackProcessor::GetInstance()->Push(polylineComponent);
29     JSShapeAbstract::SetSize(info);
30 }
31 
JSBind(BindingTarget globalObj)32 void JSPolyline::JSBind(BindingTarget globalObj)
33 {
34     JSClass<JSPolyline>::Declare("Polyline");
35     MethodOptions opt = MethodOptions::NONE;
36     JSClass<JSPolyline>::StaticMethod("create", &JSPolyline::Create, opt);
37 
38     JSClass<JSPolyline>::StaticMethod("width", &JSShapeAbstract::JsWidth);
39     JSClass<JSPolyline>::StaticMethod("height", &JSShapeAbstract::JsHeight);
40     JSClass<JSPolyline>::StaticMethod("points", &JSPolyline::JSPoints);
41     JSClass<JSPolyline>::Inherit<JSShapeAbstract>();
42     JSClass<JSPolyline>::Bind<>(globalObj);
43 }
44 
JSPoints(const JSCallbackInfo & info)45 void JSPolyline::JSPoints(const JSCallbackInfo& info)
46 {
47     if (info.Length() < 1) {
48         LOGE("The arg is wrong, it is supposed to have at least 1 arguments");
49         return;
50     }
51     auto polyline = AceType::DynamicCast<ShapeComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
52     ShapePoint point;
53     ShapePoints points;
54     JSRef<JSArray> pointsArray = JSRef<JSArray>::Cast(info[0]);
55     if (!polyline) {
56         LOGE("polylineComponent is null.");
57         return;
58     }
59     if (pointsArray->Length() < 2) {
60         LOGE("Polyline  have at least 2 points");
61         return;
62     } else {
63         for (size_t i = 0; i < pointsArray->Length(); i++) {
64             JSRef<JSArray> pointArray = pointsArray->GetValueAt(i);
65             if (pointArray->GetValueAt(0)->IsNumber()) {
66                 point.first = Dimension(pointArray->GetValueAt(0)->ToNumber<double>(), DimensionUnit::VP);
67             } else if (pointArray->GetValueAt(0)->IsString()) {
68                 point.first = StringUtils::StringToDimension(pointArray->GetValueAt(0)->ToString(), true);
69             } else {
70                 LOGE("Polyline point should be Number or String");
71                 return;
72             }
73             if (pointArray->GetValueAt(1)->IsNumber()) {
74                 point.second = Dimension(pointArray->GetValueAt(1)->ToNumber<double>(), DimensionUnit::VP);
75             } else if (pointArray->GetValueAt(1)->IsString()) {
76                 point.second = StringUtils::StringToDimension(pointArray->GetValueAt(1)->ToString(), true);
77             } else {
78                 LOGE("Polyline point should be Number or String");
79                 return;
80             }
81             points.push_back(point);
82         }
83         polyline->SetPoints(points);
84     }
85 }
86 
87 } // namespace OHOS::Ace::Framework
88