1 /*
2 * Copyright (c) 2023-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 #include "core/interfaces/native/node/shape_modifier.h"
16
17 #include "core/components_ng/pattern/shape/shape_model_ng.h"
18
19 namespace OHOS::Ace::NG {
SetShapeViewPort(ArkUINodeHandle node,const ArkUI_Float32 * dimValues,const ArkUI_Int32 * dimUnits)20 void SetShapeViewPort(ArkUINodeHandle node, const ArkUI_Float32* dimValues, const ArkUI_Int32* dimUnits)
21 {
22 auto* frameNode = reinterpret_cast<FrameNode*>(node);
23 CHECK_NULL_VOID(frameNode);
24 CalcDimension dimLeft = CalcDimension(dimValues[0], (DimensionUnit)dimUnits[0]);
25 CalcDimension dimTop = CalcDimension(dimValues[1], (DimensionUnit)dimUnits[1]);
26 CalcDimension dimWidth = CalcDimension(dimValues[2], (DimensionUnit)dimUnits[2]);
27 CalcDimension dimHeight = CalcDimension(dimValues[3], (DimensionUnit)dimUnits[3]);
28 ShapeModelNG::SetViewPort(frameNode, dimLeft, dimTop, dimWidth, dimHeight);
29 }
30
ResetShapeViewPort(ArkUINodeHandle node)31 void ResetShapeViewPort(ArkUINodeHandle node)
32 {
33 auto* frameNode = reinterpret_cast<FrameNode*>(node);
34 CHECK_NULL_VOID(frameNode);
35 CalcDimension dimLeft = CalcDimension(0.0, DimensionUnit::PX);
36 CalcDimension dimTop = CalcDimension(0.0, DimensionUnit::PX);
37 CalcDimension dimWidth = CalcDimension(0.0, DimensionUnit::PX);
38 CalcDimension dimHeight = CalcDimension(0.0, DimensionUnit::PX);
39 ShapeModelNG::SetViewPort(frameNode, dimLeft, dimTop, dimWidth, dimHeight);
40 }
41
SetShapeMesh(ArkUINodeHandle node,const ArkUI_Float32 * mesh,ArkUI_Uint32 arrayItemCount,ArkUI_Int32 column,ArkUI_Int32 row)42 void SetShapeMesh(ArkUINodeHandle node, const ArkUI_Float32* mesh, ArkUI_Uint32 arrayItemCount,
43 ArkUI_Int32 column, ArkUI_Int32 row)
44 {
45 auto* frameNode = reinterpret_cast<FrameNode*>(node);
46 CHECK_NULL_VOID(frameNode);
47 std::vector<float> meshValues(mesh, mesh + arrayItemCount);
48 ShapeModelNG::SetBitmapMesh(frameNode, meshValues, column, row);
49 }
50
ResetShapeMesh(ArkUINodeHandle node)51 void ResetShapeMesh(ArkUINodeHandle node)
52 {
53 auto* frameNode = reinterpret_cast<FrameNode*>(node);
54 CHECK_NULL_VOID(frameNode);
55 std::vector<float> meshValues;
56 int32_t column = 0;
57 int32_t row = 0;
58 ShapeModelNG::SetBitmapMesh(frameNode, meshValues, column, row);
59 }
60
61 namespace NodeModifier {
GetShapeModifier()62 const ArkUIShapeModifier* GetShapeModifier()
63 {
64 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
65 static const ArkUIShapeModifier modifier = {
66 .setShapeViewPort = SetShapeViewPort,
67 .resetShapeViewPort = ResetShapeViewPort,
68 .setShapeMesh = SetShapeMesh,
69 .resetShapeMesh = ResetShapeMesh,
70 };
71 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
72 return &modifier;
73 }
74
GetCJUIShapeModifier()75 const CJUIShapeModifier* GetCJUIShapeModifier()
76 {
77 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
78 static const CJUIShapeModifier modifier = {
79 .setShapeViewPort = SetShapeViewPort,
80 .resetShapeViewPort = ResetShapeViewPort,
81 .setShapeMesh = SetShapeMesh,
82 .resetShapeMesh = ResetShapeMesh,
83 };
84 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
85 return &modifier;
86 }
87 }
88 } // namespace OHOS::Ace::NG
89