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 }