Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using Cairo;
- using Gtk;
- public class V4 : Window
- {
- DrawingArea da;
- private PointD start, end;
- private bool click;
- private int breyta;
- public V4():base("mikki reddar þessu")
- {
- da = new DrawingArea();
- da.AddEvents((int)Gdk.EventMask.AllEventsMask);
- da.ButtonPressEvent += OnMousePress;
- da.ButtonReleaseEvent += OnMouseRelease;
- KeyPressEvent += KeyPressHandler;
- da.ExposeEvent += ODAE;
- SetDefaultSize(300,200);
- SetPosition(WindowPosition.Center);
- DeleteEvent += delegate { Application.Quit(); };
- Add(da);
- ShowAll();
- }
- void ODAE(object source, ExposeEventArgs args)
- {
- using (Cairo.Context ctx = Gdk.CairoHelper.Create(da.GdkWindow))
- {
- if(breyta == 1)
- {
- DL(ctx, start,end);
- }
- if(breyta == 2)
- {
- DR(ctx, start,end);
- }
- if(breyta == 3)
- {
- DE(ctx,start,end);
- }
- }
- }
- void KeyPressHandler(object sender, KeyPressEventArgs args)
- {
- switch (args.Event.Key)
- {
- case Gdk.Key.l:
- breyta = 1;
- break;
- case Gdk.Key.r:
- breyta = 2;
- break;
- case Gdk.Key.e:
- breyta = 3;
- break;
- }
- }
- public static void DL(Context ctx, PointD start, PointD end)
- {
- ctx.Save();
- ctx.MoveTo(start);
- ctx.LineTo(end);
- ctx.Restore();
- ctx.Stroke();
- }
- public static void DR(Context ctx, PointD start, PointD end)
- {
- double starty = start.Y;
- double startx = start.X;
- double swapx = Math.Abs(end.X - start.X);
- double swapy = Math.Abs(end.Y - start.Y);
- ctx.Save();
- if(( end.X - start.X) < 0 )
- {
- if((end.Y - start.Y) > 0)
- {
- ctx.Rectangle(startx - swapx,starty,swapx,swapy);
- ctx.Stroke();
- ctx.Save();
- }
- else
- {
- ctx.Rectangle(startx - swapx,starty - swapy,swapx,swapy);
- ctx.Stroke();
- ctx.Save();
- }
- }
- else
- {
- if((end.Y-start.Y) > 0)
- {
- ctx.Rectangle(startx,starty,swapx,swapy);
- ctx.Stroke();
- ctx.Save();
- }
- else
- {
- ctx.Rectangle(startx,starty-swapy,swapx,swapy);
- ctx.Stroke();
- ctx.Save();
- }
- }
- }
- public static void DE(Context ctx, PointD start, PointD end)
- {
- double width = Math.Abs(start.X - end.X);
- double height = Math.Abs(start.Y - end.Y);
- double xcenter = start.X + (end.X - start.X) / 2.0;
- double ycenter = start.Y + (end.Y - start.Y) / 2.0;
- ctx.Save();
- ctx.Translate(xcenter, ycenter);
- ctx.Scale(width/2.0, height/2.0);
- ctx.Arc(0.0, 0.0, 1.0, 0.0, 2*Math.PI);
- ctx.Restore();
- ctx.Stroke();
- }
- void OnMousePress(object source, ButtonPressEventArgs args)
- {
- click = true;
- start = new PointD(args.Event.X, args.Event.Y);
- da.GrabFocus();
- }
- void OnMouseRelease(object source, ButtonReleaseEventArgs args)
- {
- click = false;
- end = new PointD(args.Event.X, args.Event.Y);
- da.QueueDraw();
- }
- public static void Main()
- {
- Application.Init();
- new V4();
- Application.Run();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement