www.pudn.com > GDIPlusCF.zip > SimpleTypes.cs
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Text;
namespace OpenNETCF.GDIPlus
{
//--------------------------------------------------------------------------
// Represents a dimension in a 2D coordinate system (floating-point coordinates)
//--------------------------------------------------------------------------
public struct GpSizeF
{
public GpSizeF(GpSizeF size)
{
Width = size.Width;
Height = size.Height;
}
public GpSizeF(float width,
float height)
{
Width = width;
Height = height;
}
public static GpSizeF operator +(GpSizeF sz1, GpSizeF sz2)
{
return new GpSizeF(sz1.Width + sz2.Width,
sz1.Height + sz2.Height);
}
public static GpSizeF operator -(GpSizeF sz1, GpSizeF sz2)
{
return new GpSizeF(sz1.Width - sz2.Width,
sz1.Height - sz2.Height);
}
public override bool Equals(object obj)
{
if ( obj == null || !(obj is GpSizeF) )
return false;
return Equals((GpSizeF)obj);
}
public bool Equals(GpSizeF sz)
{
return (Width == sz.Width) && (Height == sz.Height);
}
public bool Empty()
{
return (Width == 0.0f && Height == 0.0f);
}
public float Width;
public float Height;
};
//--------------------------------------------------------------------------
// Represents a dimension in a 2D coordinate system (integer coordinates)
//--------------------------------------------------------------------------
public struct GpSize
{
public GpSize(GpSize size)
{
Width = size.Width;
Height = size.Height;
}
public GpSize(int width,
int height)
{
Width = width;
Height = height;
}
public static GpSize operator+(GpSize sz1, GpSize sz2)
{
return new GpSize(sz1.Width + sz2.Width,
sz1.Height + sz2.Height);
}
public static GpSize operator-(GpSize sz1, GpSize sz2)
{
return new GpSize(sz1.Width - sz2.Width,
sz1.Height - sz2.Height);
}
public override bool Equals(object obj)
{
if ( obj == null || !(obj is GpSize) )
return false;
return Equals((GpSize)obj);
}
public bool Equals(GpSize sz)
{
return (Width == sz.Width) && (Height == sz.Height);
}
public bool Empty()
{
return (Width == 0 && Height == 0);
}
public int Width;
public int Height;
};
//--------------------------------------------------------------------------
// Represents a location in a 2D coordinate system (floating-point coordinates)
//--------------------------------------------------------------------------
public struct GpPointF
{
public GpPointF(GpPointF point)
{
X = point.X;
Y = point.Y;
}
public GpPointF(GpSizeF size)
{
X = size.Width;
Y = size.Height;
}
public GpPointF(float x,
float y)
{
X = x;
Y = y;
}
public static GpPointF operator +(GpPointF point1, GpPointF point2)
{
return new GpPointF(point1.X + point2.X,
point1.Y + point2.Y);
}
public static GpPointF operator-(GpPointF point1, GpPointF point2)
{
return new GpPointF(point1.X - point2.X,
point1.Y - point2.Y);
}
public override bool Equals(object obj)
{
if ( obj == null || !(obj is GpPointF))
return false;
return Equals((GpPointF)obj);
}
public bool Equals(GpPointF point)
{
return (X == point.X) && (Y == point.Y);
}
public float X;
public float Y;
};
//--------------------------------------------------------------------------
// Represents a location in a 2D coordinate system (integer coordinates)
//--------------------------------------------------------------------------
public struct GpPoint
{
public GpPoint(GpPoint point)
{
X = point.X;
Y = point.Y;
}
public GpPoint(GpSize size)
{
X = size.Width;
Y = size.Height;
}
public GpPoint(int x,
int y)
{
X = x;
Y = y;
}
public static GpPoint operator +(GpPoint point1, GpPoint point2)
{
return new GpPoint(point1.X + point2.X,
point1.Y + point2.Y);
}
public static GpPoint operator -(GpPoint point1, GpPoint point2)
{
return new GpPoint(point1.X - point2.X,
point1.Y - point2.Y);
}
public override bool Equals(object obj)
{
if ( obj == null || !(obj is GpPoint) )
return false;
return Equals((GpPoint)obj);
}
public bool Equals(GpPoint point)
{
return (X == point.X) && (Y == point.Y);
}
public int X;
public int Y;
};
//--------------------------------------------------------------------------
// Represents a rectangle in a 2D coordinate system (floating-point coordinates)
//--------------------------------------------------------------------------
[StructLayout(LayoutKind.Sequential)]
public struct GpRectF
{
public GpRectF(float x,
float y,
float width,
float height)
{
X = x;
Y = y;
Width = width;
Height = height;
}
public GpRectF(GpPointF location,
GpSizeF size)
{
X = location.X;
Y = location.Y;
Width = size.Width;
Height = size.Height;
}
public GpRectF Clone()
{
return new GpRectF(X, Y, Width, Height);
}
public void GetLocation(out GpPointF point)
{
point.X = X;
point.Y = Y;
}
public void GetGpSize(out GpSizeF size)
{
size.Width = Width;
size.Height = Height;
}
public void GetBounds(out GpRectF rect)
{
rect.X = X;
rect.Y = Y;
rect.Width = Width;
rect.Height = Height;
}
public float GetLeft()
{
return X;
}
public float GetTop()
{
return Y;
}
public float GetRight()
{
return X+Width;
}
public float GetBottom()
{
return Y+Height;
}
public bool IsEmptyArea()
{
return (Width <= float.Epsilon) || (Height <= float.Epsilon);
}
public override bool Equals(object obj)
{
if ( obj == null || !(obj is GpRectF ))
return false;
return Equals((GpRectF)obj);
}
public bool Equals(GpRectF rect)
{
return X == rect.X &&
Y == rect.Y &&
Width == rect.Width &&
Height == rect.Height;
}
public bool Contains(float x,
float y)
{
return x >= X && x < X+Width &&
y >= Y && y < Y+Height;
}
public bool Contains(GpPointF pt)
{
return Contains(pt.X, pt.Y);
}
public bool Contains(GpRectF rect)
{
return (X <= rect.X) && (rect.GetRight() <= GetRight()) &&
(Y <= rect.Y) && (rect.GetBottom() <= GetBottom());
}
public void Inflate(float dx,
float dy)
{
X -= dx;
Y -= dy;
Width += 2*dx;
Height += 2*dy;
}
public void Inflate(GpPointF point)
{
Inflate(point.X, point.Y);
}
public bool Intersect(GpRectF rect)
{
return Intersect(out this, this, rect);
}
static public bool Intersect(out GpRectF c,
GpRectF a,
GpRectF b)
{
float right = Math.Min(a.GetRight(), b.GetRight());
float bottom = Math.Min(a.GetBottom(), b.GetBottom());
float left = Math.Max(a.GetLeft(), b.GetLeft());
float top = Math.Max(a.GetTop(), b.GetTop());
c.X = left;
c.Y = top;
c.Width = right - left;
c.Height = bottom - top;
return !c.IsEmptyArea();
}
public bool IntersectsWith(GpRectF rect)
{
return (GetLeft() < rect.GetRight() &&
GetTop() < rect.GetBottom() &&
GetRight() > rect.GetLeft() &&
GetBottom() > rect.GetTop());
}
static public bool Union(out GpRectF c,
GpRectF a,
GpRectF b)
{
float right = Math.Max(a.GetRight(), b.GetRight());
float bottom = Math.Max(a.GetBottom(), b.GetBottom());
float left = Math.Min(a.GetLeft(), b.GetLeft());
float top = Math.Min(a.GetTop(), b.GetTop());
c.X = left;
c.Y = top;
c.Width = right - left;
c.Height = bottom - top;
return !c.IsEmptyArea();
}
public void Offset(GpPointF point)
{
Offset(point.X, point.Y);
}
public void Offset(float dx,
float dy)
{
X += dx;
Y += dy;
}
public float X;
public float Y;
public float Width;
public float Height;
};
//--------------------------------------------------------------------------
// Represents a rectangle in a 2D coordinate system (integer coordinates)
//--------------------------------------------------------------------------
public struct GpRect
{
public GpRect(int x,
int y,
int width,
int height)
{
X = x;
Y = y;
Width = width;
Height = height;
}
public GpRect(GpPoint location,
GpSize size)
{
X = location.X;
Y = location.Y;
Width = size.Width;
Height = size.Height;
}
public GpRect Clone()
{
return new GpRect(X, Y, Width, Height);
}
public void GetLocation(out GpPoint point)
{
point.X = X;
point.Y = Y;
}
public void GetGpSize(out GpSize size)
{
size.Width = Width;
size.Height = Height;
}
public void GetBounds(out GpRect rect)
{
rect.X = X;
rect.Y = Y;
rect.Width = Width;
rect.Height = Height;
}
public int GetLeft()
{
return X;
}
public int GetTop()
{
return Y;
}
public int GetRight()
{
return X+Width;
}
public int GetBottom()
{
return Y+Height;
}
public bool IsEmptyArea()
{
return (Width <= 0) || (Height <= 0);
}
public override bool Equals(object obj)
{
if (obj == null || !(obj is GpRect))
return false;
return Equals((GpRect)obj);
}
public bool Equals(GpRect rect)
{
return X == rect.X &&
Y == rect.Y &&
Width == rect.Width &&
Height == rect.Height;
}
public bool Contains(int x,
int y)
{
return x >= X && x < X+Width &&
y >= Y && y < Y+Height;
}
public bool Contains(GpPoint pt)
{
return Contains(pt.X, pt.Y);
}
public bool Contains(GpRect rect)
{
return (X <= rect.X) && (rect.GetRight() <= GetRight()) &&
(Y <= rect.Y) && (rect.GetBottom() <= GetBottom());
}
public void Inflate(int dx,
int dy)
{
X -= dx;
Y -= dy;
Width += 2*dx;
Height += 2*dy;
}
public void Inflate(GpPoint point)
{
Inflate(point.X, point.Y);
}
public bool Intersect(GpRect rect)
{
return Intersect(out this, this, rect);
}
static public bool Intersect(out GpRect c,
GpRect a,
GpRect b)
{
int right = Math.Min(a.GetRight(), b.GetRight());
int bottom = Math.Min(a.GetBottom(), b.GetBottom());
int left = Math.Max(a.GetLeft(), b.GetLeft());
int top = Math.Max(a.GetTop(), b.GetTop());
c.X = left;
c.Y = top;
c.Width = right - left;
c.Height = bottom - top;
return !c.IsEmptyArea();
}
public bool IntersectsWith(GpRect rect)
{
return (GetLeft() < rect.GetRight() &&
GetTop() < rect.GetBottom() &&
GetRight() > rect.GetLeft() &&
GetBottom() > rect.GetTop());
}
static public bool Union(out GpRect c,
GpRect a,
GpRect b)
{
int right = Math.Max(a.GetRight(), b.GetRight());
int bottom = Math.Max(a.GetBottom(), b.GetBottom());
int left = Math.Min(a.GetLeft(), b.GetLeft());
int top = Math.Min(a.GetTop(), b.GetTop());
c.X = left;
c.Y = top;
c.Width = right - left;
c.Height = bottom - top;
return !c.IsEmptyArea();
}
public void Offset(GpPoint point)
{
Offset(point.X, point.Y);
}
public void Offset(int dx,
int dy)
{
X += dx;
Y += dy;
}
public int X;
public int Y;
public int Width;
public int Height;
};
}