1 /*
2  * Copyright (c) 2021-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 
16 #ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_MATRIX2D_H
17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_MATRIX2D_H
18 
19 #include "base/memory/referenced.h"
20 #include "bridge/declarative_frontend/engine/bindings_defines.h"
21 #include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h"
22 #include "frameworks/core/components/common/properties/paint_state.h"
23 
24 namespace OHOS::Ace::Framework {
25 
26 class JSMatrix2d final : public Referenced {
27 public:
28     JSMatrix2d() = default;
29     ~JSMatrix2d() override = default;
30 
31     static void JSBind(BindingTarget globalObj);
32     static void Constructor(const JSCallbackInfo& info);
33     static void Destructor(JSMatrix2d* matrix2d);
34     static TransformParam GetTransformInfo(const JSRef<JSObject>& obj);
35     void JsSetScaleX(const JSCallbackInfo& info);
36     void JsSetRotateY(const JSCallbackInfo& info);
37     void JsSetRotateX(const JSCallbackInfo& info);
38     void JsSetScaleY(const JSCallbackInfo& info);
39     void JsSetTranslateX(const JSCallbackInfo& info);
40     void JsSetTranslateY(const JSCallbackInfo& info);
41 
42     void JsGetScaleX(const JSCallbackInfo& info);
43     void JsGetRotateY(const JSCallbackInfo& info);
44     void JsGetRotateX(const JSCallbackInfo& info);
45     void JsGetScaleY(const JSCallbackInfo& info);
46     void JsGetTranslateX(const JSCallbackInfo& info);
47     void JsGetTranslateY(const JSCallbackInfo& info);
48 
49     void JsIdentity(const JSCallbackInfo& info);
50     void JsInvert(const JSCallbackInfo& info);
51     void JsRotate(const JSCallbackInfo& info);
52     void JsTranslate(const JSCallbackInfo& info);
53     void JsScale(const JSCallbackInfo& info);
JSMultiply(const JSCallbackInfo & info)54     void JSMultiply(const JSCallbackInfo& info) {}
55 
JsGetScaleX()56     double JsGetScaleX() const
57     {
58         return transform_.scaleX;
59     }
60 
JsGetRotateY()61     double JsGetRotateY() const
62     {
63         return transform_.skewY;
64     }
65 
JsGetRotateX()66     double JsGetRotateX() const
67     {
68         return transform_.skewX;
69     }
70 
JsGetScaleY()71     double JsGetScaleY() const
72     {
73         return transform_.scaleY;
74     }
75 
JsGetTranslateX()76     double JsGetTranslateX() const
77     {
78         return transform_.translateX;
79     }
80 
JsGetTranslateY()81     double JsGetTranslateY() const
82     {
83         return transform_.translateY;
84     }
85 
GetTransform()86     TransformParam GetTransform() const
87     {
88         return transform_;
89     }
90 
SetTransform(const TransformParam & param)91     void SetTransform(const TransformParam& param)
92     {
93         transform_ = param;
94     }
95 
SetUnit(CanvasUnit unit)96     void SetUnit(CanvasUnit unit)
97     {
98         unit_ = unit;
99     }
100 
GetUnit()101     CanvasUnit GetUnit()
102     {
103         return unit_;
104     }
105 
GetDensity()106     double GetDensity()
107     {
108         double density = PipelineBase::GetCurrentDensity();
109         return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0;
110     }
111 
112     std::string ToString() const;
113     ACE_DISALLOW_COPY_AND_MOVE(JSMatrix2d);
114 
115 private:
116     TransformParam transform_;
117     CanvasUnit unit_ = CanvasUnit::DEFAULT;
118 };
119 
120 } // OHOS::Ace::Framework
121 #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_MATRIX2D_H
122 
123