Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.04 KB | None | 0 0
  1. using System;
  2. using Cairo;
  3. using Gtk;
  4.  
  5.  
  6. public class V4 : Window
  7. {
  8.     DrawingArea da;
  9.     private PointD start, end;
  10.     private bool click;
  11.     private int breyta;
  12.     public V4():base("mikki reddar þessu")
  13.     {
  14.         da = new DrawingArea();
  15.         da.AddEvents((int)Gdk.EventMask.AllEventsMask);
  16.        
  17.        
  18.         da.ButtonPressEvent += OnMousePress;
  19.         da.ButtonReleaseEvent += OnMouseRelease;
  20.        
  21.         KeyPressEvent += KeyPressHandler;
  22.         da.ExposeEvent += ODAE;
  23.        
  24.         SetDefaultSize(300,200);
  25.         SetPosition(WindowPosition.Center);
  26.        
  27.         DeleteEvent += delegate { Application.Quit(); };
  28.        
  29.        
  30.         Add(da);   
  31.         ShowAll();
  32.     }
  33.    
  34.    
  35.     void ODAE(object source, ExposeEventArgs args)
  36.     {
  37.         using (Cairo.Context ctx = Gdk.CairoHelper.Create(da.GdkWindow))
  38.         {
  39.             if(breyta == 1)
  40.             {
  41.                 DL(ctx, start,end);
  42.             }      
  43.             if(breyta == 2)
  44.             {
  45.                 DR(ctx, start,end);
  46.             }
  47.             if(breyta == 3)
  48.             {  
  49.                 DE(ctx,start,end);
  50.             }
  51.         }
  52.     }
  53.     void KeyPressHandler(object sender, KeyPressEventArgs args)
  54.     {
  55.             switch (args.Event.Key)
  56.             {
  57.                 case Gdk.Key.l:
  58.                     breyta = 1;
  59.                     break;
  60.                 case Gdk.Key.r:
  61.                     breyta = 2;
  62.                     break;
  63.                 case Gdk.Key.e:
  64.                     breyta = 3;
  65.                     break;
  66.             }      
  67.     }      
  68.     public static void DL(Context ctx, PointD start, PointD end)
  69.     {
  70.         ctx.Save();
  71.         ctx.MoveTo(start);
  72.         ctx.LineTo(end);
  73.         ctx.Restore();
  74.         ctx.Stroke();
  75.        
  76.     }
  77.     public static void DR(Context ctx, PointD start, PointD end)
  78.     {
  79.         double starty = start.Y;
  80.         double startx = start.X;
  81.        
  82.         double swapx = Math.Abs(end.X - start.X);
  83.         double swapy = Math.Abs(end.Y - start.Y);
  84.         ctx.Save();
  85.         if(( end.X - start.X) < 0 )
  86.         {
  87.             if((end.Y - start.Y) > 0)
  88.             {
  89.                 ctx.Rectangle(startx - swapx,starty,swapx,swapy);
  90.                 ctx.Stroke();
  91.                 ctx.Save();
  92.             }  
  93.             else
  94.             {
  95.                 ctx.Rectangle(startx - swapx,starty - swapy,swapx,swapy);
  96.                 ctx.Stroke();
  97.                 ctx.Save();
  98.             }
  99.         }
  100.         else
  101.         {
  102.             if((end.Y-start.Y) > 0)
  103.             {
  104.                 ctx.Rectangle(startx,starty,swapx,swapy);
  105.                 ctx.Stroke();
  106.                 ctx.Save();
  107.             }
  108.             else
  109.             {
  110.                 ctx.Rectangle(startx,starty-swapy,swapx,swapy);
  111.                 ctx.Stroke();
  112.                 ctx.Save();
  113.             }
  114.         }
  115.        
  116.        
  117.     }
  118.     public static void DE(Context ctx, PointD start, PointD end)
  119.     {
  120.         double width = Math.Abs(start.X - end.X);
  121.         double height = Math.Abs(start.Y - end.Y);
  122.         double xcenter = start.X + (end.X - start.X) / 2.0;
  123.         double ycenter = start.Y + (end.Y - start.Y) / 2.0;
  124.  
  125.         ctx.Save();
  126.         ctx.Translate(xcenter, ycenter);
  127.         ctx.Scale(width/2.0, height/2.0);
  128.         ctx.Arc(0.0, 0.0, 1.0, 0.0, 2*Math.PI);
  129.         ctx.Restore();
  130.         ctx.Stroke();
  131.  
  132.     }
  133.     void OnMousePress(object source, ButtonPressEventArgs args)
  134.     {
  135.         click = true;
  136.         start = new PointD(args.Event.X, args.Event.Y);
  137.         da.GrabFocus();
  138.     }  
  139.     void OnMouseRelease(object source, ButtonReleaseEventArgs args)
  140.     {
  141.         click = false;
  142.         end = new PointD(args.Event.X, args.Event.Y);
  143.         da.QueueDraw();
  144.     }
  145.     public static void Main()
  146.     {
  147.         Application.Init();
  148.         new V4();
  149.         Application.Run();
  150.     }
  151.  
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement