1 /*
2 * Copyright (c) 2021 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 "c/drawing_pen.h"
17
18 #include "draw/pen.h"
19
20 using namespace OHOS;
21 using namespace Rosen;
22 using namespace Drawing;
23
CastToPen(OH_Drawing_Pen * cPen)24 static Pen* CastToPen(OH_Drawing_Pen* cPen)
25 {
26 return reinterpret_cast<Pen*>(cPen);
27 }
28
CastToPen(const OH_Drawing_Pen & cPen)29 static const Pen& CastToPen(const OH_Drawing_Pen& cPen)
30 {
31 return reinterpret_cast<const Pen&>(cPen);
32 }
33
CapCastToCCap(Pen::CapStyle cap)34 static OH_Drawing_PenLineCapStyle CapCastToCCap(Pen::CapStyle cap)
35 {
36 OH_Drawing_PenLineCapStyle cCap = LINE_FLAT_CAP;
37 switch (cap) {
38 case Pen::CapStyle::FLAT_CAP:
39 cCap = LINE_FLAT_CAP;
40 break;
41 case Pen::CapStyle::SQUARE_CAP:
42 cCap = LINE_SQUARE_CAP;
43 break;
44 case Pen::CapStyle::ROUND_CAP:
45 cCap = LINE_ROUND_CAP;
46 break;
47 default:
48 break;
49 }
50 return cCap;
51 }
52
CCapCastToCap(OH_Drawing_PenLineCapStyle cCap)53 static Pen::CapStyle CCapCastToCap(OH_Drawing_PenLineCapStyle cCap)
54 {
55 Pen::CapStyle cap = Pen::CapStyle::FLAT_CAP;
56 switch (cCap) {
57 case LINE_FLAT_CAP:
58 cap = Pen::CapStyle::FLAT_CAP;
59 break;
60 case LINE_SQUARE_CAP:
61 cap = Pen::CapStyle::SQUARE_CAP;
62 break;
63 case LINE_ROUND_CAP:
64 cap = Pen::CapStyle::ROUND_CAP;
65 break;
66 default:
67 break;
68 }
69 return cap;
70 }
71
JoinCastToCJoin(Pen::JoinStyle join)72 static OH_Drawing_PenLineJoinStyle JoinCastToCJoin(Pen::JoinStyle join)
73 {
74 OH_Drawing_PenLineJoinStyle cJoin = LINE_MITER_JOIN;
75 switch (join) {
76 case Pen::JoinStyle::MITER_JOIN:
77 cJoin = LINE_MITER_JOIN;
78 break;
79 case Pen::JoinStyle::ROUND_JOIN:
80 cJoin = LINE_ROUND_JOIN;
81 break;
82 case Pen::JoinStyle::BEVEL_JOIN:
83 cJoin = LINE_BEVEL_JOIN;
84 break;
85 default:
86 break;
87 }
88 return cJoin;
89 }
90
CJoinCastToJoin(OH_Drawing_PenLineJoinStyle cJoin)91 static Pen::JoinStyle CJoinCastToJoin(OH_Drawing_PenLineJoinStyle cJoin)
92 {
93 Pen::JoinStyle join = Pen::JoinStyle::MITER_JOIN;
94 switch (cJoin) {
95 case LINE_MITER_JOIN:
96 join = Pen::JoinStyle::MITER_JOIN;
97 break;
98 case LINE_ROUND_JOIN:
99 join = Pen::JoinStyle::ROUND_JOIN;
100 break;
101 case LINE_BEVEL_JOIN:
102 join = Pen::JoinStyle::BEVEL_JOIN;
103 break;
104 default:
105 break;
106 }
107 return join;
108 }
109
OH_Drawing_PenCreate()110 OH_Drawing_Pen* OH_Drawing_PenCreate()
111 {
112 return (OH_Drawing_Pen*)new Pen;
113 }
114
OH_Drawing_PenDestroy(OH_Drawing_Pen * cPen)115 void OH_Drawing_PenDestroy(OH_Drawing_Pen* cPen)
116 {
117 delete CastToPen(cPen);
118 }
119
OH_Drawing_PenIsAntiAlias(const OH_Drawing_Pen * cPen)120 bool OH_Drawing_PenIsAntiAlias(const OH_Drawing_Pen* cPen)
121 {
122 return CastToPen(*cPen).IsAntiAlias();
123 }
124
OH_Drawing_PenSetAntiAlias(OH_Drawing_Pen * cPen,bool aa)125 void OH_Drawing_PenSetAntiAlias(OH_Drawing_Pen* cPen, bool aa)
126 {
127 CastToPen(cPen)->SetAntiAlias(aa);
128 }
129
OH_Drawing_PenGetColor(const OH_Drawing_Pen * cPen)130 uint32_t OH_Drawing_PenGetColor(const OH_Drawing_Pen* cPen)
131 {
132 return CastToPen(*cPen).GetColor().CastToColorQuad();
133 }
134
OH_Drawing_PenSetColor(OH_Drawing_Pen * cPen,uint32_t color)135 void OH_Drawing_PenSetColor(OH_Drawing_Pen* cPen, uint32_t color)
136 {
137 CastToPen(cPen)->SetColor(color);
138 }
139
OH_Drawing_PenGetWidth(const OH_Drawing_Pen * cPen)140 float OH_Drawing_PenGetWidth(const OH_Drawing_Pen* cPen)
141 {
142 return CastToPen(*cPen).GetWidth();
143 }
144
OH_Drawing_PenSetWidth(OH_Drawing_Pen * cPen,float width)145 void OH_Drawing_PenSetWidth(OH_Drawing_Pen* cPen, float width)
146 {
147 CastToPen(cPen)->SetWidth(width);
148 }
149
OH_Drawing_PenGetMiterLimit(const OH_Drawing_Pen * cPen)150 float OH_Drawing_PenGetMiterLimit(const OH_Drawing_Pen* cPen)
151 {
152 return CastToPen(*cPen).GetMiterLimit();
153 }
154
OH_Drawing_PenSetMiterLimit(OH_Drawing_Pen * cPen,float miter)155 void OH_Drawing_PenSetMiterLimit(OH_Drawing_Pen* cPen, float miter)
156 {
157 CastToPen(cPen)->SetMiterLimit(miter);
158 }
159
OH_Drawing_PenGetCap(const OH_Drawing_Pen * cPen)160 OH_Drawing_PenLineCapStyle OH_Drawing_PenGetCap(const OH_Drawing_Pen* cPen)
161 {
162 Pen::CapStyle cap = CastToPen(*cPen).GetCapStyle();
163 OH_Drawing_PenLineCapStyle cCap = CapCastToCCap(cap);
164 return cCap;
165 }
166
OH_Drawing_PenSetCap(OH_Drawing_Pen * cPen,OH_Drawing_PenLineCapStyle cCap)167 void OH_Drawing_PenSetCap(OH_Drawing_Pen* cPen, OH_Drawing_PenLineCapStyle cCap)
168 {
169 Pen::CapStyle cap = CCapCastToCap(cCap);
170 CastToPen(cPen)->SetCapStyle(cap);
171 }
172
OH_Drawing_PenGetJoin(const OH_Drawing_Pen * cPen)173 OH_Drawing_PenLineJoinStyle OH_Drawing_PenGetJoin(const OH_Drawing_Pen* cPen)
174 {
175 Pen::JoinStyle join = CastToPen(*cPen).GetJoinStyle();
176 OH_Drawing_PenLineJoinStyle cJoin = JoinCastToCJoin(join);
177 return cJoin;
178 }
179
OH_Drawing_PenSetJoin(OH_Drawing_Pen * cPen,OH_Drawing_PenLineJoinStyle cJoin)180 void OH_Drawing_PenSetJoin(OH_Drawing_Pen* cPen, OH_Drawing_PenLineJoinStyle cJoin)
181 {
182 Pen::JoinStyle join = CJoinCastToJoin(cJoin);
183 CastToPen(cPen)->SetJoinStyle(join);
184 }
185