/**************************************************************************\ * * Copyright (c) 2000, Microsoft Corp. All Rights Reserved. * * Module Name: * * GdiplusLineCaps.h * * Abstract: * * APIs for Custom Line Caps * \**************************************************************************/ #ifndef _GDIPLUSLINECAPS_H #define _GDIPLUSLINECAPS_H inline CustomLineCap::CustomLineCap( IN const GraphicsPath* fillPath, IN const GraphicsPath* strokePath, IN LineCap baseCap, IN REAL baseInset ) { nativeCap = NULL; GpPath* nativeFillPath = NULL; GpPath* nativeStrokePath = NULL; if(fillPath) nativeFillPath = fillPath->nativePath; if(strokePath) nativeStrokePath = strokePath->nativePath; lastResult = DllExports::GdipCreateCustomLineCap( nativeFillPath, nativeStrokePath, baseCap, baseInset, &nativeCap); } inline CustomLineCap::CustomLineCap() { // This is used for default constructor for subclasses. // So don't create a nativeCap. nativeCap = NULL; lastResult = Ok; } inline CustomLineCap::~CustomLineCap() { DllExports::GdipDeleteCustomLineCap(nativeCap); } inline Status CustomLineCap::SetStrokeCaps( IN LineCap startCap, IN LineCap endCap) { return SetStatus(DllExports::GdipSetCustomLineCapStrokeCaps(nativeCap, startCap, endCap)); } inline Status CustomLineCap::GetStrokeCaps( OUT LineCap* startCap, OUT LineCap* endCap) const { return SetStatus(DllExports::GdipGetCustomLineCapStrokeCaps(nativeCap, startCap, endCap)); } inline Status CustomLineCap::SetStrokeJoin( IN LineJoin lineJoin) { return SetStatus(DllExports::GdipSetCustomLineCapStrokeJoin(nativeCap, lineJoin)); } inline LineJoin CustomLineCap::GetStrokeJoin() const { LineJoin lineJoin; SetStatus(DllExports::GdipGetCustomLineCapStrokeJoin(nativeCap, &lineJoin)); return lineJoin; } inline Status CustomLineCap::SetBaseCap(IN LineCap baseCap) { return SetStatus(DllExports::GdipSetCustomLineCapBaseCap(nativeCap, baseCap)); } inline LineCap CustomLineCap::GetBaseCap() const { LineCap baseCap; SetStatus(DllExports::GdipGetCustomLineCapBaseCap(nativeCap, &baseCap)); return baseCap; } inline Status CustomLineCap::SetBaseInset(IN REAL inset) { return SetStatus(DllExports::GdipSetCustomLineCapBaseInset(nativeCap, inset)); } inline REAL CustomLineCap::GetBaseInset() const { REAL inset; SetStatus(DllExports::GdipGetCustomLineCapBaseInset(nativeCap, &inset)); return inset; } inline Status CustomLineCap::SetWidthScale(IN REAL widthScale) { return SetStatus(DllExports::GdipSetCustomLineCapWidthScale(nativeCap, widthScale)); } inline REAL CustomLineCap::GetWidthScale() const { REAL widthScale; SetStatus(DllExports::GdipGetCustomLineCapWidthScale(nativeCap, &widthScale)); return widthScale; } inline CustomLineCap* CustomLineCap::Clone() const { GpCustomLineCap *newNativeLineCap = NULL; SetStatus(DllExports::GdipCloneCustomLineCap(nativeCap, &newNativeLineCap)); if (lastResult == Ok) { CustomLineCap *newLineCap = new CustomLineCap(newNativeLineCap, lastResult); if (newLineCap == NULL) { SetStatus(DllExports::GdipDeleteCustomLineCap(newNativeLineCap)); } return newLineCap; } return NULL; } class AdjustableArrowCap : public CustomLineCap { public: AdjustableArrowCap( IN REAL height, IN REAL width, IN BOOL isFilled = TRUE ) { GpAdjustableArrowCap* cap = NULL; lastResult = DllExports::GdipCreateAdjustableArrowCap( height, width, isFilled, &cap); SetNativeCap(cap); } Status SetHeight(IN REAL height) { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; return SetStatus(DllExports::GdipSetAdjustableArrowCapHeight( cap, height)); } REAL GetHeight() const { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; REAL height; SetStatus(DllExports::GdipGetAdjustableArrowCapHeight( cap, &height)); return height; } Status SetWidth(IN REAL width) { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; return SetStatus(DllExports::GdipSetAdjustableArrowCapWidth( cap, width)); } REAL GetWidth() const { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; REAL width; SetStatus(DllExports::GdipGetAdjustableArrowCapWidth( cap, &width)); return width; } Status SetMiddleInset(IN REAL middleInset) { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; return SetStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset( cap, middleInset)); } REAL GetMiddleInset() const { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; REAL middleInset; SetStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset( cap, &middleInset)); return middleInset; } Status SetFillState(IN BOOL isFilled) { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; return SetStatus(DllExports::GdipSetAdjustableArrowCapFillState( cap, isFilled)); } BOOL IsFilled() const { GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; BOOL isFilled; SetStatus(DllExports::GdipGetAdjustableArrowCapFillState( cap, &isFilled)); return isFilled; } #ifdef DCR_USE_NEW_250932 private: AdjustableArrowCap(const AdjustableArrowCap &); AdjustableArrowCap& operator=(const AdjustableArrowCap &); #endif }; #endif