master
  1/*
  2 * gdipluslinecaps.h
  3 *
  4 * GDI+ AdjustableArrowCap class
  5 *
  6 * This file is part of the w32api package.
  7 *
  8 * Contributors:
  9 *   Created by Markus Koenig <markus@stber-koenig.de>
 10 *
 11 * THIS SOFTWARE IS NOT COPYRIGHTED
 12 *
 13 * This source code is offered for use in the public domain. You may
 14 * use, modify or distribute it freely.
 15 *
 16 * This code is distributed in the hope that it will be useful but
 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 18 * DISCLAIMED. This includes but is not limited to warranties of
 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 20 *
 21 */
 22
 23#ifndef __GDIPLUS_LINECAPS_H
 24#define __GDIPLUS_LINECAPS_H
 25#if __GNUC__ >=3
 26#pragma GCC system_header
 27#endif
 28
 29#ifndef __cplusplus
 30#error "A C++ compiler is required to include gdipluslinecaps.h."
 31#endif
 32
 33class AdjustableArrowCap: public CustomLineCap
 34{
 35public:
 36	AdjustableArrowCap(REAL height, REAL width, BOOL isFilled):
 37		CustomLineCap(NULL, Ok)
 38	{
 39		GpAdjustableArrowCap *nativeAdjustableArrowCap = NULL;
 40		lastStatus = DllExports::GdipCreateAdjustableArrowCap(
 41				height, width, isFilled,
 42				&nativeAdjustableArrowCap);
 43		nativeCustomLineCap = nativeAdjustableArrowCap;
 44	}
 45	virtual ~AdjustableArrowCap()
 46	{
 47	}
 48	virtual AdjustableArrowCap* Clone() const
 49	{
 50		GpCustomLineCap *cloneCustomLineCap = NULL;
 51		Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
 52				nativeCustomLineCap, &cloneCustomLineCap));
 53		if (status == Ok) {
 54			AdjustableArrowCap *result = new AdjustableArrowCap(
 55					cloneCustomLineCap, lastStatus);
 56			if (!result) {
 57				DllExports::GdipDeleteCustomLineCap(
 58						cloneCustomLineCap);
 59				lastStatus = OutOfMemory;
 60			}
 61			return result;
 62		} else {
 63			return NULL;
 64		}
 65	}
 66
 67	REAL GetHeight() const
 68	{
 69		REAL result = 0.0f;
 70		updateStatus(DllExports::GdipGetAdjustableArrowCapHeight(
 71				(GpAdjustableArrowCap*) nativeCustomLineCap,
 72				&result));
 73		return result;
 74	}
 75	REAL GetMiddleInset() const
 76	{
 77		REAL result = 0.0f;
 78		updateStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset(
 79				(GpAdjustableArrowCap*) nativeCustomLineCap,
 80				&result));
 81		return result;
 82	}
 83	REAL GetWidth() const
 84	{
 85		REAL result = 0.0f;
 86		updateStatus(DllExports::GdipGetAdjustableArrowCapWidth(
 87				(GpAdjustableArrowCap*) nativeCustomLineCap,
 88				&result));
 89		return result;
 90	}
 91	BOOL IsFilled() const
 92	{
 93		BOOL result = FALSE;
 94		updateStatus(DllExports::GdipGetAdjustableArrowCapFillState(
 95				(GpAdjustableArrowCap*) nativeCustomLineCap,
 96				&result));
 97		return result;
 98	}
 99	Status SetFillState(BOOL isFilled)
100	{
101		return updateStatus(DllExports::GdipSetAdjustableArrowCapFillState(
102				(GpAdjustableArrowCap*) nativeCustomLineCap,
103				isFilled));
104	}
105	Status SetHeight(REAL height)
106	{
107		return updateStatus(DllExports::GdipSetAdjustableArrowCapHeight(
108				(GpAdjustableArrowCap*) nativeCustomLineCap,
109				height));
110	}
111	Status SetMiddleInset(REAL middleInset)
112	{
113		return updateStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset(
114				(GpAdjustableArrowCap*) nativeCustomLineCap,
115				middleInset));
116	}
117	Status SetWidth(REAL width)
118	{
119		return updateStatus(DllExports::GdipSetAdjustableArrowCapWidth(
120				(GpAdjustableArrowCap*) nativeCustomLineCap,
121				width));
122	}
123
124private:
125	AdjustableArrowCap(GpCustomLineCap *customLineCap, Status status):
126		CustomLineCap(customLineCap, status) {}
127	AdjustableArrowCap(const AdjustableArrowCap&);
128	AdjustableArrowCap& operator=(const AdjustableArrowCap&);
129};
130
131#endif /* __GDIPLUS_LINECAPS_H */