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 18inline 19CustomLineCap::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 40inline 41CustomLineCap::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 50inline 51CustomLineCap::~CustomLineCap() 52{ 53 DllExports::GdipDeleteCustomLineCap(nativeCap); 54} 55 56inline Status 57CustomLineCap::SetStrokeCaps( 58 IN LineCap startCap, 59 IN LineCap endCap) 60{ 61 return SetStatus(DllExports::GdipSetCustomLineCapStrokeCaps(nativeCap, 62 startCap, endCap)); 63} 64 65inline Status 66CustomLineCap::GetStrokeCaps( 67 OUT LineCap* startCap, 68 OUT LineCap* endCap) const 69{ 70 return SetStatus(DllExports::GdipGetCustomLineCapStrokeCaps(nativeCap, 71 startCap, endCap)); 72} 73 74inline Status 75CustomLineCap::SetStrokeJoin( 76 IN LineJoin lineJoin) 77{ 78 return SetStatus(DllExports::GdipSetCustomLineCapStrokeJoin(nativeCap, lineJoin)); 79} 80 81inline LineJoin 82CustomLineCap::GetStrokeJoin() const 83{ 84 LineJoin lineJoin; 85 86 SetStatus(DllExports::GdipGetCustomLineCapStrokeJoin(nativeCap, &lineJoin)); 87 88 return lineJoin; 89} 90 91inline Status 92CustomLineCap::SetBaseCap(IN LineCap baseCap) 93{ 94 return SetStatus(DllExports::GdipSetCustomLineCapBaseCap(nativeCap, baseCap)); 95} 96 97inline LineCap 98CustomLineCap::GetBaseCap() const 99{ 100 LineCap baseCap; 101 SetStatus(DllExports::GdipGetCustomLineCapBaseCap(nativeCap, &baseCap)); 102 103 return baseCap; 104} 105 106inline Status 107CustomLineCap::SetBaseInset(IN REAL inset) 108{ 109 return SetStatus(DllExports::GdipSetCustomLineCapBaseInset(nativeCap, inset)); 110} 111 112inline REAL 113CustomLineCap::GetBaseInset() const 114{ 115 REAL inset; 116 SetStatus(DllExports::GdipGetCustomLineCapBaseInset(nativeCap, &inset)); 117 118 return inset; 119} 120 121 122inline Status 123CustomLineCap::SetWidthScale(IN REAL widthScale) 124{ 125 return SetStatus(DllExports::GdipSetCustomLineCapWidthScale(nativeCap, widthScale)); 126} 127 128inline REAL 129CustomLineCap::GetWidthScale() const 130{ 131 REAL widthScale; 132 SetStatus(DllExports::GdipGetCustomLineCapWidthScale(nativeCap, &widthScale)); 133 134 return widthScale; 135} 136 137inline CustomLineCap* 138CustomLineCap::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 158class AdjustableArrowCap : public CustomLineCap 159{ 160public: 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 175 Status SetHeight(IN REAL height) 176 { 177 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; 178 return SetStatus(DllExports::GdipSetAdjustableArrowCapHeight( 179 cap, height)); 180 } 181 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 192 Status SetWidth(IN REAL width) 193 { 194 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; 195 return SetStatus(DllExports::GdipSetAdjustableArrowCapWidth( 196 cap, width)); 197 } 198 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 209 Status SetMiddleInset(IN REAL middleInset) 210 { 211 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; 212 return SetStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset( 213 cap, middleInset)); 214 } 215 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 226 Status SetFillState(IN BOOL isFilled) 227 { 228 GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; 229 return SetStatus(DllExports::GdipSetAdjustableArrowCapFillState( 230 cap, isFilled)); 231 } 232 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 245private: 246 AdjustableArrowCap(const AdjustableArrowCap &); 247 AdjustableArrowCap& operator=(const AdjustableArrowCap &); 248 249#endif 250 251}; 252 253#endif 254