[longomatch/newui: 52/157] Continue with players redesign



commit 60299beccfdf5796944037ecbd83bf9f1327d2b4
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Thu Aug 21 17:37:58 2014 +0200

    Continue with players redesign
    
    Start using svg as preloaded Surfaces to match the design
    Implement prelight in Canvas

 LongoMatch.Core/Config.cs                          |    3 +-
 LongoMatch.Core/Interfaces/Drawing/IDrawable.cs    |    2 +-
 LongoMatch.Core/Store/Drawables/Angle.cs           |    2 +-
 LongoMatch.Core/Store/Drawables/Counter.cs         |    5 -
 LongoMatch.Core/Store/Drawables/Cross.cs           |    2 +-
 LongoMatch.Core/Store/Drawables/Drawable.cs        |    2 +-
 LongoMatch.Core/Store/Drawables/Ellipse.cs         |    2 +-
 LongoMatch.Core/Store/Drawables/Line.cs            |    2 +-
 LongoMatch.Core/Store/Drawables/MultiPoints.cs     |    2 +-
 LongoMatch.Core/Store/Drawables/Quadrilateral.cs   |    3 +-
 LongoMatch.Core/Store/Drawables/Rectangle.cs       |    2 +-
 LongoMatch.Core/StyleConf.cs                       |   26 +++--
 LongoMatch.Drawing.Cairo/CairoBackend.cs           |    7 +-
 LongoMatch.Drawing.Cairo/Surface.cs                |   33 ++++-
 LongoMatch.Drawing.Cairo/WidgetWrapper.cs          |   10 +-
 LongoMatch.Drawing/Canvas.cs                       |   46 +++++--
 LongoMatch.Drawing/CanvasObjects/BenchObject.cs    |    9 +-
 LongoMatch.Drawing/CanvasObjects/CanvasObject.cs   |    9 +-
 LongoMatch.Drawing/CanvasObjects/FieldObject.cs    |    9 +-
 LongoMatch.Drawing/CanvasObjects/PlayerObject.cs   |   90 +++++++++----
 .../CanvasObjects/PlayersTaggerObject.cs           |  142 +++++++++++++++++---
 LongoMatch.Drawing/CanvasObjects/PositionObject.cs |    2 +-
 LongoMatch.Drawing/CanvasObjects/TaggerObject.cs   |    2 +-
 LongoMatch.Drawing/CanvasObjects/TimeNodeObject.cs |    2 +-
 LongoMatch.Drawing/CanvasObjects/TimelineObject.cs |    2 +-
 LongoMatch.Drawing/Widgets/Dashboard.cs            |    3 +
 LongoMatch.Drawing/Widgets/TeamTagger.cs           |   22 ++--
 Tests/Core/Drawables/TestDrawable.cs               |    2 +-
 data/images/player/away-in.svg                     |   10 ++
 data/images/player/away-number.svg                 |    8 +
 data/images/player/away-out.svg                    |   10 ++
 data/images/player/background.svg                  |    7 +
 data/images/player/home-in.svg                     |   10 ++
 data/images/player/home-number.svg                 |    8 +
 data/images/player/home-out.svg                    |   10 ++
 data/images/player/photo.svg                       |   63 +++++++++
 36 files changed, 454 insertions(+), 115 deletions(-)
---
diff --git a/LongoMatch.Core/Config.cs b/LongoMatch.Core/Config.cs
index 2b9b58c..78a5a51 100644
--- a/LongoMatch.Core/Config.cs
+++ b/LongoMatch.Core/Config.cs
@@ -135,8 +135,7 @@ namespace LongoMatch
 
                public static string ImagesDir {
                        get {
-                               return RelativeToPrefix(String.Format("share/{0}/images",
-                                                                     Constants.SOFTWARE_NAME.ToLower()));
+                               return Path.Combine (dataDir, "images");
                        }
                }
                
diff --git a/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs b/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs
index 0c9b8cb..1def454 100644
--- a/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs
@@ -24,7 +24,7 @@ namespace LongoMatch.Interfaces.Drawing
        public interface IMovableObject
        {
                bool Selected {get;set;}
-               Selection GetSelection (Point point, double precision);
+               Selection GetSelection (Point point, double precision, bool inMotion=false);
                void Move (Selection s, Point dst, Point start);
        }
        
diff --git a/LongoMatch.Core/Store/Drawables/Angle.cs b/LongoMatch.Core/Store/Drawables/Angle.cs
index ba163bc..08128a6 100644
--- a/LongoMatch.Core/Store/Drawables/Angle.cs
+++ b/LongoMatch.Core/Store/Drawables/Angle.cs
@@ -61,7 +61,7 @@ namespace LongoMatch.Store.Drawables
                        }
                }
                
-               public override Selection GetSelection (Point p, double pr=0.05) {
+               public override Selection GetSelection (Point p, double pr=0.05, bool inMotion=false) {
                        if (p.Distance (Start) < pr) {
                                return new Selection (this, SelectionPosition.AngleStart, p.Distance (Start));
                        } else if (p.Distance (Stop) < pr) {
diff --git a/LongoMatch.Core/Store/Drawables/Counter.cs b/LongoMatch.Core/Store/Drawables/Counter.cs
index 1ad6a13..01c7e4b 100644
--- a/LongoMatch.Core/Store/Drawables/Counter.cs
+++ b/LongoMatch.Core/Store/Drawables/Counter.cs
@@ -36,11 +36,6 @@ namespace LongoMatch.Store.Drawables
                        get;
                        set;
                }
-               
-               public Color TextColor {
-                       get;
-                       set;
-               }
        }
 }
 
diff --git a/LongoMatch.Core/Store/Drawables/Cross.cs b/LongoMatch.Core/Store/Drawables/Cross.cs
index fe3dec9..5f7b24e 100644
--- a/LongoMatch.Core/Store/Drawables/Cross.cs
+++ b/LongoMatch.Core/Store/Drawables/Cross.cs
@@ -79,7 +79,7 @@ namespace LongoMatch.Store.Drawables
                        Stop = array[3];
                }
                
-               public override Selection GetSelection (Point p, double pr=0.05) {
+               public override Selection GetSelection (Point p, double pr=0.05, bool inMotion=false) {
                        double d;
                        Selection sel;
                        
diff --git a/LongoMatch.Core/Store/Drawables/Drawable.cs b/LongoMatch.Core/Store/Drawables/Drawable.cs
index 997a69e..40b1845 100644
--- a/LongoMatch.Core/Store/Drawables/Drawable.cs
+++ b/LongoMatch.Core/Store/Drawables/Drawable.cs
@@ -62,7 +62,7 @@ namespace LongoMatch.Store.Drawables
                public virtual void Reorder () {
                }
                
-               public virtual Selection GetSelection (Point point, double pr) {
+               public virtual Selection GetSelection (Point point, double pr, bool inMotion=false) {
                        Point[] vertices;
                        double d;
                        
diff --git a/LongoMatch.Core/Store/Drawables/Ellipse.cs b/LongoMatch.Core/Store/Drawables/Ellipse.cs
index 4e50b9d..a0a0ad2 100644
--- a/LongoMatch.Core/Store/Drawables/Ellipse.cs
+++ b/LongoMatch.Core/Store/Drawables/Ellipse.cs
@@ -98,7 +98,7 @@ namespace LongoMatch.Store.Drawables
                        }
                }
 
-               public override Selection GetSelection (Point p, double pr=0.05) {
+               public override Selection GetSelection (Point p, double pr=0.05, bool inMotion=false) {
                        double d;
                        
                        if (Selected) {
diff --git a/LongoMatch.Core/Store/Drawables/Line.cs b/LongoMatch.Core/Store/Drawables/Line.cs
index a918d57..88862a2 100644
--- a/LongoMatch.Core/Store/Drawables/Line.cs
+++ b/LongoMatch.Core/Store/Drawables/Line.cs
@@ -60,7 +60,7 @@ namespace LongoMatch.Store.Drawables
                        }
                }
                
-               public override Selection GetSelection (Point p, double pr=0.05) {
+               public override Selection GetSelection (Point p, double pr=0.05, bool inMotion=false) {
                        double d;
                
                        if (MatchPoint (Start, p, pr, out d)) {
diff --git a/LongoMatch.Core/Store/Drawables/MultiPoints.cs b/LongoMatch.Core/Store/Drawables/MultiPoints.cs
index 5f10c1c..d2deac1 100644
--- a/LongoMatch.Core/Store/Drawables/MultiPoints.cs
+++ b/LongoMatch.Core/Store/Drawables/MultiPoints.cs
@@ -45,7 +45,7 @@ namespace LongoMatch.Store.Drawables
                        }
                }
                
-               public override Selection GetSelection (Point p, double pr)
+               public override Selection GetSelection (Point p, double pr, bool inMotion=false)
                {
                        Selection s = base.GetSelection (p, pr);
                        if (s != null) {
diff --git a/LongoMatch.Core/Store/Drawables/Quadrilateral.cs 
b/LongoMatch.Core/Store/Drawables/Quadrilateral.cs
index 5a1c54a..c50a8ac 100644
--- a/LongoMatch.Core/Store/Drawables/Quadrilateral.cs
+++ b/LongoMatch.Core/Store/Drawables/Quadrilateral.cs
@@ -67,7 +67,8 @@ namespace LongoMatch.Store.Drawables
                                return new Area (new Point (xmin, ymin), xmax - xmin, ymax - ymin);
                        }
                }
-               public override Selection GetSelection (Point p, double pr) {
+
+               public override Selection GetSelection (Point p, double pr, bool inMotion=false) {
                        double xmin, xmax, ymin, ymax;
                        double d;
                        
diff --git a/LongoMatch.Core/Store/Drawables/Rectangle.cs b/LongoMatch.Core/Store/Drawables/Rectangle.cs
index c9c8c90..6c9d08a 100644
--- a/LongoMatch.Core/Store/Drawables/Rectangle.cs
+++ b/LongoMatch.Core/Store/Drawables/Rectangle.cs
@@ -70,7 +70,7 @@ namespace LongoMatch.Store.Drawables
                        BottomRight = array[3];
                }
                
-               public override Selection GetSelection (Point p, double pr=0.05) {
+               public override Selection GetSelection (Point p, double pr=0.05, bool inMotion=false) {
                        Selection selection;
                        double d;
                        
diff --git a/LongoMatch.Core/StyleConf.cs b/LongoMatch.Core/StyleConf.cs
index bbf3bb8..d1e3cb8 100644
--- a/LongoMatch.Core/StyleConf.cs
+++ b/LongoMatch.Core/StyleConf.cs
@@ -55,19 +55,25 @@ namespace LongoMatch.Common
                public const int TimelineLabelVSpacing = 2;
                public const int TimelineLineSize = 6;
                
+               public const string PlayerBackground = "player/background.svg";
+               public const string PlayerHomeNumber = "player/home-number.svg";
+               public const string PlayerAwayNumber = "player/away-number.svg";
+               public const string PlayerHomeIn = "player/home-in.svg";
+               public const string PlayerAwayIn = "player/away-in.svg";
+               public const string PlayerHomeOut = "player/home-out.svg";
+               public const string PlayerAwayOut = "player/away-out.svg";
+               public const string PlayerPhoto = "player/photo.svg";
+               public const int PlayerLineWidth = 2;
+               public const int PlayerNumberHeight  = 17;
+               public const int PlayerNumberWidth  = 26;
+               public const int PlayerNumberOffset  = 17;
+               public const int PlayerArrowOffset = 14; 
+               public const int PlayerArrowSize = 20; 
+
+               
                public int BenchLineWidth = 2;
                public int TeamTaggerBenchBorder = 10;
                
-               public int PlayerSize = 60;
-               public int PlayerBorder = 2;
-               public int PlayerRadius = 2;
-               public int PlayerTeamLineWidth = 2;
-               public int PlayerNumberHeight  = 17;
-               public int PlayerNumberWidth  = 26;
-               public int PlayerNumberOffset  = 17;
-               public int PlayerArrowOffset = 14; 
-               public int PlayerArrowSize = 20; 
-
                public Color HomeTeamColor { get; set; }
 
                public Color AwayTeamColor { get; set; }
diff --git a/LongoMatch.Drawing.Cairo/CairoBackend.cs b/LongoMatch.Drawing.Cairo/CairoBackend.cs
index c764395..5516ecb 100644
--- a/LongoMatch.Drawing.Cairo/CairoBackend.cs
+++ b/LongoMatch.Drawing.Cairo/CairoBackend.cs
@@ -129,7 +129,8 @@ namespace LongoMatch.Drawing.Cairo
 
                public ISurface CreateSurface (string filename)
                {
-                       return new Surface (filename);
+                       Image img = Image.LoadFromFile (filename);
+                       return CreateSurface (img.Width, img.Height, img);
                }
 
                public ISurface CreateSurface (int width, int height, Image image=null)
@@ -284,8 +285,8 @@ namespace LongoMatch.Drawing.Cairo
                        
                        x = start.X + LineWidth / 2;
                        y = start.Y + LineWidth / 2;
-                       height -= LineWidth;
-                       width -= LineWidth;
+                       height -= LineWidth / 2;
+                       width -= LineWidth / 2;
 
                        if ((radius > height / 2) || (radius > width / 2))
                                radius = Math.Min (height / 2, width / 2);
diff --git a/LongoMatch.Drawing.Cairo/Surface.cs b/LongoMatch.Drawing.Cairo/Surface.cs
index cc7faf4..c659e72 100644
--- a/LongoMatch.Drawing.Cairo/Surface.cs
+++ b/LongoMatch.Drawing.Cairo/Surface.cs
@@ -15,15 +15,17 @@
 //  along with this program; if not, write to the Free Software
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
+using System;
 using Cairo;
-using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Common;
+using LongoMatch.Interfaces.Drawing;
 
 namespace LongoMatch.Drawing.Cairo
 {
        public class Surface: ISurface
        {
                ImageSurface surface;
+               bool disposed;
 
                public Surface (int width, int height, Image image)
                {
@@ -36,6 +38,30 @@ namespace LongoMatch.Drawing.Cairo
                        }
                }
 
+               ~Surface ()
+               {
+                       if (! disposed) {
+                               Log.Error (String.Format ("Surface {0} was not disposed correctly", this));
+                               Dispose (true);
+                       }
+               }
+
+               public void Dispose(){
+                       Dispose(true);
+                       GC.SuppressFinalize(this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (disposing) {
+                               if (surface != null) {
+                                       surface.Dispose ();
+                               }
+                               surface = null;
+                               disposed = true;
+                       }
+               }
+
                public Surface (string filename)
                {
                        surface = new ImageSurface (filename);
@@ -72,11 +98,6 @@ namespace LongoMatch.Drawing.Cairo
                        Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (tempFile);
                        return new Image (pixbuf);
                }
-
-               public void Dispose ()
-               {
-                       surface.Dispose ();
-               }
        }
 }
 
diff --git a/LongoMatch.Drawing.Cairo/WidgetWrapper.cs b/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
index 9fbb5ed..5a9132c 100644
--- a/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
+++ b/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
@@ -39,7 +39,7 @@ namespace LongoMatch.Drawing.Cairo
                DrawingArea widget;
                int currentWidth, currentHeight;
                double lastX, lastY;
-               bool canMove;
+               bool canMove, inButtonPress;
                uint moveTimerID, hoverTimerID;
 
                public WidgetWrapper (DrawingArea widget)
@@ -258,8 +258,10 @@ namespace LongoMatch.Drawing.Cairo
                        lastX = args.Event.X;
                        lastY = args.Event.Y;
 
-                       if (MotionEvent != null && canMove) {
-                               MotionEvent (new Point (lastX, lastY));
+                       if (MotionEvent != null) {
+                               if (!inButtonPress || canMove) {
+                                       MotionEvent (new Point (lastX, lastY));
+                               }
                        }
                }
 
@@ -278,6 +280,7 @@ namespace LongoMatch.Drawing.Cairo
                                bm = ParseButtonModifier (args.Event.State);
                                ButtonReleasedEvent (new Point (args.Event.X, args.Event.Y), bt, bm);
                        }
+                       inButtonPress = false;
                }
 
                void HandleButtonPressEvent (object o, ButtonPressEventArgs args)
@@ -286,6 +289,7 @@ namespace LongoMatch.Drawing.Cairo
                         * should be ignored. Start moving only when the button has been
                         * pressed for more than 200ms */
                        canMove = false;
+                       inButtonPress = true;
                        moveTimerID = GLib.Timeout.Add (MoveWaitMS, ReadyToMove);
                        if (ButtonPressEvent != null) {
                                ButtonType bt;
diff --git a/LongoMatch.Drawing/Canvas.cs b/LongoMatch.Drawing/Canvas.cs
index 117e266..4e277cf 100644
--- a/LongoMatch.Drawing/Canvas.cs
+++ b/LongoMatch.Drawing/Canvas.cs
@@ -44,7 +44,7 @@ namespace LongoMatch.Drawing
                        scaleY = 1;
                        translation = new Point (0, 0);
                }
-               
+
                ~ Canvas ()
                {
                        if (! disposed) {
@@ -53,9 +53,10 @@ namespace LongoMatch.Drawing
                        }
                }
 
-               public void Dispose(){
-                       Dispose(true);
-                       GC.SuppressFinalize(this);
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
                }
 
                protected virtual void Dispose (bool disposing)
@@ -115,6 +116,7 @@ namespace LongoMatch.Drawing
                protected Point start;
                uint lastTime;
                Selection clickedSel;
+               CanvasObject highlighted;
 
                public SelectionCanvas (IWidget widget): base (widget)
                {
@@ -135,7 +137,7 @@ namespace LongoMatch.Drawing
                        get;
                        set;
                }
-               
+
                public double Accuracy {
                        get;
                        set;
@@ -167,6 +169,26 @@ namespace LongoMatch.Drawing
 
                protected virtual void CursorMoved (Point coords)
                {
+                       CanvasObject current;
+                       Selection sel;
+
+                       sel = GetSelection (coords, true);
+                       if (sel == null) {
+                               current = null;
+                       } else {
+                               current = sel.Drawable as CanvasObject;
+                       }
+
+                       if (current != highlighted) {
+                               if (highlighted != null) {
+                                       highlighted.Highlighted = false;
+                               }
+                               if (current != null) {
+                                       current.Highlighted = true;
+                               }
+                               highlighted = current;
+                               widget.ReDraw ();
+                       }
                }
 
                protected virtual void SelectionMoved (Selection sel)
@@ -228,17 +250,17 @@ namespace LongoMatch.Drawing
                        widget.ReDraw (so);
                }
 
-               Selection GetSelection (Point coords)
+               Selection GetSelection (Point coords, bool inMotion=false)
                {
                        Selection sel = null;
 
                        /* Try with the selected item first */
                        if (Selections.Count > 0) {
-                               sel = Selections.LastOrDefault ().Drawable.GetSelection (coords, Accuracy);
+                               sel = Selections.LastOrDefault ().Drawable.GetSelection (coords, Accuracy, 
inMotion);
                        }
                        if (sel == null) {
                                foreach (ICanvasSelectableObject co in Objects) {
-                                       sel = co.GetSelection (coords, Accuracy);
+                                       sel = co.GetSelection (coords, Accuracy, inMotion);
                                        if (sel != null) {
                                                break;
                                        }
@@ -301,15 +323,15 @@ namespace LongoMatch.Drawing
                        Selection sel;
 
                        coords = ToUserCoords (coords);
-                       if (Selections.Count == 0) {
-                               CursorMoved (coords);
-                               start = coords;
-                       } else if (moving) {
+                       if (moving && Selections.Count != 0) {
                                sel = Selections [0];
                                sel.Drawable.Move (sel, coords, start);  
                                widget.ReDraw (sel.Drawable);
                                SelectionMoved (sel);
                                start = coords;
+                       } else {
+                               CursorMoved (coords);
+                               start = coords;
                        }
                }
 
diff --git a/LongoMatch.Drawing/CanvasObjects/BenchObject.cs b/LongoMatch.Drawing/CanvasObjects/BenchObject.cs
index d485f7c..323fa99 100644
--- a/LongoMatch.Drawing/CanvasObjects/BenchObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/BenchObject.cs
@@ -35,6 +35,11 @@ namespace LongoMatch.Drawing.CanvasObjects
                        set;
                }
 
+               public bool SubstitutionMode {
+                       get;
+                       set;
+               }
+               
                public Point Position {
                        get;
                        set;
@@ -94,13 +99,15 @@ namespace LongoMatch.Drawing.CanvasObjects
                        tk.LineStyle = LineStyle.Normal;
 
                        foreach (PlayerObject po in BenchPlayers) {
+                               po.Playing = false;
+                               po.SubstitutionMode = SubstitutionMode;
                                po.Draw (tk, area);
                        }
                        
                        tk.End ();
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
                        Selection selection = null;
 
diff --git a/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs 
b/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
index 668742f..9909688 100644
--- a/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/CanvasObject.cs
@@ -63,6 +63,11 @@ namespace LongoMatch.Drawing.CanvasObjects
                        set;
                }
 
+               public virtual bool Highlighted {
+                       get;
+                       set;
+               }
+
                public virtual bool Selected {
                        set;
                        get;
@@ -139,9 +144,9 @@ namespace LongoMatch.Drawing.CanvasObjects
                        }
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
-                       Selection sel = Drawable.GetSelection (point, precision);
+                       Selection sel = Drawable.GetSelection (point, precision, inMotion);
                        if (sel != null) {
                                sel.Drawable = this;
                        }
diff --git a/LongoMatch.Drawing/CanvasObjects/FieldObject.cs b/LongoMatch.Drawing/CanvasObjects/FieldObject.cs
index b54292f..ff80412 100644
--- a/LongoMatch.Drawing/CanvasObjects/FieldObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/FieldObject.cs
@@ -53,6 +53,11 @@ namespace LongoMatch.Drawing.CanvasObjects
                        set;
                }
 
+               public bool SubstitutionMode {
+                       get;
+                       set;
+               }
+
                public void LoadTeams (Image backgroundImg, int[] homeF, int[] awayF,
                                       List<PlayerObject> homeT, List<PlayerObject> awayT,
                                       int size, int nteams)
@@ -132,18 +137,20 @@ namespace LongoMatch.Drawing.CanvasObjects
                        }
                        if (homePlayingPlayers != null) {
                                foreach (PlayerObject po in homePlayingPlayers) {
+                                       po.Playing = true;
                                        po.Draw (tk, area);
                                }
                        }
                        if (awayPlayingPlayers != null) {
                                foreach (PlayerObject po in awayPlayingPlayers) {
+                                       po.Playing = true;
                                        po.Draw (tk, area);
                                }
                        }
                        tk.End ();
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion)
                {
                        Selection selection = null;
 
diff --git a/LongoMatch.Drawing/CanvasObjects/PlayerObject.cs 
b/LongoMatch.Drawing/CanvasObjects/PlayerObject.cs
index cd29374..f79cfcd 100644
--- a/LongoMatch.Drawing/CanvasObjects/PlayerObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/PlayerObject.cs
@@ -37,7 +37,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        Player = player;
                        Init (position);
                }
-               
+
                void Init (Point pos = null) {
                        if (pos == null) {
                                pos = new Point (0, 0);
@@ -49,6 +49,41 @@ namespace LongoMatch.Drawing.CanvasObjects
                        Toggle = true;
                }
 
+               public ISurface Photo {
+                       set;
+                       protected get;
+               }
+
+               public ISurface Background {
+                       set;
+                       protected get;
+               }
+               
+               public ISurface Number {
+                       set;
+                       protected get;
+               }
+               
+               public ISurface Out {
+                       set;
+                       protected get;
+               }
+               
+               public ISurface In {
+                       set;
+                       protected get;
+               }
+               
+               public bool SubstitutionMode {
+                       get;
+                       set;
+               }
+               
+               public bool Playing {
+                       get;
+                       set;
+               }
+               
                public Player Player {
                        get;
                        set;
@@ -91,7 +126,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        set;
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
                        Point position = new Point (Position.X - Width / 2, Position.Y - Height / 2);
 
@@ -114,7 +149,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        double size, scale;
 
                        zero = new Point (0, 0);
-                       size = Config.Style.PlayerSize;
+                       size = Background.Height - StyleConf.PlayerLineWidth;
                        scale = Width / size; 
                        
                        tk.Begin ();
@@ -122,36 +157,33 @@ namespace LongoMatch.Drawing.CanvasObjects
                                              new Point (scale, scale));
 
                        /* Background */
-                       tk.LineStyle = LineStyle.Normal;
-                       tk.LineWidth = Config.Style.PlayerBorder;
-                       tk.FillColor = Config.Style.PaletteBackgroundDark;
-                       tk.StrokeColor = Config.Style.PaletteBackgroundDark;
-                       tk.DrawRoundedRectangle (zero, size, size, Config.Style.PlayerRadius);
+                       tk.DrawSurface (Background, zero);
                        
-                       if (!DrawPhoto || Player.Photo == null) {
-                               numberHeight = size;
-                               numberWidth = Config.Style.PlayerNumberWidth;
-                               p = new Point (Config.Style.PlayerNumberOffset, 0);
-                       } else {
-                               /* Image */
+                       /* Image */
+                       if (Player.Photo != null) {
                                tk.DrawImage (zero, size, size, Player.Photo, true);
-                               numberHeight = Config.Style.PlayerNumberHeight;
-                               numberWidth = Config.Style.PlayerNumberWidth;
-                               p = new Point (Config.Style.PlayerNumberOffset, size - numberHeight);
+                       } else {
+                               tk.DrawSurface (Photo, zero);
                        }
+                       numberHeight = StyleConf.PlayerNumberHeight;
+                       numberWidth = StyleConf.PlayerNumberWidth;
+                       p = new Point (StyleConf.PlayerNumberOffset, size - numberHeight);
                        
                        /* Draw background */
-                       tk.FillColor = Color;
-                       tk.StrokeColor = Color;
-                       tk.LineWidth = 0;
-                       tk.DrawRoundedRectangle (p, numberWidth, numberHeight, Config.Style.PlayerRadius);
+                       tk.DrawSurface (Number, zero);
+                       
+                       /* Draw Arrow */
+                       if (SubstitutionMode && (Highlighted || Active)) {
+                               ISurface arrow;
                                
-                       /* Draw bottom Line */
-                       tk.StrokeColor = Color;
-                       tk.FillColor = Color;
-                       tk.LineWidth = Config.Style.PlayerBorder;
-                       tk.DrawRoundedRectangle (new Point (0, size - Config.Style.PlayerTeamLineWidth),
-                                                size, Config.Style.PlayerTeamLineWidth + 1, 2);
+                               if (Playing) {
+                                       arrow = Out;
+                               } else {
+                                       arrow = In;
+                               }
+                               tk.DrawSurface (arrow, new Point (Background.Width / 2 - In.Width / 2,
+                                                                 Background.Height / 2 - In.Height / 2));
+                       }
                        
                        /* Draw number */
                        tk.FillColor = Color.White;
@@ -167,10 +199,10 @@ namespace LongoMatch.Drawing.CanvasObjects
                        /* Selection line */
                        if (Active) {
                                tk.LineStyle = LineStyle.Normal;
-                               tk.LineWidth = Config.Style.PlayerBorder;
+                               tk.LineWidth = StyleConf.PlayerLineWidth;
                                tk.FillColor = null;
                                tk.StrokeColor = Config.Style.PaletteActive;
-                               tk.DrawRoundedRectangle (zero, size + 1, size + 1, Config.Style.PlayerRadius);
+                               tk.DrawRoundedRectangle (zero, size + 1, size + 1, StyleConf.PlayerLineWidth);
                        }
                        
                        tk.End ();
diff --git a/LongoMatch.Drawing/CanvasObjects/PlayersTaggerObject.cs 
b/LongoMatch.Drawing/CanvasObjects/PlayersTaggerObject.cs
index a551624..e769b09 100644
--- a/LongoMatch.Drawing/CanvasObjects/PlayersTaggerObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/PlayersTaggerObject.cs
@@ -24,6 +24,7 @@ using LongoMatch.Common;
 using LongoMatch.Store.Drawables;
 using LongoMatch.Store;
 using LongoMatch.Handlers;
+using System.IO;
 
 namespace LongoMatch.Drawing.CanvasObjects
 {
@@ -35,10 +36,11 @@ namespace LongoMatch.Drawing.CanvasObjects
                 * For this reason we can't use the canvas selection logic and we have
                 * to handle it internally
                 */
-
                public event PlayersSubstitutionHandler PlayersSubstitutionEvent;
                public event PlayersSelectionChangedHandler PlayersSelectionChangedEvent;
-
+               /* Cached surfaces reused by player objects */
+               ISurface backgroundSurface, homeNumberSurface, awayNumberSurface, photoSurface;
+               ISurface homeInSurface, homeOutSurface, awayInSurface, awayOutSurface;
                TeamTemplate homeTeam, awayTeam;
                Image background;
                List<PlayerObject> homePlayingPlayers, awayPlayingPlayers;
@@ -49,6 +51,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                FieldObject field;
                int NTeams;
                Point offset;
+               bool substitutionMode;
                double scaleX, scaleY;
 
                public PlayersTaggerObject ()
@@ -58,6 +61,45 @@ namespace LongoMatch.Drawing.CanvasObjects
                        awayBench = new BenchObject ();
                        field = new FieldObject ();
                        SelectedPlayers = new List<Player> ();
+                       LoadSurfaces ();
+               }
+
+               protected override void Dispose (bool disposing)
+               {
+                       ClearPlayers ();
+                       if (photoSurface != null) {
+                               photoSurface.Dispose ();
+                               photoSurface = null;
+                       }
+                       if (backgroundSurface != null) {
+                               backgroundSurface.Dispose ();
+                               backgroundSurface = null;
+                       }
+                       if (homeNumberSurface != null) {
+                               homeNumberSurface.Dispose ();
+                               homeNumberSurface = null;
+                       } 
+                       if (awayNumberSurface != null) {
+                               awayNumberSurface.Dispose ();
+                               awayNumberSurface = null;
+                       }
+                       if (homeOutSurface != null) {
+                               homeOutSurface.Dispose ();
+                               homeOutSurface = null;
+                       } 
+                       if (awayOutSurface != null) {
+                               awayOutSurface.Dispose ();
+                               awayOutSurface = null;
+                       }
+                       if (homeInSurface != null) {
+                               homeInSurface.Dispose ();
+                               homeInSurface = null;
+                       } 
+                       if (awayInSurface != null) {
+                               awayInSurface.Dispose ();
+                               awayInSurface = null;
+                       }
+                       base.Dispose (disposing);
                }
 
                public Point Position {
@@ -76,16 +118,22 @@ namespace LongoMatch.Drawing.CanvasObjects
                }
 
                public bool SubstitutionMode {
-                       get;
-                       set;
+                       get {
+                               return substitutionMode;
+                       }
+                       set {
+                               substitutionMode = value;
+                               homeBench.SubstitutionMode = awayBench.SubstitutionMode = 
field.SubstitutionMode = value;
+                       }
                }
-               
+
                public List<Player> SelectedPlayers {
                        get;
                        set;
                }
 
-               public void Reload () {
+               public void Reload ()
+               {
                        LoadTeams (homeTeam, awayTeam, background);
                }
 
@@ -107,7 +155,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                                player.Active = false;
                        }
                }
-               
+
                public void Substitute (Player p1, Player p2, TeamTemplate team)
                {
                        if (team == homeTeam) {
@@ -139,6 +187,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                                field.Width = 300;
                                field.Height = 250;
                        }
+                       ClearPlayers ();
                        homePlayingPlayers = awayPlayingPlayers = null;
 
                        homePlayers = new List<PlayerObject> ();
@@ -181,6 +230,39 @@ namespace LongoMatch.Drawing.CanvasObjects
                        Update ();
                }
 
+               void ClearPlayers ()
+               {
+                       if (homePlayers != null) {
+                               foreach (PlayerObject po in homePlayers) {
+                                       po.Dispose ();
+                                       homePlayers = null;
+                               }
+                       }
+                       if (awayPlayers != null) {
+                               foreach (PlayerObject po in awayPlayers) {
+                                       po.Dispose ();
+                                       awayPlayers = null;
+                               }
+                       }
+               }
+               
+               ISurface CreateSurface (string name)
+               {
+                       
+                       return Config.DrawingToolkit.CreateSurface (Path.Combine (Config.ImagesDir, name));
+               }
+
+               void LoadSurfaces ()
+               {
+                       photoSurface = CreateSurface (StyleConf.PlayerPhoto);
+                       backgroundSurface = CreateSurface (StyleConf.PlayerBackground);
+                       homeNumberSurface = CreateSurface (StyleConf.PlayerHomeNumber);
+                       awayNumberSurface = CreateSurface (StyleConf.PlayerAwayNumber);
+                       homeOutSurface = CreateSurface (StyleConf.PlayerHomeOut);
+                       awayOutSurface = CreateSurface (StyleConf.PlayerAwayOut);
+                       homeInSurface = CreateSurface (StyleConf.PlayerHomeIn);
+                       awayInSurface = CreateSurface (StyleConf.PlayerAwayIn);
+               }
 
                void Substitute (PlayerObject p1, PlayerObject p2,
                                 List<PlayerObject> playingPlayers,
@@ -245,16 +327,27 @@ namespace LongoMatch.Drawing.CanvasObjects
                {
                        List<PlayerObject> playerObjects;
                        Color color = null;
+                       ISurface number, sin, sout;
 
                        if (team == Team.LOCAL) {
                                color = Config.Style.HomeTeamColor;
+                               number = homeNumberSurface;
+                               sin = homeInSurface;
+                               sout = homeOutSurface;
                        } else {
                                color = Config.Style.AwayTeamColor;
+                               number = awayNumberSurface;
+                               sin = awayInSurface;
+                               sout = awayOutSurface;
                        }
 
                        playerObjects = new List<PlayerObject> ();
                        foreach (Player p in players) {
-                               PlayerObject po = new PlayerObject { Player = p, Color = color, Team = team };
+                               PlayerObject po = new PlayerObject { Player = p, Color = color,
+                                       Team = team, Background = backgroundSurface,
+                                       Number =  number, In = sin, Out = sout,
+                                       SubstitutionMode =  SubstitutionMode,
+                                       Photo = photoSurface };
                                po.ClickedEvent += HandleClickedEvent;
                                playerObjects.Add (po);
                        }
@@ -303,18 +396,18 @@ namespace LongoMatch.Drawing.CanvasObjects
                        }
                        
                        point = Utils.ToUserCoords (point, offset, scaleX, scaleY);
-                       selection = homeBench.GetSelection (point, 0);
+                       selection = homeBench.GetSelection (point, 0, false);
                        if (selection == null) {
-                               selection = awayBench.GetSelection (point, 0);
+                               selection = awayBench.GetSelection (point, 0, false);
                                if (selection == null) {
-                                       selection = field.GetSelection (point, 0);
+                                       selection = field.GetSelection (point, 0, false);
                                }
                        }
                        if (selection != null) {
                                clickedPlayer = selection.Drawable as PlayerObject;
                                if (SubstitutionMode && substitutionPlayer != null &&
                                        clickedPlayer.Team != substitutionPlayer.Team) {
-                                       clickedPlayer= null;
+                                       clickedPlayer = null;
                                } else {
                                        (selection.Drawable as ICanvasObject).ClickPressed (point, modif);
                                }
@@ -354,13 +447,28 @@ namespace LongoMatch.Drawing.CanvasObjects
                        tk.End ();
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
-                       if (point.X < Position.X || point.X > Position.X + Width ||
-                               point.Y < Position.Y || point.Y > Position.Y + Height) {
-                               return null;
+                       Selection sel = null;
+
+                       if (!inMotion) {
+                               if (point.X < Position.X || point.X > Position.X + Width ||
+                                       point.Y < Position.Y || point.Y > Position.Y + Height) {
+                                       sel = null;
+                               } else {
+                                       sel = new Selection (this, SelectionPosition.All, 0);
+                               }
+                       } else {
+                               point = Utils.ToUserCoords (point, offset, scaleX, scaleY);
+                               sel = homeBench.GetSelection (point, 0, false);
+                               if (sel == null) {
+                                       sel = awayBench.GetSelection (point, 0, false);
+                                       if (sel == null) {
+                                               sel = field.GetSelection (point, 0, false);
+                                       }
+                               }
                        }
-                       return new Selection (this, SelectionPosition.All, 0);
+                       return sel;
                }
 
                public void Move (Selection s, Point p, Point start)
diff --git a/LongoMatch.Drawing/CanvasObjects/PositionObject.cs 
b/LongoMatch.Drawing/CanvasObjects/PositionObject.cs
index ba16578..2020388 100644
--- a/LongoMatch.Drawing/CanvasObjects/PositionObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/PositionObject.cs
@@ -82,7 +82,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        }
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
                        if (point.Distance (Start) < precision) {
                                return new Selection (this, SelectionPosition.LineStart);
diff --git a/LongoMatch.Drawing/CanvasObjects/TaggerObject.cs 
b/LongoMatch.Drawing/CanvasObjects/TaggerObject.cs
index bc7d7bd..1a6fabe 100644
--- a/LongoMatch.Drawing/CanvasObjects/TaggerObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/TaggerObject.cs
@@ -74,7 +74,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        set;
                }
 
-               public virtual Selection GetSelection (Point p, double precision)
+               public Selection GetSelection (Point p, double precision, bool inMotion=false)
                {
                        Selection s;
 
diff --git a/LongoMatch.Drawing/CanvasObjects/TimeNodeObject.cs 
b/LongoMatch.Drawing/CanvasObjects/TimeNodeObject.cs
index 22d0c3a..77ac924 100644
--- a/LongoMatch.Drawing/CanvasObjects/TimeNodeObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/TimeNodeObject.cs
@@ -95,7 +95,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        }
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
                        double accuracy;
                        if (point.Y >= OffsetY && point.Y < OffsetY + Height) {
diff --git a/LongoMatch.Drawing/CanvasObjects/TimelineObject.cs 
b/LongoMatch.Drawing/CanvasObjects/TimelineObject.cs
index f1b9f7a..efa01af 100644
--- a/LongoMatch.Drawing/CanvasObjects/TimelineObject.cs
+++ b/LongoMatch.Drawing/CanvasObjects/TimelineObject.cs
@@ -126,7 +126,7 @@ namespace LongoMatch.Drawing.CanvasObjects
                        tk.End ();
                }
 
-               public Selection GetSelection (Point point, double precision)
+               public Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
                        Selection selection = null;
 
diff --git a/LongoMatch.Drawing/Widgets/Dashboard.cs b/LongoMatch.Drawing/Widgets/Dashboard.cs
index ddc6de8..8199454 100644
--- a/LongoMatch.Drawing/Widgets/Dashboard.cs
+++ b/LongoMatch.Drawing/Widgets/Dashboard.cs
@@ -187,6 +187,9 @@ namespace LongoMatch.Drawing.Widgets
 
                void LoadTemplate ()
                {
+                       foreach (CanvasObject co in Objects) {
+                               co.Dispose ();
+                       }
                        Objects.Clear ();
                        foreach (TagButton tag in template.CommonTags) {
                                TagObject to = new TagObject (tag);
diff --git a/LongoMatch.Drawing/Widgets/TeamTagger.cs b/LongoMatch.Drawing/Widgets/TeamTagger.cs
index 5b18493..1366916 100644
--- a/LongoMatch.Drawing/Widgets/TeamTagger.cs
+++ b/LongoMatch.Drawing/Widgets/TeamTagger.cs
@@ -25,6 +25,7 @@ using LongoMatch.Store.Templates;
 using LongoMatch.Drawing.CanvasObjects;
 using LongoMatch.Store;
 using LongoMatch.Handlers;
+using System.IO;
 
 namespace LongoMatch.Drawing.Widgets
 {
@@ -33,9 +34,7 @@ namespace LongoMatch.Drawing.Widgets
        
                public event PlayersSelectionChangedHandler PlayersSelectionChangedEvent;
                public event PlayersPropertiesHandler ShowMenuEvent;
-
                PlayersTaggerObject tagger;
-               Point offset;
                MultiSelectionMode prevMode;
                bool inSubs;
 
@@ -51,13 +50,14 @@ namespace LongoMatch.Drawing.Widgets
                        Objects.Add (tagger);
                }
 
-               public void LoadTeams (TeamTemplate homeTeam, TeamTemplate awayTeam, Image background)
+                       public void LoadTeams (TeamTemplate homeTeam, TeamTemplate awayTeam, Image background)
                {
                        tagger.LoadTeams (homeTeam, awayTeam, background);
                        widget.ReDraw ();
                }
-               
-               public void Reload () {
+
+               public void Reload ()
+               {
                        tagger.Reload ();
                }
 
@@ -66,26 +66,28 @@ namespace LongoMatch.Drawing.Widgets
                                tagger.SubstitutionMode = value;
                        }
                }
-               
-               public void Select (Player p) {
+
+               public void Select (Player p)
+               {
                }
-               
+
                protected override void ShowMenu (Point coords)
                {
                        Selection sel = tagger.GetSelection (coords, 0);
                        
                        if (sel != null && ShowMenuEvent != null) {
                                PlayerObject po = sel.Drawable as PlayerObject;
-                               ShowMenuEvent (new List<Player> {po.Player});
+                               ShowMenuEvent (new List<Player> { po.Player });
                        }
                }
 
+
                void HandleSizeChangedEvent ()
                {
                        tagger.Width = widget.Width;
                        tagger.Height = widget.Height;
                }
-               
+
                void HandlePlayersSubstitutionEvent (Player p1, Player p2, TeamTemplate team)
                {
                        team.List.Swap (p1, p2);
diff --git a/Tests/Core/Drawables/TestDrawable.cs b/Tests/Core/Drawables/TestDrawable.cs
index df06ba3..e825540 100644
--- a/Tests/Core/Drawables/TestDrawable.cs
+++ b/Tests/Core/Drawables/TestDrawable.cs
@@ -24,7 +24,7 @@ namespace Tests.Core.Drawables
 {
        public class DrawableImp: Drawable
        {
-               public override Selection GetSelection (Point point, double precision)
+               public override Selection GetSelection (Point point, double precision, bool inMotion=false)
                {
                        throw new System.NotImplementedException ();
                }
diff --git a/data/images/player/away-in.svg b/data/images/player/away-in.svg
new file mode 100644
index 0000000..278c5de
--- /dev/null
+++ b/data/images/player/away-in.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="26px" height="20px" viewBox="0 0 26 20" enable-background="new 0 0 26 20" 
xml:space="preserve">
+<path id="reply_3_" fill="#D33B37" 
d="M0.181,19.463c0.019-0.359,0.547-5.609,16.023-5.609v4.81c0,0.326,0.196,0.622,0.503,0.741
+       c0.098,0.041,0.195,0.062,0.299,0.062c0.211,0,0.426-0.088,0.582-0.248l7.916-8.674l0.012-0.015
+       
c0.164-0.167,0.318-0.462,0.303-0.678c0.011-0.236-0.067-0.447-0.313-0.695l-7.916-8.671c-0.155-0.162-0.371-0.249-0.582-0.249
+       
c-0.103,0-0.2,0.018-0.299,0.057c-0.306,0.125-0.503,0.418-0.503,0.746v4.807C16.204,5.845,0.2,6.612,0.181,19.463z"/>
+</svg>
diff --git a/data/images/player/away-number.svg b/data/images/player/away-number.svg
new file mode 100644
index 0000000..ed3aaf5
--- /dev/null
+++ b/data/images/player/away-number.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="60px" height="60px" viewBox="0 0 60 60" enable-background="new 0 0 60 60" 
xml:space="preserve">
+<path fill="#D33B37" 
d="M43,57V44c0-1.104-0.594-2-1.698-2h-22C18.197,42,17,42.896,17,44v13H0v0.5C0,58.881,1.325,60,2.706,60h55
+       C59.087,60,60,58.881,60,57.5V57H43z"/>
+</svg>
diff --git a/data/images/player/away-out.svg b/data/images/player/away-out.svg
new file mode 100644
index 0000000..5bd5472
--- /dev/null
+++ b/data/images/player/away-out.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="26px" height="20px" viewBox="0 0 26 20" enable-background="new 0 0 26 20" 
xml:space="preserve">
+<path id="reply_3_" fill="#D33B37" 
d="M9.74,5.845V1.038c0-0.328-0.197-0.621-0.502-0.746C9.14,0.253,9.041,0.235,8.939,0.235
+       
c-0.212,0-0.426,0.087-0.582,0.249L0.44,9.155C0.194,9.403,0.116,9.614,0.127,9.85c-0.016,0.216,0.138,0.512,0.301,0.679
+       
l0.012,0.014l7.917,8.674c0.156,0.16,0.37,0.248,0.582,0.248c0.102,0,0.201-0.02,0.299-0.061c0.305-0.12,0.502-0.415,0.502-0.742
+       v-4.809c15.477,0,16.005,5.25,16.023,5.61C25.745,6.612,9.74,5.845,9.74,5.845z"/>
+</svg>
diff --git a/data/images/player/background.svg b/data/images/player/background.svg
new file mode 100644
index 0000000..1e1efdd
--- /dev/null
+++ b/data/images/player/background.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="60px" height="60px" viewBox="0 0 60 60" enable-background="new 0 0 60 60" 
xml:space="preserve">
+<path fill="#151A20" d="M60,2c0-1.381-0.913-2-2.294-2h-55C1.325,0,0,0.619,0,2v55h60V2z"/>
+</svg>
diff --git a/data/images/player/home-in.svg b/data/images/player/home-in.svg
new file mode 100644
index 0000000..e4c5510
--- /dev/null
+++ b/data/images/player/home-in.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="26px" height="20px" viewBox="0 0 26 20" enable-background="new 0 0 26 20" 
xml:space="preserve">
+<path id="reply_3_" fill="#0180AC" 
d="M0.181,19.463c0.019-0.359,0.547-5.609,16.023-5.609v4.809c0,0.326,0.197,0.622,0.503,0.742
+       c0.098,0.041,0.196,0.061,0.299,0.061c0.211,0,0.426-0.088,0.582-0.248l7.916-8.674l0.012-0.014
+       
c0.164-0.167,0.318-0.463,0.302-0.679c0.011-0.236-0.067-0.447-0.313-0.695l-7.916-8.671c-0.156-0.162-0.371-0.249-0.582-0.249
+       
c-0.103,0-0.201,0.018-0.299,0.057c-0.306,0.125-0.503,0.418-0.503,0.746v4.807C16.204,5.845,0.2,6.612,0.181,19.463z"/>
+</svg>
diff --git a/data/images/player/home-number.svg b/data/images/player/home-number.svg
new file mode 100644
index 0000000..5049a99
--- /dev/null
+++ b/data/images/player/home-number.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="60px" height="60px" viewBox="0 0 60 60" enable-background="new 0 0 60 60" 
xml:space="preserve">
+<path fill="#0180AC" 
d="M43,57V44c0-1.104-0.594-2-1.698-2h-22C18.197,42,17,42.896,17,44v13H0v0.5C0,58.881,1.325,60,2.706,60h55
+       C59.087,60,60,58.881,60,57.5V57H43z"/>
+</svg>
diff --git a/data/images/player/home-out.svg b/data/images/player/home-out.svg
new file mode 100644
index 0000000..cfb6af6
--- /dev/null
+++ b/data/images/player/home-out.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        width="26px" height="20px" viewBox="0 0 26 20" enable-background="new 0 0 26 20" 
xml:space="preserve">
+<path id="reply_3_" fill="#0180AC" 
d="M9.74,5.845V1.038c0-0.328-0.197-0.621-0.502-0.746C9.14,0.253,9.041,0.235,8.939,0.235
+       
c-0.212,0-0.426,0.087-0.582,0.249L0.44,9.155C0.194,9.403,0.116,9.614,0.127,9.85c-0.016,0.216,0.138,0.512,0.301,0.679
+       
l0.012,0.014l7.917,8.674c0.156,0.16,0.37,0.248,0.582,0.248c0.102,0,0.201-0.02,0.299-0.061c0.305-0.12,0.502-0.415,0.502-0.742
+       v-4.809c15.477,0,16.005,5.25,16.023,5.61C25.745,6.612,9.74,5.845,9.74,5.845z"/>
+</svg>
diff --git a/data/images/player/photo.svg b/data/images/player/photo.svg
new file mode 100644
index 0000000..7f74b17
--- /dev/null
+++ b/data/images/player/photo.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   width="60.00016"
+   height="60"
+   viewBox="0 0 60.00016 60"
+   enable-background="new 0 0 36 36"
+   xml:space="preserve"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="photo.svg"><metadata
+     id="metadata13"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; /></cc:Work></rdf:RDF></metadata><defs
+     id="defs11" /><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1059"
+     inkscape:window-height="754"
+     id="namedview9"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="5.8727203"
+     inkscape:cx="19.268877"
+     inkscape:cy="30.001267"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="Layer_1" /><path
+     id="plus_12_"
+     d="m 1742.6266,845.451 c -0.297,0 -0.535,-0.238 -0.535,-0.535 v -5.23 h -5.229 c -0.298,0 -0.537,-0.239 
-0.537,-0.534 v -3.461 c 0,-0.298 0.239,-0.535 0.537,-0.535 h 5.229 v -5.23 c 0,-0.299 0.238,-0.537 
0.535,-0.537 h 3.461 c 0.296,0 0.536,0.238 0.536,0.537 v 5.23 h 5.229 c 0.298,0 0.537,0.237 0.537,0.535 v 
3.461 c 0,0.295 -0.239,0.534 -0.537,0.534 h -5.229 v 5.23 c 0,0.297 -0.24,0.535 -0.536,0.535 h -3.461 z"
+     inkscape:connector-curvature="0"
+     style="fill:#6a6a6a" /><g
+     id="usericon"
+     transform="matrix(2.1595997,0,0,2.1596717,-8.8716356,-8.874091)"><path
+       d="m 30.156,26.683 -9.551,-3.474 h -5.21 l -9.55,3.474 c 0,0 -1.737,0.27 -1.737,1.735 v 1.738 c 
0,0.959 0.778,1.735 1.737,1.735 h 24.311 c 0.959,0 1.735,-0.776 1.735,-1.735 v -1.738 c 0.001,-1.439 
-1.735,-1.735 -1.735,-1.735 z"
+       id="path5"
+       inkscape:connector-curvature="0"
+       style="fill:#6a6a6a" /><path
+       d="m 18,21.474 c 4.341,0 6.945,-4.07 6.945,-6.946 v -4.342 c 0,-2.874 -3.109,-6.077 -6.945,-6.077 
-3.835,0 -6.946,3.203 -6.946,6.077 v 4.342 c 0,2.603 2.604,6.946 6.946,6.946 z"
+       id="path7"
+       inkscape:connector-curvature="0"
+       style="fill:#6a6a6a" /></g></svg>
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]