diff options
Diffstat (limited to 'src/Rectangles.cs')
| -rw-r--r-- | src/Rectangles.cs | 408 |
1 files changed, 204 insertions, 204 deletions
diff --git a/src/Rectangles.cs b/src/Rectangles.cs index 3abbfc4e..2d7f6ff1 100644 --- a/src/Rectangles.cs +++ b/src/Rectangles.cs @@ -1,204 +1,204 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Cairo;
-using System.Diagnostics;
-
-namespace Crow
-{
- public class Rectangles
- {
- public List<Rectangle> list = new List<Rectangle>();
- public int count
- {
- get { return list.Count; }
- }
-
- public void AddRectangle(Rectangle r)
- {
- if (rectIsNotContainedInRectangles (r)) {
- list.Add (r);
- boundsUpToDate = false;
- }
- }
- public void Reset()
- {
- list = new List<Rectangle>();
- _bounds = Rectangle.Empty;
- boundsUpToDate = true;
- }
- bool rectIsNotContainedInRectangles(Rectangle r)
- {
- foreach (Rectangle rInList in list)
- if (rInList.ContainsOrIsEqual(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);//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.ContainsOrIsEqual(rInList) && rInList.Size < r.Size)
- tmp.list.Add(rInList);
-
- return tmp;
- }
- /// <summary>
- /// Return rectangles with size smaller than r.size
- /// </summary>
- public Rectangles SmallerRects(Rectangle r)
- {
- Rectangles tmp = new Rectangles();
-
- foreach (Rectangle rInList in list)
- if (rInList.Size < r.Size)
- tmp.list.Add(rInList);
-
- return tmp;
- }
- public Rectangles containedOrEqualRects(Rectangle r)
- {
- Rectangles tmp = new Rectangles();
-
- foreach (Rectangle rInList in list)
- if (r.ContainsOrIsEqual(rInList))// && rInList.Size <= r.Size)
- tmp.list.Add(rInList);
-
- return tmp;
- }
- public void Srcoll(GraphicObject w)
- {
- Scroller sw = w as Scroller;
- if (sw == null)
- return;
-
- List<Rectangle> newList = new List<Rectangle>();
-
- foreach (Rectangle rInList in list)
- {
- Rectangle r = rInList;
-
- if (sw.VerticalScrolling)
- r.Top -= (int)sw.ScrollY;
- if (sw.HorizontalScrolling)
- r.Left -= (int)sw.ScrollX;
-
- newList.Add(r);
- }
- list = newList;
- }
- public void Rebase(GraphicObject w)
- {
- Rectangle r = w.Parent.ContextCoordinates(w.Slot);
- List<Rectangle> newList = new List<Rectangle>();
-
- foreach (Rectangle rInList in list)
- {
- Rectangle rebasedR = rInList;
- rebasedR.TopLeft-= r.TopLeft;
-
- Scroller sw = w as Scroller;
- if (sw != null)
- {
- if (sw.VerticalScrolling) {
- rebasedR.Top -= (int)sw.ScrollY;
-// if (sw.scrollY < 0)
-// Debug.WriteLine ("..");
- }if (sw.HorizontalScrolling)
- rebasedR.Left -= (int)sw.ScrollX;
- }
-
- newList.Add(rebasedR);
- }
- list = newList;
- }
- public void stroke(Context ctx, Color c)
- {
- foreach (Rectangle r in list)
- {
- ctx.Rectangle(r);
- }
-
- ctx.SetSourceColor(c);
-
- ctx.LineWidth = 2;
- ctx.Stroke ();
- }
- public void clearAndClip(Context ctx)
- {
- foreach (Rectangle r in list)
- ctx.Rectangle(r);
-
- ctx.ClipPreserve();
- ctx.Operator = Operator.Clear;
- ctx.Fill();
- ctx.Operator = Operator.Over;
- }
-
- public void clip(Context ctx)
- {
- foreach (Rectangle r in list)
- {
- ctx.Rectangle(r);
- }
-
- ctx.Clip();
- }
-
- Rectangle _bounds;
- bool boundsUpToDate = true;
- public Rectangle Bounds {
- get {
- if (!boundsUpToDate) {
- _bounds = Rectangle.Empty;
- foreach (Rectangle rInList in list)
- _bounds += rInList;
- boundsUpToDate = true;
- }
- return _bounds;
- }
- }
- 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 override string ToString ()
- {
- string tmp = "";
- foreach (Rectangle r in list) {
- tmp += r.ToString ();
- }
- return tmp;
- }
- }
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Cairo; +using System.Diagnostics; + +namespace Crow +{ + public class Rectangles + { + public List<Rectangle> list = new List<Rectangle>(); + public int count + { + get { return list.Count; } + } + + public void AddRectangle(Rectangle r) + { + if (rectIsNotContainedInRectangles (r)) { + list.Add (r); + boundsUpToDate = false; + } + } + public void Reset() + { + list = new List<Rectangle>(); + _bounds = Rectangle.Empty; + boundsUpToDate = true; + } + bool rectIsNotContainedInRectangles(Rectangle r) + { + foreach (Rectangle rInList in list) + if (rInList.ContainsOrIsEqual(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);//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.ContainsOrIsEqual(rInList) && rInList.Size < r.Size) + tmp.list.Add(rInList); + + return tmp; + } + /// <summary> + /// Return rectangles with size smaller than r.size + /// </summary> + public Rectangles SmallerRects(Rectangle r) + { + Rectangles tmp = new Rectangles(); + + foreach (Rectangle rInList in list) + if (rInList.Size < r.Size) + tmp.list.Add(rInList); + + return tmp; + } + public Rectangles containedOrEqualRects(Rectangle r) + { + Rectangles tmp = new Rectangles(); + + foreach (Rectangle rInList in list) + if (r.ContainsOrIsEqual(rInList))// && rInList.Size <= r.Size) + tmp.list.Add(rInList); + + return tmp; + } + public void Srcoll(GraphicObject w) + { + Scroller sw = w as Scroller; + if (sw == null) + return; + + List<Rectangle> newList = new List<Rectangle>(); + + foreach (Rectangle rInList in list) + { + Rectangle r = rInList; + + if (sw.VerticalScrolling) + r.Top -= (int)sw.ScrollY; + if (sw.HorizontalScrolling) + r.Left -= (int)sw.ScrollX; + + newList.Add(r); + } + list = newList; + } + public void Rebase(GraphicObject w) + { + Rectangle r = w.Parent.ContextCoordinates(w.Slot); + List<Rectangle> newList = new List<Rectangle>(); + + foreach (Rectangle rInList in list) + { + Rectangle rebasedR = rInList; + rebasedR.TopLeft-= r.TopLeft; + + Scroller sw = w as Scroller; + if (sw != null) + { + if (sw.VerticalScrolling) { + rebasedR.Top -= (int)sw.ScrollY; +// if (sw.scrollY < 0) +// Debug.WriteLine (".."); + }if (sw.HorizontalScrolling) + rebasedR.Left -= (int)sw.ScrollX; + } + + newList.Add(rebasedR); + } + list = newList; + } + public void stroke(Context ctx, Color c) + { + foreach (Rectangle r in list) + { + ctx.Rectangle(r); + } + + ctx.SetSourceColor(c); + + ctx.LineWidth = 2; + ctx.Stroke (); + } + public void clearAndClip(Context ctx) + { + foreach (Rectangle r in list) + ctx.Rectangle(r); + + ctx.ClipPreserve(); + ctx.Operator = Operator.Clear; + ctx.Fill(); + ctx.Operator = Operator.Over; + } + + public void clip(Context ctx) + { + foreach (Rectangle r in list) + { + ctx.Rectangle(r); + } + + ctx.Clip(); + } + + Rectangle _bounds; + bool boundsUpToDate = true; + public Rectangle Bounds { + get { + if (!boundsUpToDate) { + _bounds = Rectangle.Empty; + foreach (Rectangle rInList in list) + _bounds += rInList; + boundsUpToDate = true; + } + return _bounds; + } + } + 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 override string ToString () + { + string tmp = ""; + foreach (Rectangle r in list) { + tmp += r.ToString (); + } + return tmp; + } + } +} |