using System; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace Psychlops { public class Canvas : Drawable { public static System.Windows.Controls.Image default_instance; public static System.Windows.Controls.UserControl default_panel; public static WriteableBitmap default_buffer; System.Windows.Controls.Image instance; System.Windows.Controls.UserControl panel; WriteableBitmap buffer; public Canvas(int wid, int hei) { panel = default_panel; instance = default_instance; instance.Width = wid; instance.Height = hei; buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height); instance.Source = buffer; instance.MouseMove += Mouse.Canvas_MousePos; instance.MouseLeftButtonDown += Mouse.Canvas_LDown; instance.MouseLeftButtonUp += Mouse.Canvas_LUp; instance.MouseWheel += Mouse.Canvas_MouseWheel; Mouse._prime = instance; Main.drawable = this; default_buffer = buffer; } public Canvas(int wid, int hei, System.Windows.Controls.Image target, System.Windows.Controls.UserControl system) { panel = system; instance = target; instance.Width = wid; instance.Height = hei; buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height); instance = target; instance.Source = buffer; instance.MouseMove += Mouse.Canvas_MousePos; instance.MouseLeftButtonDown += Mouse.Canvas_LDown; instance.MouseLeftButtonUp += Mouse.Canvas_LUp; instance.MouseWheel += Mouse.Canvas_MouseWheel; Mouse._prime = instance; Main.drawable = this; } public Point getCenter() { return new Point(instance.Width/2.0, instance.Height/2.0, 0); } public void clear() { buffer.Clear(Color.black); } public void clear(Color col) { buffer.Clear(col); } public void pix(int x, int y, Color col) { buffer.SetPixel(x, y, col); } public void line(Line drawee, Color col) { buffer.DrawLine((int)drawee.begin.x, (int)drawee.begin.y, (int)drawee.end.x, (int)drawee.end.y, col); } public void rect(Rectangle drawee, Color col) { buffer.DrawRectangle((int)drawee.v1.x, (int)drawee.v1.y, (int)drawee.v2.x, (int)drawee.v2.y, col); } public void ellipse(Ellipse drawee, Color col) { buffer.DrawEllipse((int)(drawee.datum.x - drawee.xdiameter / 2), (int)(drawee.datum.y - drawee.ydiameter / 2), (int)(drawee.datum.x + drawee.xdiameter / 2), (int)(drawee.datum.y + drawee.ydiameter / 2), col); } public void polygon(Polygon drawee, Color col) { int[] ps = new int[drawee.vertices.Count]; int i=0; foreach (Point p in drawee.vertices) { ps[i] = (int)p.x; i++; ps[i] = (int)p.y; i++; } buffer.DrawPolyline(ps, col); } public void image(Image drawee) { buffer.Blit(drawee.datum, drawee.buffer, drawee.self_rect, Colors.White, WriteableBitmapExtensions.BlendMode.None); } public void flip() { buffer.Invalidate(); } } }