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 "bridge/cj_frontend/interfaces/cj_ffi/cj_stack_ffi.h"
17
18 #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h"
19 #include "core/components_ng/base/view_abstract.h"
20 #include "core/components_ng/pattern/stack/stack_model_ng.h"
21
22 using namespace OHOS::Ace;
23 using namespace OHOS::Ace::Framework;
24
25 namespace {
26 const std::array<Alignment, 9> ALIGNMENT_ARR {Alignment::TOP_LEFT, Alignment::TOP_CENTER, Alignment::TOP_RIGHT,
27 Alignment::CENTER_LEFT, Alignment::CENTER, Alignment::CENTER_RIGHT, Alignment::BOTTOM_LEFT,
28 Alignment::BOTTOM_CENTER, Alignment::BOTTOM_RIGHT };
29 const std::vector<StackFit> STACK_FITS = {
30 StackFit::KEEP,
31 StackFit::STRETCH,
32 StackFit::INHERIT,
33 StackFit::FIRST_CHILD
34 };
35 const std::vector<Overflow> OVERFLOWS = {
36 Overflow::CLIP,
37 Overflow::OBSERVABLE,
38 Overflow::SCROLL,
39 Overflow::FORCE_CLIP
40 };
41 } // namespace
42
43 extern "C" {
FfiOHOSAceFrameworkStackCreate(int32_t value)44 void FfiOHOSAceFrameworkStackCreate(int32_t value)
45 {
46 if (!Utils::CheckParamsValid(value, ALIGNMENT_ARR.size())) {
47 LOGE("invalid value for overflow");
48 return;
49 }
50 StackModel::GetInstance()->Create(ALIGNMENT_ARR[value]);
51 }
52
FfiOHOSAceFrameworkStackSetOverflow(int32_t value)53 void FfiOHOSAceFrameworkStackSetOverflow(int32_t value)
54 {
55 if (!Utils::CheckParamsValid(value, OVERFLOWS.size())) {
56 LOGE("invalid value for overflow");
57 return;
58 }
59 StackModel::GetInstance()->SetOverflow(OVERFLOWS[value]);
60 }
61
FfiOHOSAceFrameworkStackSetStackFit(int32_t value)62 void FfiOHOSAceFrameworkStackSetStackFit(int32_t value)
63 {
64 if (!Utils::CheckParamsValid(value, STACK_FITS.size())) {
65 LOGE("invalid value for stack fit");
66 return;
67 }
68 StackModel::GetInstance()->SetStackFit(STACK_FITS[value]);
69 }
70
FfiOHOSAceFrameworkStackSetAlignment(int32_t value)71 void FfiOHOSAceFrameworkStackSetAlignment(int32_t value)
72 {
73 if (!Utils::CheckParamsValid(value, ALIGNMENT_ARR.size())) {
74 LOGE("invalid value for stack fit");
75 return;
76 }
77 StackModel::GetInstance()->SetAlignment(ALIGNMENT_ARR[value]);
78 }
79
FfiOHOSAceFrameworkStackSetWidth(double value,int32_t unit)80 void FfiOHOSAceFrameworkStackSetWidth(double value, int32_t unit)
81 {
82 Dimension width(value, static_cast<DimensionUnit>(unit));
83
84 if (LessNotEqual(width.Value(), 0.0)) {
85 width.SetValue(0.0);
86 }
87 NG::ViewAbstract::SetWidth(NG::CalcLength(width));
88 StackModel::GetInstance()->SetHasHeight();
89 }
90
FfiOHOSAceFrameworkStackSetHeight(double value,int32_t unit)91 void FfiOHOSAceFrameworkStackSetHeight(double value, int32_t unit)
92 {
93 Dimension height(value, static_cast<DimensionUnit>(unit));
94
95 if (LessNotEqual(height.Value(), 0.0)) {
96 height.SetValue(0.0);
97 }
98 NG::ViewAbstract::SetHeight(NG::CalcLength(height));
99 StackModel::GetInstance()->SetHasHeight();
100 }
101
FfiOHOSAceFrameworkStackSetSize(double width,int32_t widthUnit,double height,int32_t heightUnit)102 void FfiOHOSAceFrameworkStackSetSize(double width, int32_t widthUnit, double height, int32_t heightUnit)
103 {
104 Dimension widthDime(width, static_cast<DimensionUnit>(widthUnit));
105 Dimension heightDime(height, static_cast<DimensionUnit>(heightUnit));
106
107 if (LessNotEqual(widthDime.Value(), 0.0)) {
108 widthDime.SetValue(0.0);
109 }
110 if (LessNotEqual(heightDime.Value(), 0.0)) {
111 heightDime.SetValue(0.0);
112 }
113 NG::ViewAbstract::SetWidth(NG::CalcLength(widthDime));
114 NG::ViewAbstract::SetHeight(NG::CalcLength(heightDime));
115 StackModel::GetInstance()->SetHasHeight();
116 StackModel::GetInstance()->SetHasHeight();
117 }
118 }
119