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_relative_container_ffi.h"
17 
18 #include "bridge/declarative_frontend/jsview/models/relative_container_model_impl.h"
19 #include "core/components_ng/pattern/relative_container/relative_container_model_ng.h"
20 
21 using namespace OHOS::Ace;
22 
23 extern "C" {
FfiOHOSAceFrameworkRelativeContainerCreate()24     void FfiOHOSAceFrameworkRelativeContainerCreate()
25     {
26         RelativeContainerModel::GetInstance()->Create();
27     }
28 
FfiOHOSAceFrameworkReletiveContainerGuideLine(CGuideLineInfos guidelines)29     void FfiOHOSAceFrameworkReletiveContainerGuideLine(CGuideLineInfos guidelines)
30     {
31         std::vector<GuidelineInfo> guidelineInfos;
32         if (guidelines.guideline == nullptr || guidelines.size == 0) {
33             RelativeContainerModel::GetInstance()->SetGuideline(guidelineInfos);
34             return;
35         }
36 
37         for (int64_t i = 0; i < guidelines.size; i++) {
38             GuidelineInfo guidelineInfoItem;
39             CGuideLineStyle guideline = guidelines.guideline[i];
40             guidelineInfoItem.id = std::string(guideline.id);
41             guidelineInfoItem.direction = static_cast<LineDirection>(guideline.direction);
42             // parse dimension
43             if (guideline.position.start.unit > 0) {
44                 guidelineInfoItem.start = CalcDimension(guideline.position.start.value,
45                     static_cast<DimensionUnit>(guideline.position.start.unit));
46             }
47             if (guideline.position.end.unit > 0) {
48                 guidelineInfoItem.end = CalcDimension(guideline.position.end.value,
49                     static_cast<DimensionUnit>(guideline.position.end.unit));
50             }
51             guidelineInfos.emplace_back(guidelineInfoItem);
52         }
53         RelativeContainerModel::GetInstance()->SetGuideline(guidelineInfos);
54     }
55 
FfiOHOSAceFrameworkReletiveContainerBarrier(CBarrierInfos barriers)56     void FfiOHOSAceFrameworkReletiveContainerBarrier(CBarrierInfos barriers)
57     {
58         std::vector<BarrierInfo> barrierInfos;
59         if (barriers.barrier == nullptr || barriers.size == 0) {
60             RelativeContainerModel::GetInstance()->SetBarrier(barrierInfos);
61             return;
62         }
63         for (int64_t i = 0; i < barriers.size; i++) {
64             BarrierInfo barrierInfoItem;
65             CBarrierStyle barrier = barriers.barrier[i];
66             barrierInfoItem.id = std::string(barrier.id);
67             barrierInfoItem.direction = static_cast<BarrierDirection>(barrier.direction);
68             for (int64_t j = 0; j < barrier.referencedId.size; j++) {
69                 if (barrier.referencedId.head[j] != nullptr) {
70                     barrierInfoItem.referencedId.emplace_back(std::string(barrier.referencedId.head[j]));
71                 }
72             }
73             barrierInfos.emplace_back(barrierInfoItem);
74         }
75         RelativeContainerModel::GetInstance()->SetBarrier(barrierInfos);
76     }
77 }
78