• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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