www.pudn.com > GDIPlusCF.zip > PenPlus.cs
using System;
using System.Collections.Generic;
using System.Text;
using Color = System.Drawing.Color;
namespace OpenNETCF.GDIPlus
{
public class PenPlus: IDisposable
{
public PenPlus(Color color,
float width)
{
Unit unit = Unit. UnitWorld;
nativePen = null;
lastResult = NativeMethods.GdipCreatePen1(color.ToArgb(),
width, unit, out nativePen);
}
public PenPlus(BrushPlus brush,
float width)
{
Unit unit = Unit.UnitWorld;
nativePen = null;
lastResult = NativeMethods.GdipCreatePen2(brush.nativeBrush,
width, unit, out nativePen);
}
~PenPlus()
{
Dispose(true);
}
public PenPlus Clone()
{
GpPen clonePen = null;
lastResult = NativeMethods.GdipClonePen(nativePen, out clonePen);
return new PenPlus(clonePen, lastResult);
}
public GpStatus SetWidth(float width)
{
return SetStatus(NativeMethods.GdipSetPenWidth(nativePen, width));
}
public float GetWidth()
{
float width;
SetStatus(NativeMethods.GdipGetPenWidth(nativePen, out width));
return width;
}
// Set/get line caps: start, end, and dash
// Line cap and join APIs by using LineCap and LineJoin enums.
public GpStatus SetLineCap(LineCap startCap,
LineCap endCap,
DashCap dashCap)
{
return SetStatus(NativeMethods.GdipSetPenLineCap197819(nativePen,
startCap, endCap, dashCap));
}
public GpStatus SetStartCap(LineCap startCap)
{
return SetStatus(NativeMethods.GdipSetPenStartCap(nativePen, startCap));
}
public GpStatus SetEndCap(LineCap endCap)
{
return SetStatus(NativeMethods.GdipSetPenEndCap(nativePen, endCap));
}
//public GpStatus SetDashCap(DashCap dashCap)
//{
// return SetStatus(NativeMethods.GdipSetPenDashCap197819(nativePen,
// dashCap));
//}
public LineCap GetStartCap()
{
LineCap startCap;
SetStatus(NativeMethods.GdipGetPenStartCap(nativePen, out startCap));
return startCap;
}
public LineCap GetEndCap()
{
LineCap endCap;
SetStatus(NativeMethods.GdipGetPenEndCap(nativePen, out endCap));
return endCap;
}
public DashCap GetDashCap()
{
DashCap dashCap;
SetStatus(NativeMethods.GdipGetPenDashCap197819(nativePen,
out dashCap));
return dashCap;
}
public GpStatus SetLineJoin(LineJoin lineJoin)
{
return SetStatus(NativeMethods.GdipSetPenLineJoin(nativePen, lineJoin));
}
public LineJoin GetLineJoin()
{
LineJoin lineJoin;
SetStatus(NativeMethods.GdipGetPenLineJoin(nativePen, out lineJoin));
return lineJoin;
}
public GpStatus SetCustomStartCap(CustomLineCap customCap)
{
GpCustomLineCap nativeCap = new GpCustomLineCap();
if (customCap != null)
nativeCap = customCap.nativeCap;
return SetStatus(NativeMethods.GdipSetPenCustomStartCap(nativePen,
nativeCap));
}
public GpStatus GetCustomStartCap(out CustomLineCap customCap)
{
customCap = new CustomLineCap();
return SetStatus(NativeMethods.GdipGetPenCustomStartCap(nativePen,
out customCap.nativeCap));
}
public GpStatus SetCustomEndCap(CustomLineCap customCap)
{
GpCustomLineCap nativeCap = new GpCustomLineCap();
if (customCap != null)
nativeCap = customCap.nativeCap;
return SetStatus(NativeMethods.GdipSetPenCustomEndCap(nativePen,
nativeCap));
}
public GpStatus GetCustomEndCap(out CustomLineCap customCap)
{
customCap = new CustomLineCap();
return SetStatus(NativeMethods.GdipGetPenCustomEndCap(nativePen,
out customCap.nativeCap));
}
public GpStatus SetMiterLimit(float miterLimit)
{
return SetStatus(NativeMethods.GdipSetPenMiterLimit(nativePen,
miterLimit));
}
public float GetMiterLimit()
{
float miterLimit;
SetStatus(NativeMethods.GdipGetPenMiterLimit(nativePen, out miterLimit));
return miterLimit;
}
public GpStatus SetAlignment(PenAlignment penAlignment)
{
return SetStatus(NativeMethods.GdipSetPenMode(nativePen, penAlignment));
}
public PenAlignment GetAlignment()
{
PenAlignment penAlignment;
SetStatus(NativeMethods.GdipGetPenMode(nativePen, out penAlignment));
return penAlignment;
}
//PenType GetPenType()
//{
// PenType type;
// SetStatus(NativeMethods.GdipGetPenFillType(nativePen, out type));
// return type;
//}
public GpStatus SetColor(Color color)
{
return SetStatus(NativeMethods.GdipSetPenColor(nativePen,
color.ToArgb()));
}
public GpStatus SetBrush(BrushPlus brush)
{
return SetStatus(NativeMethods.GdipSetPenBrushFill(nativePen,
brush.nativeBrush));
}
public GpStatus GetColor(out Color color)
{
//PenType type = GetPenType();
//if (type != PenType. PenTypeSolidColor)
//{
// return GpStatus. WrongState;
//}
int argb;
color = Color.FromArgb(0);
SetStatus(NativeMethods.GdipGetPenColor(nativePen,
out argb));
if (lastResult == GpStatus.Ok)
{
color = Color.FromArgb(argb);
}
return lastResult;
}
//BrushPlus GetBrush()
//{
// PenType type = GetPenType();
// BrushPlus brush = null;
// switch (type)
// {
// case PenType.PenTypeSolidColor:
// brush = new SolidBrushPlus();
// break;
// case PenType.PenTypeHatchFill:
// brush = new HatchBrush();
// break;
// case PenType.PenTypeTextureFill:
// brush = new TextureBrush();
// break;
// case PenType.PenTypePathGradient:
// brush = new BrushPlus();
// break;
// case PenType.PenTypeLinearGradient:
// brush = new LinearGradientBrush();
// break;
// default:
// break;
// }
// if (brush != null)
// {
// GpBrush nativeBrush;
// SetStatus(NativeMethods.GdipGetPenBrushFill(nativePen,
// out nativeBrush));
// brush.SetNativeBrush(nativeBrush);
// }
// return brush;
//}
public DashStyle GetDashStyle()
{
DashStyle dashStyle;
SetStatus(NativeMethods.GdipGetPenDashStyle(nativePen, out dashStyle));
return dashStyle;
}
public GpStatus SetDashStyle(DashStyle dashStyle)
{
return SetStatus(NativeMethods.GdipSetPenDashStyle(nativePen,
dashStyle));
}
public float GetDashOffset()
{
float dashOffset;
SetStatus(NativeMethods.GdipGetPenDashOffset(nativePen, out dashOffset));
return dashOffset;
}
public GpStatus SetDashOffset(float dashOffset)
{
return SetStatus(NativeMethods.GdipSetPenDashOffset(nativePen,
dashOffset));
}
public GpStatus SetDashPattern(float[] dashArray)
{
return SetStatus(NativeMethods.GdipSetPenDashArray(nativePen,
dashArray,
dashArray.Length));
}
public int GetDashPatternCount()
{
int count = 0;
SetStatus(NativeMethods.GdipGetPenDashCount(nativePen, out count));
return count;
}
public GpStatus GetDashPattern(float[] dashArray)
{
if (dashArray == null || dashArray.Length == 0)
return SetStatus(GpStatus.InvalidParameter);
return SetStatus(NativeMethods.GdipGetPenDashArray(nativePen,
dashArray,
dashArray.Length));
}
public GpStatus GetLastStatus()
{
GpStatus lastStatus = lastResult;
lastResult = GpStatus.Ok;
return lastStatus;
}
protected PenPlus(GpPen nativePen, GpStatus status)
{
lastResult = status;
SetNativePen(nativePen);
}
void SetNativePen(GpPen nativePen)
{
this.nativePen = nativePen;
}
GpStatus SetStatus(GpStatus status)
{
GpStatusPlus sp = status;
if (status != GpStatus.Ok)
return (lastResult = status);
else
return status;
}
internal GpPen nativePen;
protected GpStatus lastResult;
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
}
// free native resources if there are any.
if ((IntPtr)nativePen!= IntPtr.Zero)
{
NativeMethods.GdipDeletePen(nativePen);
nativePen = new GpPen();
}
}
#region IDisposable Members
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
}