| /**************************************************************************\ |
| * |
| * 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 |