246 lines
5.8 KiB
C++
246 lines
5.8 KiB
C++
/**************************************************************************\
|
|
*
|
|
* Copyright (c) 2000, Microsoft Corp. All Rights Reserved.
|
|
*
|
|
* Abstract:
|
|
*
|
|
* APIs for Custom Line Caps
|
|
*
|
|
* Revision History:
|
|
*
|
|
* 02/23/2000 ikkof
|
|
* Created it.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
#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;
|
|
}
|
|
};
|
|
|
|
#endif
|