[longomatch] Add a new callback for objects that needs a redraw
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Add a new callback for objects that needs a redraw
- Date: Wed, 24 Sep 2014 20:32:39 +0000 (UTC)
commit c7fbad2808dff67b24e9737261a98611930352f3
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Mon Sep 22 21:15:07 2014 +0200
Add a new callback for objects that needs a redraw
Make it easier to redraw only parts of the canvas
for objects that need it instead of forcing a full
redraw. Most of the objects do not use it yet though
LongoMatch.Core/Handlers/Drawing.cs | 3 +++
LongoMatch.Core/Interfaces/Drawing/ICanvas.cs | 6 ++++--
LongoMatch.Drawing/Canvas.cs | 19 ++++++++++++++++++-
LongoMatch.Drawing/CanvasObjects/CanvasObject.cs | 10 +++++++++-
LongoMatch.Drawing/Widgets/Blackboard.cs | 4 ++--
LongoMatch.Drawing/Widgets/CategoriesLabels.cs | 2 +-
LongoMatch.Drawing/Widgets/DashboardCanvas.cs | 12 ++++++------
LongoMatch.Drawing/Widgets/PlaysTimeline.cs | 2 +-
LongoMatch.Drawing/Widgets/PositionTagger.cs | 10 +++++++---
LongoMatch.Drawing/Widgets/TeamTagger.cs | 2 +-
LongoMatch.Drawing/Widgets/TimersTimeline.cs | 2 +-
11 files changed, 53 insertions(+), 19 deletions(-)
---
diff --git a/LongoMatch.Core/Handlers/Drawing.cs b/LongoMatch.Core/Handlers/Drawing.cs
index 92989aa..d500a27 100644
--- a/LongoMatch.Core/Handlers/Drawing.cs
+++ b/LongoMatch.Core/Handlers/Drawing.cs
@@ -27,5 +27,8 @@ namespace LongoMatch.Core.Handlers.Drawing
public delegate void MotionHandler (Point coords);
public delegate void ShowTooltipHandler (Point coords);
public delegate void SizeChangedHandler ();
+ public delegate void CanvasHandler (ICanvasObject co);
+ public delegate void RedrawHandler (ICanvasObject co, Area area);
+
}
diff --git a/LongoMatch.Core/Interfaces/Drawing/ICanvas.cs b/LongoMatch.Core/Interfaces/Drawing/ICanvas.cs
index a079c26..606232e 100644
--- a/LongoMatch.Core/Interfaces/Drawing/ICanvas.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/ICanvas.cs
@@ -16,10 +16,9 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
//
using System;
-using LongoMatch.Core.Interfaces;
using LongoMatch.Core.Common;
-using LongoMatch.Core.Store.Drawables;
using LongoMatch.Core.Interfaces.Drawing;
+using LongoMatch.Core.Handlers.Drawing;
namespace LongoMatch.Core.Interfaces.Drawing
{
@@ -31,6 +30,9 @@ namespace LongoMatch.Core.Interfaces.Drawing
public interface ICanvasObject: IDisposable
{
+ event CanvasHandler ClickedEvent;
+ event RedrawHandler RedrawEvent;
+
void Draw (IDrawingToolkit tk, Area area);
bool Visible {set; get;}
string Description {set; get;}
diff --git a/LongoMatch.Drawing/Canvas.cs b/LongoMatch.Drawing/Canvas.cs
index ed17f5f..204e2d9 100644
--- a/LongoMatch.Drawing/Canvas.cs
+++ b/LongoMatch.Drawing/Canvas.cs
@@ -71,7 +71,8 @@ namespace LongoMatch.Drawing
protected void ClearObjects ()
{
if (Objects != null) {
- foreach (CanvasObject co in Objects) {
+ foreach (ICanvasObject co in Objects) {
+ co.RedrawEvent -= HandleRedrawEvent;
co.Dispose ();
}
Objects.Clear ();
@@ -83,6 +84,17 @@ namespace LongoMatch.Drawing
set;
}
+ public void AddObject (ICanvasObject co) {
+ Objects.Add (co);
+ co.RedrawEvent += HandleRedrawEvent;
+ }
+
+ public void RemoveObject (ICanvasObject co)
+ {
+ co.RedrawEvent -= HandleRedrawEvent;
+ Objects.Remove (co);
+ }
+
protected Point ToUserCoords (Point p)
{
return new Point ((p.X - translation.X) / scaleX,
@@ -90,6 +102,11 @@ namespace LongoMatch.Drawing
}
+ void HandleRedrawEvent (ICanvasObject co, Area area)
+ {
+ widget.ReDraw (area);
+ }
+
public virtual void Draw (IContext context, Area area)
{
tk.Context = context;
diff --git a/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
b/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
index 9a6578d..93ca1a6 100644
--- a/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
@@ -18,14 +18,15 @@
using LongoMatch.Core.Interfaces.Drawing;
using LongoMatch.Core.Common;
using LongoMatch.Core.Store.Drawables;
+using LongoMatch.Core.Handlers.Drawing;
using System;
namespace LongoMatch.Drawing.CanvasObjects
{
public abstract class CanvasObject: ICanvasObject
{
- public delegate void CanvasHandler (CanvasObject co);
public event CanvasHandler ClickedEvent;
+ public event RedrawHandler RedrawEvent;
bool disposed;
@@ -88,6 +89,13 @@ namespace LongoMatch.Drawing.CanvasObjects
}
}
+ protected void EmitRedrawEvent (CanvasObject co, Area area)
+ {
+ if (RedrawEvent != null) {
+ RedrawEvent (co, area);
+ }
+ }
+
public abstract void Draw (IDrawingToolkit tk, Area area);
}
diff --git a/LongoMatch.Drawing/Widgets/Blackboard.cs b/LongoMatch.Drawing/Widgets/Blackboard.cs
index 7ef8c4e..a1e3653 100644
--- a/LongoMatch.Drawing/Widgets/Blackboard.cs
+++ b/LongoMatch.Drawing/Widgets/Blackboard.cs
@@ -126,7 +126,7 @@ namespace LongoMatch.Drawing.Widgets
public void DeleteSelection ()
{
foreach (ICanvasDrawableObject o in Selections.Select (s => s.Drawable)) {
- Objects.Remove (o);
+ RemoveObject (o);
drawing.Drawables.Remove ((Drawable)o.IDrawableObject);
}
ClearSelection ();
@@ -168,7 +168,7 @@ namespace LongoMatch.Drawing.Widgets
ICanvasSelectableObject Add (IBlackboardObject drawable)
{
ICanvasSelectableObject cso = Utils.CanvasFromDrawableObject (drawable);
- Objects.Add (cso);
+ AddObject (cso);
return cso;
}
diff --git a/LongoMatch.Drawing/Widgets/CategoriesLabels.cs b/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
index 6f2f381..2360d27 100644
--- a/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
+++ b/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
@@ -70,7 +70,7 @@ namespace LongoMatch.Drawing.Widgets
/* Add the category label */
l = new CategoryLabel (eventType, w, h, i * h);
eventsLabels [eventType] = l;
- Objects.Add (l);
+ AddObject (l);
i++;
}
}
diff --git a/LongoMatch.Drawing/Widgets/DashboardCanvas.cs b/LongoMatch.Drawing/Widgets/DashboardCanvas.cs
index 18168e8..ee85cfe 100644
--- a/LongoMatch.Drawing/Widgets/DashboardCanvas.cs
+++ b/LongoMatch.Drawing/Widgets/DashboardCanvas.cs
@@ -205,7 +205,7 @@ namespace LongoMatch.Drawing.Widgets
TagObject to = new TagObject (tag);
to.ClickedEvent += HandleTaggerClickedEvent;
to.Mode = TagMode;
- Objects.Add (to);
+ AddObject (to);
}
foreach (AnalysisEventButton cat in template.List.OfType<AnalysisEventButton>()) {
@@ -213,27 +213,27 @@ namespace LongoMatch.Drawing.Widgets
co.ClickedEvent += HandleTaggerClickedEvent;
co.Mode = TagMode;
co.AddTag = AddTag;
- Objects.Add (co);
+ AddObject (co);
}
foreach (PenaltyCardButton c in template.List.OfType<PenaltyCardButton>()) {
CardObject co = new CardObject (c);
co.ClickedEvent += HandleTaggerClickedEvent;
co.Mode = TagMode;
- Objects.Add (co);
+ AddObject (co);
}
foreach (ScoreButton s in template.List.OfType<ScoreButton>()) {
ScoreObject co = new ScoreObject (s);
co.ClickedEvent += HandleTaggerClickedEvent;
co.Mode = TagMode;
- Objects.Add (co);
+ AddObject (co);
}
foreach (TimerButton t in template.List.OfType<TimerButton>()) {
TimerObject to = new TimerObject (t);
to.ClickedEvent += HandleTaggerClickedEvent;
to.Mode = TagMode;
- Objects.Add (to);
+ AddObject (to);
}
Edited = false;
SizeChanged ();
@@ -260,7 +260,7 @@ namespace LongoMatch.Drawing.Widgets
}
}
- void HandleTaggerClickedEvent (CanvasObject co)
+ void HandleTaggerClickedEvent (ICanvasObject co)
{
TaggerObject tagger;
EventButton button;
diff --git a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
index aae6b4f..2eb1d24 100644
--- a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
@@ -120,7 +120,7 @@ namespace LongoMatch.Drawing.Widgets
i * StyleConf.TimelineCategoryHeight,
Utils.ColorForRow (i), playsFilter);
eventsTimelines [type] = tl;
- Objects.Add (tl);
+ AddObject (tl);
i++;
}
UpdateVisibleCategories ();
diff --git a/LongoMatch.Drawing/Widgets/PositionTagger.cs b/LongoMatch.Drawing/Widgets/PositionTagger.cs
index f3cdff1..116678a 100644
--- a/LongoMatch.Drawing/Widgets/PositionTagger.cs
+++ b/LongoMatch.Drawing/Widgets/PositionTagger.cs
@@ -93,7 +93,7 @@ namespace LongoMatch.Drawing.Widgets
public List<Point> Points {
set {
ClearObjects ();
- Objects.Add (new PositionObject (value, Background.Width, Background.Height));
+ AddObject (new PositionObject (value, Background.Width, Background.Height));
}
}
@@ -121,12 +121,16 @@ namespace LongoMatch.Drawing.Widgets
if (Filter != null) {
po.Visible = Filter.IsVisible (play);
}
- Objects.Add (po);
+ AddObject (po);
}
public void RemovePlays (List<TimelineEvent> plays)
{
- Objects.RemoveAll (o => plays.Contains ((o as PositionObject).Play));
+ List<ICanvasObject> objects;
+
+ foreach (ICanvasObject co in Objects.Where (o => plays.Contains ((o as
PositionObject).Play))) {
+ RemoveObject (co);
+ }
}
void HandleFilterUpdated ()
diff --git a/LongoMatch.Drawing/Widgets/TeamTagger.cs b/LongoMatch.Drawing/Widgets/TeamTagger.cs
index d3d34a7..99b7d13 100644
--- a/LongoMatch.Drawing/Widgets/TeamTagger.cs
+++ b/LongoMatch.Drawing/Widgets/TeamTagger.cs
@@ -47,7 +47,7 @@ namespace LongoMatch.Drawing.Widgets
tagger.PlayersSubstitutionEvent += HandlePlayersSubstitutionEvent;
tagger.PlayersSelectionChangedEvent += HandlePlayersSelectionChangedEvent;
ObjectsCanMove = false;
- Objects.Add (tagger);
+ AddObject (tagger);
}
protected override void Dispose (bool disposing)
diff --git a/LongoMatch.Drawing/Widgets/TimersTimeline.cs b/LongoMatch.Drawing/Widgets/TimersTimeline.cs
index f19c919..a4bdf65 100644
--- a/LongoMatch.Drawing/Widgets/TimersTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/TimersTimeline.cs
@@ -79,7 +79,7 @@ namespace LongoMatch.Drawing.Widgets
foreach (Timer t in timers) {
this.timers [t] = tl;
}
- Objects.Add (tl);
+ AddObject (tl);
} else {
widget.Height = timers.Count * Constants.TIMER_HEIGHT;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]