1 /*
2  * Copyright (c) 2022 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 "core/components/common/properties/border_image.h"
17 
18 namespace OHOS::Ace {
19 
SetEdgeSlice(BorderImageDirection direction,const Dimension & sliceDimension)20 void BorderImage::SetEdgeSlice(BorderImageDirection direction, const Dimension& sliceDimension)
21 {
22     switch (direction) {
23         case BorderImageDirection::TOP:
24             borderImageTop_.SetBorderImageSlice(sliceDimension);
25             break;
26         case BorderImageDirection::BOTTOM:
27             borderImageBottom_.SetBorderImageSlice(sliceDimension);
28             break;
29         case BorderImageDirection::LEFT:
30             borderImageLeft_.SetBorderImageSlice(sliceDimension);
31             break;
32         case BorderImageDirection::RIGHT:
33             borderImageRight_.SetBorderImageSlice(sliceDimension);
34             break;
35         case BorderImageDirection::START:
36             if (!borderImageStart_.has_value()) {
37                 borderImageStart_ = BorderImageEdge();
38             }
39             borderImageStart_->SetBorderImageSlice(sliceDimension);
40             break;
41         case BorderImageDirection::END:
42             if (!borderImageEnd_.has_value()) {
43                 borderImageEnd_ = BorderImageEdge();
44             }
45             borderImageEnd_->SetBorderImageSlice(sliceDimension);
46             break;
47         default:
48             LOGE("Unsupported border image direction");
49     }
50 }
51 
SetEdgeOutset(BorderImageDirection direction,const Dimension & outsetDimension)52 void BorderImage::SetEdgeOutset(BorderImageDirection direction, const Dimension& outsetDimension)
53 {
54     switch (direction) {
55         case BorderImageDirection::TOP:
56             borderImageTop_.SetBorderImageOutset(outsetDimension);
57             break;
58         case BorderImageDirection::BOTTOM:
59             borderImageBottom_.SetBorderImageOutset(outsetDimension);
60             break;
61         case BorderImageDirection::LEFT:
62             borderImageLeft_.SetBorderImageOutset(outsetDimension);
63             break;
64         case BorderImageDirection::RIGHT:
65             borderImageRight_.SetBorderImageOutset(outsetDimension);
66             break;
67         case BorderImageDirection::START:
68             if (!borderImageStart_.has_value()) {
69                 borderImageStart_ = BorderImageEdge();
70             }
71             borderImageStart_->SetBorderImageOutset(outsetDimension);
72             break;
73         case BorderImageDirection::END:
74             if (!borderImageEnd_.has_value()) {
75                 borderImageEnd_ = BorderImageEdge();
76             }
77             borderImageEnd_->SetBorderImageOutset(outsetDimension);
78             break;
79         default:
80             LOGE("Unsupported border image direction");
81     }
82 }
83 
SetEdgeWidth(BorderImageDirection direction,const Dimension & widthDimension)84 void BorderImage::SetEdgeWidth(BorderImageDirection direction, const Dimension& widthDimension)
85 {
86     switch (direction) {
87         case BorderImageDirection::TOP:
88             borderImageTop_.SetBorderImageWidth(widthDimension);
89             break;
90         case BorderImageDirection::BOTTOM:
91             borderImageBottom_.SetBorderImageWidth(widthDimension);
92             break;
93         case BorderImageDirection::LEFT:
94             borderImageLeft_.SetBorderImageWidth(widthDimension);
95             break;
96         case BorderImageDirection::RIGHT:
97             borderImageRight_.SetBorderImageWidth(widthDimension);
98             break;
99         case BorderImageDirection::START:
100             if (!borderImageStart_.has_value()) {
101                 borderImageStart_ = BorderImageEdge();
102             }
103             borderImageStart_->SetBorderImageWidth(widthDimension);
104             break;
105         case BorderImageDirection::END:
106             if (!borderImageEnd_.has_value()) {
107                 borderImageEnd_ = BorderImageEdge();
108             }
109             borderImageEnd_->SetBorderImageWidth(widthDimension);
110             break;
111         default:
112             LOGE("Unsupported border image direction");
113     }
114     if (!hasBorderImageWidth_ && GreatNotEqual(widthDimension.Value(), 0.0)) {
115         hasBorderImageWidth_ = true;
116     }
117 }
118 
GetBorderImageEdge(BorderImageDirection direction)119 BorderImageEdge& BorderImage::GetBorderImageEdge(BorderImageDirection direction)
120 {
121     switch (direction) {
122         case BorderImageDirection::TOP:
123             return borderImageTop_;
124         case BorderImageDirection::BOTTOM:
125             return borderImageBottom_;
126         case BorderImageDirection::LEFT:
127             return borderImageLeft_;
128         case BorderImageDirection::RIGHT:
129             return borderImageRight_;
130         default:
131             LOGE("Unsupported border image direction");
132             return borderImageLeft_;
133     }
134 }
135 }