aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/Rectangles.cs
diff options
context:
space:
mode:
authorjpbruyere <jp_bruyere@hotmail.com>2013-11-16 09:16:43 +0100
committerjpbruyere <jp_bruyere@hotmail.com>2013-11-16 09:16:43 +0100
commitdab0f2befeda33bd1c8e59ec41a2e1768712086b (patch)
treee1dc606a3d8eeccd221e8adc03edc8639c3daa17 /src/Rectangles.cs
first commit
Diffstat (limited to 'src/Rectangles.cs')
-rw-r--r--src/Rectangles.cs164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/Rectangles.cs b/src/Rectangles.cs
new file mode 100644
index 00000000..8129fc83
--- /dev/null
+++ b/src/Rectangles.cs
@@ -0,0 +1,164 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Cairo;
+using System.Diagnostics;
+
+namespace go
+{
+ public class Rectangles
+ {
+ public List<Rectangle> list = new List<Rectangle>();
+ public int count
+ {
+ get { return list.Count; }
+ }
+
+ public void AddRectangle(Rectangle r)
+ {
+ //if (r.Left == 0)
+ // Debugger.Break();
+ if (addRect(r))
+ list.Add(r);
+ }
+ public void Reset()
+ {
+ list = new List<Rectangle>();
+ }
+ bool addRect(Rectangle r)
+ {
+ foreach (Rectangle rInList in list)
+ if (rInList.Contains(r))
+ return false;
+ return true;
+ }
+
+ public bool intersect(Rectangle r)
+ {
+ foreach (Rectangle rInList in list)
+ if (rInList.Intersect(r))
+ return true;
+ return false;
+ }
+
+ public Rectangles intersectingRects(Rectangle r)
+ {
+ Rectangles tmp = new Rectangles();
+
+ foreach (Rectangle rInList in list)
+ if (rInList.Intersect(r))
+ tmp.list.Add(rInList.Clone);//on bypass le test déjà fait a l'ajout intial du rect dans la liste
+
+ return tmp;
+ }
+ public Rectangles SmallerContainedRects(Rectangle r)
+ {
+ Rectangles tmp = new Rectangles();
+
+ foreach (Rectangle rInList in list)
+ if (r.Contains(rInList) && rInList.Size < r.Size)
+ tmp.list.Add(rInList.Clone);
+
+ return tmp;
+ }
+ public Rectangles SmallerRects(Rectangle r)
+ {
+ Rectangles tmp = new Rectangles();
+
+ foreach (Rectangle rInList in list)
+ if (rInList.Size < r.Size)
+ tmp.list.Add(rInList.Clone);
+
+ return tmp;
+ }
+ public Rectangles containedRects(Rectangle r)
+ {
+ Rectangles tmp = new Rectangles();
+
+ foreach (Rectangle rInList in list)
+ if (r.Contains(rInList) && rInList.Size <= r.Size)
+ tmp.list.Add(rInList.Clone);
+
+ return tmp;
+ }
+ public void Rebase(GraphicObject w)
+ {
+ Rectangle r = w.renderBounds;
+ List<Rectangle> newList = new List<Rectangle>();
+
+ foreach (Rectangle rInList in list)
+ {
+ Rectangle rebasedR = rInList.Clone;
+ rebasedR.TopLeft-= r.TopLeft;
+
+ ScrollingWidget sw = w as ScrollingWidget;
+ if (sw != null)
+ {
+ if (sw.VerticalScrolling)
+ rebasedR.Top -= sw.scrollY;
+ if (sw.HorizontalScrolling)
+ rebasedR.Left -= sw.scrollX;
+ }
+ newList.Add(rebasedR);
+ }
+ list = newList;
+ }
+ public void clearAndClip(Context ctx)
+ {
+ //ctx.Save();
+
+ foreach (Rectangle r in list)
+ {
+ ctx.Rectangle(r);
+ }
+
+ ctx.ClipPreserve();
+ ctx.Operator = Operator.Clear;
+ ctx.Fill();
+ ctx.Operator = Operator.Over;
+ //ctx.Restore();
+ }
+ public void clip(Context ctx)
+ {
+ foreach (Rectangle r in list)
+ {
+ ctx.Rectangle(r);
+ }
+
+ ctx.Clip();
+ }
+ public void clear(Context ctx)
+ {
+ //ctx.Save();
+
+ foreach (Rectangle r in list)
+ {
+ ctx.Rectangle(r);
+ }
+ ctx.Operator = Operator.Clear;
+ ctx.Fill();
+ ctx.Operator = Operator.Over;
+ //ctx.Restore();
+ }
+ //public RectanglesRelations test(Rectangle r)
+ //{
+ // foreach (Rectangle rInList in list)
+ // {
+ // switch (rInList.test(r))
+ // {
+ // case RectanglesRelations.NoRelation:
+ // break;
+ // case RectanglesRelations.Intersect:
+ // break;
+ // case RectanglesRelations.Contains:
+ // break;
+ // case RectanglesRelations.Equal:
+ // break;
+ // default:
+ // break;
+ // }
+ // }
+ //}
+ }
+}