1 /**************************************************************************\
2 *
3 * Copyright (c) 2000, Microsoft Corp. All Rights Reserved.
4 *
5 * Module Name:
6 *
7 * GdiplusLineCaps.h
8 *
9 * Abstract:
10 *
11 * APIs for Custom Line Caps
12 *
13 \**************************************************************************/
14
15 #ifndef _GDIPLUSLINECAPS_H
16 #define _GDIPLUSLINECAPS_H
17
18 inline
CustomLineCap(IN const GraphicsPath * fillPath,IN const GraphicsPath * strokePath,IN LineCap baseCap,IN REAL baseInset)19 CustomLineCap::CustomLineCap(
20 IN const GraphicsPath* fillPath,
21 IN const GraphicsPath* strokePath,
22 IN LineCap baseCap,
23 IN REAL baseInset
24 )
25 {
26 nativeCap = NULL;
27 GpPath* nativeFillPath = NULL;
28 GpPath* nativeStrokePath = NULL;
29
30 if(fillPath)
31 nativeFillPath = fillPath->nativePath;
32 if(strokePath)
33 nativeStrokePath = strokePath->nativePath;
34
35 lastResult = DllExports::GdipCreateCustomLineCap(
36 nativeFillPath, nativeStrokePath,
37 baseCap, baseInset, &nativeCap);
38 }
39
40 inline
CustomLineCap()41 CustomLineCap::CustomLineCap()
42 {
43 // This is used for default constructor for subclasses.
44 // So don't create a nativeCap.
45
46 nativeCap = NULL;
47 lastResult = Ok;
48 }
49
50 inline
~CustomLineCap()51 CustomLineCap::~CustomLineCap()
52 {
53 DllExports::GdipDeleteCustomLineCap(nativeCap);
54 }
55
56 inline Status
SetStrokeCaps(IN LineCap startCap,IN LineCap endCap)57 CustomLineCap::SetStrokeCaps(
58 IN LineCap startCap,
59 IN LineCap endCap)
60 {
61 return SetStatus(DllExports::GdipSetCustomLineCapStrokeCaps(nativeCap,
62 startCap, endCap));
63 }
64
65 inline Status
GetStrokeCaps(OUT LineCap * startCap,OUT LineCap * endCap)66 CustomLineCap::GetStrokeCaps(
67 OUT LineCap* startCap,
68 OUT LineCap* endCap) const
69 {
70 return SetStatus(DllExports::GdipGetCustomLineCapStrokeCaps(nativeCap,
71 startCap, endCap));
72 }
73
74 inline Status
SetStrokeJoin(IN LineJoin lineJoin)75 CustomLineCap::SetStrokeJoin(
76 IN LineJoin lineJoin)
77 {
78 return SetStatus(DllExports::GdipSetCustomLineCapStrokeJoin(nativeCap, lineJoin));
79 }
80
81 inline LineJoin
GetStrokeJoin()82 CustomLineCap::GetStrokeJoin() const
83 {
84 LineJoin lineJoin;
85
86 SetStatus(DllExports::GdipGetCustomLineCapStrokeJoin(nativeCap, &lineJoin));
87
88 return lineJoin;
89 }
90
91 inline Status
SetBaseCap(IN LineCap baseCap)92 CustomLineCap::SetBaseCap(IN LineCap baseCap)
93 {
94 return SetStatus(DllExports::GdipSetCustomLineCapBaseCap(nativeCap, baseCap));
95 }
96
97 inline LineCap
GetBaseCap()98 CustomLineCap::GetBaseCap() const
99 {
100 LineCap baseCap;
101 SetStatus(DllExports::GdipGetCustomLineCapBaseCap(nativeCap, &baseCap));
102
103 return baseCap;
104 }
105
106 inline Status
SetBaseInset(IN REAL inset)107 CustomLineCap::SetBaseInset(IN REAL inset)
108 {
109 return SetStatus(DllExports::GdipSetCustomLineCapBaseInset(nativeCap, inset));
110 }
111
112 inline REAL
GetBaseInset()113 CustomLineCap::GetBaseInset() const
114 {
115 REAL inset;
116 SetStatus(DllExports::GdipGetCustomLineCapBaseInset(nativeCap, &inset));
117
118 return inset;
119 }
120
121
122 inline Status
SetWidthScale(IN REAL widthScale)123 CustomLineCap::SetWidthScale(IN REAL widthScale)
124 {
125 return SetStatus(DllExports::GdipSetCustomLineCapWidthScale(nativeCap, widthScale));
126 }
127
128 inline REAL
GetWidthScale()129 CustomLineCap::GetWidthScale() const
130 {
131 REAL widthScale;
132 SetStatus(DllExports::GdipGetCustomLineCapWidthScale(nativeCap, &widthScale));
133
134 return widthScale;
135 }
136
137 inline CustomLineCap*
Clone()138 CustomLineCap::Clone() const
139 {
140 GpCustomLineCap *newNativeLineCap = NULL;
141
142 SetStatus(DllExports::GdipCloneCustomLineCap(nativeCap, &newNativeLineCap));
143
144 if (lastResult == Ok)
145 {
146 CustomLineCap *newLineCap = new CustomLineCap(newNativeLineCap, lastResult);
147 if (newLineCap == NULL)
148 {
149 SetStatus(DllExports::GdipDeleteCustomLineCap(newNativeLineCap));
150 }
151
152 return newLineCap;
153 }
154
155 return NULL;
156 }
157
158 class AdjustableArrowCap : public CustomLineCap
159 {
160 public:
161
162 AdjustableArrowCap(
163 IN REAL height,
164 IN REAL width,
165 IN BOOL isFilled = TRUE
166 )
167 {
168 GpAdjustableArrowCap* cap = NULL;
169
170 lastResult = DllExports::GdipCreateAdjustableArrowCap(
171 height, width, isFilled, &cap);
172 SetNativeCap(cap);
173 }
174
SetHeight(IN REAL height)175 Status SetHeight(IN REAL height)
176 {
177 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
178 return SetStatus(DllExports::GdipSetAdjustableArrowCapHeight(
179 cap, height));
180 }
181
GetHeight()182 REAL GetHeight() const
183 {
184 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
185 REAL height;
186 SetStatus(DllExports::GdipGetAdjustableArrowCapHeight(
187 cap, &height));
188
189 return height;
190 }
191
SetWidth(IN REAL width)192 Status SetWidth(IN REAL width)
193 {
194 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
195 return SetStatus(DllExports::GdipSetAdjustableArrowCapWidth(
196 cap, width));
197 }
198
GetWidth()199 REAL GetWidth() const
200 {
201 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
202 REAL width;
203 SetStatus(DllExports::GdipGetAdjustableArrowCapWidth(
204 cap, &width));
205
206 return width;
207 }
208
SetMiddleInset(IN REAL middleInset)209 Status SetMiddleInset(IN REAL middleInset)
210 {
211 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
212 return SetStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset(
213 cap, middleInset));
214 }
215
GetMiddleInset()216 REAL GetMiddleInset() const
217 {
218 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
219 REAL middleInset;
220 SetStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset(
221 cap, &middleInset));
222
223 return middleInset;
224 }
225
SetFillState(IN BOOL isFilled)226 Status SetFillState(IN BOOL isFilled)
227 {
228 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
229 return SetStatus(DllExports::GdipSetAdjustableArrowCapFillState(
230 cap, isFilled));
231 }
232
IsFilled()233 BOOL IsFilled() const
234 {
235 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
236 BOOL isFilled;
237 SetStatus(DllExports::GdipGetAdjustableArrowCapFillState(
238 cap, &isFilled));
239
240 return isFilled;
241 }
242
243 #ifdef DCR_USE_NEW_250932
244
245 private:
246 AdjustableArrowCap(const AdjustableArrowCap &);
247 AdjustableArrowCap& operator=(const AdjustableArrowCap &);
248
249 #endif
250
251 };
252
253 #endif
254