[longomatch] Add support to display drawings in the player again



commit 636d1ccf5b4f3c9c9b13d25f21fd7f6e03010a28
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Mon Jun 30 18:49:59 2014 +0200

    Add support to display drawings in the player again

 LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs         |   70 ++++-
 .../LongoMatch.GUI.Multimedia.mdp                  |    3 +
 .../gtk-gui/LongoMatch.Gui.PlayerBin.cs            |  328 ++++++++++----------
 LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic       |   28 +-
 4 files changed, 247 insertions(+), 182 deletions(-)
---
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
index 4140f68..e58b69e 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
@@ -18,6 +18,7 @@
 //
 //
 using System;
+using System.Linq;
 using Gtk;
 using Gdk;
 using Mono.Unix;
@@ -33,6 +34,8 @@ using LongoMatch.Video.Player;
 using LongoMatch.Video.Utils;
 using LongoMatch.Store;
 using LongoMatch.Multimedia.Utils;
+using LongoMatch.Drawing.Widgets;
+using LongoMatch.Drawing.Cairo;
 
 
 namespace LongoMatch.Gui
@@ -55,7 +58,8 @@ namespace LongoMatch.Gui
                const int THUMBNAIL_MAX_WIDTH = 100;
                const int SCALE_FPS = 25;
                IPlayer player;
-               Time length;
+               Play loadedPlay;
+               Time length, lastTime;
                bool seeking, IsPlayingPrevState, muted, emitRateScale, readyToSeek;
                string filename;
                double previousVLevel = 1;
@@ -64,6 +68,7 @@ namespace LongoMatch.Gui
                protected VolumeWindow vwin;
                Seeker seeker;
                Segment segment;
+               Blackboard blackboard;
 
 
                #region Constructors
@@ -72,6 +77,7 @@ namespace LongoMatch.Gui
                        this.Build();
                        vwin = new VolumeWindow();
                        ConnectSignals ();
+                       blackboard = new Blackboard (new WidgetWrapper (blackboarddrawingarea));
                        controlsbox.Visible = false;
                        UnSensitive();
                        timescale.Adjustment.PageIncrement = 0.01;
@@ -86,6 +92,7 @@ namespace LongoMatch.Gui
                        seeker.SeekEvent += HandleSeekEvent;
                        segment.Start = new Time(-1);
                        segment.Stop = new Time(int.MaxValue);
+                       lastTime = new Time (0);
                        
                        CreatePlayer ();
                }
@@ -160,6 +167,7 @@ namespace LongoMatch.Gui
                }
 
                public void Play() {
+                       DrawingsVisible = false;
                        player.Play();
                }
 
@@ -184,6 +192,8 @@ namespace LongoMatch.Gui
                        IsPlayingPrevState = false;
                        muted=false;
                        emitRateScale = true;
+                       videodrawingarea.Visible = true;
+                       blackboarddrawingarea.Visible = false;
                }
 
                public void LoadPlayListPlay (PlayListPlay play, bool hasNext) {
@@ -197,6 +207,7 @@ namespace LongoMatch.Gui
                }
                
                public void LoadPlay (string filename, Play play, Time seekTime, bool playing) {
+                       loadedPlay = play;
                        LoadSegment (filename, play.Start, play.Stop, seekTime, playing, play.Rate);
                }
                
@@ -209,12 +220,14 @@ namespace LongoMatch.Gui
                }
 
                public void Seek (Time time, bool accurate) {
+                       DrawingsVisible = false;
                        player.Seek (time, accurate);
                        if(SeekEvent != null)
                                SeekEvent (time);
                }
 
                public void SeekToNextFrame () {
+                       DrawingsVisible = false;
                        if (player.CurrentTime < segment.Stop) {
                                player.SeekToNextFrame ();
                                if(SeekEvent != null)
@@ -223,24 +236,29 @@ namespace LongoMatch.Gui
                }
 
                public void SeekToPreviousFrame () {
+                       DrawingsVisible = false;
                        if (player.CurrentTime > segment.Start) {
                                seeker.Seek (SeekType.StepDown);
                        }
                }
 
                public void StepForward() {
+                       DrawingsVisible = false;
                        Jump((int)jumpspinbutton.Value);
                }
 
                public void StepBackward() {
+                       DrawingsVisible = false;
                        Jump(-(int)jumpspinbutton.Value);
                }
                
                public void FramerateUp() {
+                       DrawingsVisible = false;
                        vscale1.Adjustment.Value += vscale1.Adjustment.StepIncrement;
                }
 
                public void FramerateDown() {
+                       DrawingsVisible = false;
                        vscale1.Adjustment.Value -= vscale1.Adjustment.StepIncrement;
                }
 
@@ -250,6 +268,7 @@ namespace LongoMatch.Gui
                        segment.Stop = new Time (int.MaxValue);
                        SetScaleValue (SCALE_FPS);
                        //timescale.Sensitive = true;
+                       loadedPlay = null;
                        Config.EventsBroker.EmitSegmentClosed ();
                }
 
@@ -267,6 +286,13 @@ namespace LongoMatch.Gui
 
                #region Private methods
 
+               bool DrawingsVisible {
+                       set {
+                               videodrawingarea.Visible = !value;
+                               blackboarddrawingarea.Visible = value;
+                       }
+               }
+               
                void Open(string filename, bool seek) {
                        ResetGui();
                        CloseSegment();
@@ -317,7 +343,7 @@ namespace LongoMatch.Gui
                        if (filename != this.filename) {
                                Open (filename, false);
                        }
-                       player.Pause();
+                       Pause ();
                        segment.Start = start;
                        segment.Stop = stop;
                        rate = rate == 0 ? 1 : rate;
@@ -329,7 +355,7 @@ namespace LongoMatch.Gui
                                player.Rate = (double) rate;
                                player.Seek (seekTime, true);
                                if (playing) {
-                                       player.Play ();
+                                       Play ();
                                }
                        } else {
                                Log.Debug ("Delaying seek until player is ready");
@@ -337,6 +363,17 @@ namespace LongoMatch.Gui
                        }
                }
 
+               void LoadDrawing (FrameDrawing drawing) {
+                       Pause ();
+                       player.Tick -= OnTick;
+                       player.Seek (drawing.Render, true);
+                       player.Tick += OnTick;
+                       blackboard.Background = player.GetCurrentFrame () ;
+                       blackboard.Drawing = drawing;
+                       DrawingsVisible = true;
+                       blackboarddrawingarea.QueueDraw ();
+                       videodrawingarea.Visible = false;
+               }
 
                void SetScaleValue (int value) {
                        emitRateScale = false;
@@ -362,6 +399,7 @@ namespace LongoMatch.Gui
                        if (pos.MSeconds < 0)
                                pos.MSeconds = 0;
                        Log.Debug (String.Format("Stepping {0} seconds from {1} to {2}", jump, CurrentTime, 
pos));
+                       DrawingsVisible = false;
                        Seek (pos, true);
                }
 
@@ -369,7 +407,7 @@ namespace LongoMatch.Gui
                        if(SegmentLoaded) {
                                Time duration = segment.Stop - segment.Start;
                                Time seekPos = segment.Start + duration * pos;
-                               seeker.Seek (SeekType.Keyframe, seekPos);
+                               seeker.Seek (SeekType.Accurate, seekPos);
                                timelabel.Text = seekPos.ToMSecondsString() + "/" + 
duration.ToMSecondsString();
                        }
                        else {
@@ -424,7 +462,7 @@ namespace LongoMatch.Gui
                                player.Rate = (float) pendingSeek [1];
                                player.Seek ((Time)pendingSeek[0], true);
                                if ((bool)pendingSeek[2]) {
-                                       player.Play();
+                                       Play();
                                }
                                pendingSeek = null;
                        }
@@ -443,13 +481,19 @@ namespace LongoMatch.Gui
 
                                dur = segment.Stop - segment.Start;
                                if (currentTime > segment.Stop) {
-                                       player.Pause ();
+                                       Pause();
                                }
                                ct = currentTime - segment.Start;
                                cp = (float)ct.MSeconds/(float)(dur.MSeconds);
                                slength = dur.ToMSecondsString();
                                timelabel.Text = ct.ToMSecondsString() + "/" + slength;
                                timescale.Value = cp;
+                               if (loadedPlay != null && loadedPlay.Drawings.Count > 0) {
+                                       FrameDrawing fd = loadedPlay.Drawings.FirstOrDefault (f => f.Render > 
lastTime &&  f.Render <= currentTime);
+                                       if (fd != null) {
+                                               LoadDrawing (fd);
+                                       }
+                               }
                        } else {
                                slength = length.ToMSecondsString ();
                                timelabel.Text = currentTime.ToMSecondsString() + "/" + slength;
@@ -457,6 +501,7 @@ namespace LongoMatch.Gui
                                        timescale.Value = currentPosition;
                                }
                        }
+                       lastTime = currentTime;
 
                        if (Tick != null) {
                                Tick (currentTime, streamLength, currentPosition);
@@ -473,7 +518,7 @@ namespace LongoMatch.Gui
                                seeking = true;
                                IsPlayingPrevState = player.Playing;
                                player.Tick -= OnTick;
-                               player.Pause();
+                               Pause ();
                                seeksQueue [0] = -1;
                                seeksQueue [1] = -1;
                        }
@@ -494,7 +539,7 @@ namespace LongoMatch.Gui
                                seeking=false;
                                player.Tick += OnTick;
                                if(IsPlayingPrevState)
-                                       player.Play();
+                                       Play ();
                        }
                }
 
@@ -524,12 +569,12 @@ namespace LongoMatch.Gui
 
                void OnPausebuttonClicked(object sender, System.EventArgs e)
                {
-                       player.Pause();
+                       Pause ();
                }
 
                void OnEndOfStream(object o, EventArgs args) {
                        player.Seek (new Time (0), true);
-                       player.Pause();
+                       Pause ();
                }
 
                void OnError(string message) {
@@ -539,7 +584,7 @@ namespace LongoMatch.Gui
                void OnClosebuttonClicked(object sender, System.EventArgs e)
                {
                        CloseSegment();
-                       player.Play ();
+                       Play ();
                }
 
                void OnPrevbuttonClicked(object sender, System.EventArgs e)
@@ -629,10 +674,11 @@ namespace LongoMatch.Gui
                
                void HandleSeekEvent (SeekType type, Time start, float rate)
                {
+                       DrawingsVisible = false;
                        /* We only use it for backwards framestepping for now */
                        if (type == SeekType.StepDown || type == SeekType.StepUp) {
                                if(player.Playing)
-                                       player.Pause ();
+                                       Pause ();
                                if (type == SeekType.StepDown)
                                        player.SeekToPreviousFrame ();
                                else
diff --git a/LongoMatch.GUI.Multimedia/LongoMatch.GUI.Multimedia.mdp 
b/LongoMatch.GUI.Multimedia/LongoMatch.GUI.Multimedia.mdp
index 814f60d..750461c 100644
--- a/LongoMatch.GUI.Multimedia/LongoMatch.GUI.Multimedia.mdp
+++ b/LongoMatch.GUI.Multimedia/LongoMatch.GUI.Multimedia.mdp
@@ -52,6 +52,9 @@
     <ProjectReference type="Package" localcopy="True" refto="System.Drawing, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.GUI.Helpers" />
     <ProjectReference type="Package" localcopy="False" refto="atk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Drawing" />
+    <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Drawing.Cairo" />
   </References>
   <LanguageParameters ApplicationIcon="." CodePage="65001" ctype="CSharpProjectParameters" />
 </Project>
\ No newline at end of file
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs 
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
index 4ceac28..050f1aa 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
@@ -8,9 +8,10 @@ namespace LongoMatch.Gui
                private global::Gtk.HBox mainbox;
                private global::Gtk.VBox vbox2;
                private global::Gtk.HBox videobox;
-               private global::Gtk.HBox hbox2;
                private global::Gtk.EventBox videoeventbox;
+               private global::Gtk.HBox hbox2;
                private global::Gtk.DrawingArea videodrawingarea;
+               private global::Gtk.DrawingArea blackboarddrawingarea;
                private global::Gtk.VBox vbox5;
                private global::Gtk.VScale vscale1;
                private global::Gtk.HBox controlsbox;
@@ -53,29 +54,35 @@ namespace LongoMatch.Gui
                        this.videobox.Name = "videobox";
                        this.videobox.Spacing = 6;
                        // Container child videobox.Gtk.Box+BoxChild
+                       this.videoeventbox = new global::Gtk.EventBox ();
+                       this.videoeventbox.Name = "videoeventbox";
+                       // Container child videoeventbox.Gtk.Container+ContainerChild
                        this.hbox2 = new global::Gtk.HBox ();
                        this.hbox2.Name = "hbox2";
                        this.hbox2.Spacing = 6;
                        // Container child hbox2.Gtk.Box+BoxChild
-                       this.videoeventbox = new global::Gtk.EventBox ();
-                       this.videoeventbox.Name = "videoeventbox";
-                       // Container child videoeventbox.Gtk.Container+ContainerChild
                        this.videodrawingarea = new global::Gtk.DrawingArea ();
                        this.videodrawingarea.CanFocus = true;
                        this.videodrawingarea.Name = "videodrawingarea";
-                       this.videoeventbox.Add (this.videodrawingarea);
-                       this.hbox2.Add (this.videoeventbox);
-                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.videoeventbox]));
-                       w2.Position = 0;
-                       this.videobox.Add (this.hbox2);
-                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.videobox 
[this.hbox2]));
-                       w3.Position = 0;
-                       this.vbox2.Add (this.videobox);
-                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.videobox]));
+                       this.hbox2.Add (this.videodrawingarea);
+                       global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.videodrawingarea]));
+                       w1.Position = 0;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.blackboarddrawingarea = new global::Gtk.DrawingArea ();
+                       this.blackboarddrawingarea.Name = "blackboarddrawingarea";
+                       this.hbox2.Add (this.blackboarddrawingarea);
+                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.blackboarddrawingarea]));
+                       w2.Position = 1;
+                       this.videoeventbox.Add (this.hbox2);
+                       this.videobox.Add (this.videoeventbox);
+                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.videobox 
[this.videoeventbox]));
                        w4.Position = 0;
-                       this.mainbox.Add (this.vbox2);
-                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.mainbox [this.vbox2]));
+                       this.vbox2.Add (this.videobox);
+                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.videobox]));
                        w5.Position = 0;
+                       this.mainbox.Add (this.vbox2);
+                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.mainbox [this.vbox2]));
+                       w6.Position = 0;
                        // Container child mainbox.Gtk.Box+BoxChild
                        this.vbox5 = new global::Gtk.VBox ();
                        this.vbox5.Name = "vbox5";
@@ -97,16 +104,16 @@ namespace LongoMatch.Gui
                        this.vscale1.Digits = 0;
                        this.vscale1.ValuePos = ((global::Gtk.PositionType)(3));
                        this.vbox5.Add (this.vscale1);
-                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox5 [this.vscale1]));
-                       w6.Position = 0;
+                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.vbox5 [this.vscale1]));
+                       w7.Position = 0;
                        this.mainbox.Add (this.vbox5);
-                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.mainbox [this.vbox5]));
-                       w7.Position = 1;
-                       w7.Expand = false;
-                       w7.Fill = false;
+                       global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.mainbox [this.vbox5]));
+                       w8.Position = 1;
+                       w8.Expand = false;
+                       w8.Fill = false;
                        this.vbox3.Add (this.mainbox);
-                       global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.mainbox]));
-                       w8.Position = 0;
+                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.mainbox]));
+                       w9.Position = 0;
                        // Container child vbox3.Gtk.Box+BoxChild
                        this.controlsbox = new global::Gtk.HBox ();
                        this.controlsbox.Name = "controlsbox";
@@ -120,120 +127,120 @@ namespace LongoMatch.Gui
                        this.closebutton.Name = "closebutton";
                        this.closebutton.UseUnderline = true;
                        // Container child closebutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w9 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w10 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w10 = new global::Gtk.HBox ();
-                       w10.Spacing = 2;
+                       global::Gtk.HBox w11 = new global::Gtk.HBox ();
+                       w11.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w11 = new global::Gtk.Image ();
-                       w11.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-close", 
global::Gtk.IconSize.Dnd);
-                       w10.Add (w11);
+                       global::Gtk.Image w12 = new global::Gtk.Image ();
+                       w12.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-close", 
global::Gtk.IconSize.Dnd);
+                       w11.Add (w12);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w13 = new global::Gtk.Label ();
-                       w10.Add (w13);
-                       w9.Add (w10);
-                       this.closebutton.Add (w9);
+                       global::Gtk.Label w14 = new global::Gtk.Label ();
+                       w11.Add (w14);
+                       w10.Add (w11);
+                       this.closebutton.Add (w10);
                        this.buttonsbox.Add (this.closebutton);
-                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.closebutton]));
-                       w17.Position = 0;
-                       w17.Expand = false;
-                       w17.Fill = false;
+                       global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.closebutton]));
+                       w18.Position = 0;
+                       w18.Expand = false;
+                       w18.Fill = false;
                        // Container child buttonsbox.Gtk.Box+BoxChild
                        this.drawbutton = new global::Gtk.Button ();
                        this.drawbutton.Name = "drawbutton";
                        this.drawbutton.UseUnderline = true;
                        this.drawbutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child drawbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w18 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w19 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w19 = new global::Gtk.HBox ();
-                       w19.Spacing = 2;
+                       global::Gtk.HBox w20 = new global::Gtk.HBox ();
+                       w20.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w20 = new global::Gtk.Image ();
-                       w20.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-select-color", 
global::Gtk.IconSize.Menu);
-                       w19.Add (w20);
+                       global::Gtk.Image w21 = new global::Gtk.Image ();
+                       w21.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-select-color", 
global::Gtk.IconSize.Menu);
+                       w20.Add (w21);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w22 = new global::Gtk.Label ();
-                       w19.Add (w22);
-                       w18.Add (w19);
-                       this.drawbutton.Add (w18);
+                       global::Gtk.Label w23 = new global::Gtk.Label ();
+                       w20.Add (w23);
+                       w19.Add (w20);
+                       this.drawbutton.Add (w19);
                        this.buttonsbox.Add (this.drawbutton);
-                       global::Gtk.Box.BoxChild w26 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.drawbutton]));
-                       w26.Position = 1;
-                       w26.Expand = false;
-                       w26.Fill = false;
+                       global::Gtk.Box.BoxChild w27 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.drawbutton]));
+                       w27.Position = 1;
+                       w27.Expand = false;
+                       w27.Fill = false;
                        // Container child buttonsbox.Gtk.Box+BoxChild
                        this.playbutton = new global::Gtk.Button ();
                        this.playbutton.Name = "playbutton";
                        this.playbutton.UseUnderline = true;
                        this.playbutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child playbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w27 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w28 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w28 = new global::Gtk.HBox ();
-                       w28.Spacing = 2;
+                       global::Gtk.HBox w29 = new global::Gtk.HBox ();
+                       w29.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w29 = new global::Gtk.Image ();
-                       w29.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-play", 
global::Gtk.IconSize.Button);
-                       w28.Add (w29);
+                       global::Gtk.Image w30 = new global::Gtk.Image ();
+                       w30.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-play", 
global::Gtk.IconSize.Button);
+                       w29.Add (w30);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w31 = new global::Gtk.Label ();
-                       w28.Add (w31);
-                       w27.Add (w28);
-                       this.playbutton.Add (w27);
+                       global::Gtk.Label w32 = new global::Gtk.Label ();
+                       w29.Add (w32);
+                       w28.Add (w29);
+                       this.playbutton.Add (w28);
                        this.buttonsbox.Add (this.playbutton);
-                       global::Gtk.Box.BoxChild w35 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.playbutton]));
-                       w35.Position = 2;
-                       w35.Expand = false;
-                       w35.Fill = false;
+                       global::Gtk.Box.BoxChild w36 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.playbutton]));
+                       w36.Position = 2;
+                       w36.Expand = false;
+                       w36.Fill = false;
                        // Container child buttonsbox.Gtk.Box+BoxChild
                        this.pausebutton = new global::Gtk.Button ();
                        this.pausebutton.Name = "pausebutton";
                        this.pausebutton.UseUnderline = true;
                        this.pausebutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child pausebutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w36 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w37 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w37 = new global::Gtk.HBox ();
-                       w37.Spacing = 2;
+                       global::Gtk.HBox w38 = new global::Gtk.HBox ();
+                       w38.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w38 = new global::Gtk.Image ();
-                       w38.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-pause", 
global::Gtk.IconSize.Button);
-                       w37.Add (w38);
+                       global::Gtk.Image w39 = new global::Gtk.Image ();
+                       w39.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-pause", 
global::Gtk.IconSize.Button);
+                       w38.Add (w39);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w40 = new global::Gtk.Label ();
-                       w37.Add (w40);
-                       w36.Add (w37);
-                       this.pausebutton.Add (w36);
+                       global::Gtk.Label w41 = new global::Gtk.Label ();
+                       w38.Add (w41);
+                       w37.Add (w38);
+                       this.pausebutton.Add (w37);
                        this.buttonsbox.Add (this.pausebutton);
-                       global::Gtk.Box.BoxChild w44 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.pausebutton]));
-                       w44.Position = 3;
-                       w44.Expand = false;
-                       w44.Fill = false;
+                       global::Gtk.Box.BoxChild w45 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.pausebutton]));
+                       w45.Position = 3;
+                       w45.Expand = false;
+                       w45.Fill = false;
                        // Container child buttonsbox.Gtk.Box+BoxChild
                        this.prevbutton = new global::Gtk.Button ();
                        this.prevbutton.Name = "prevbutton";
                        this.prevbutton.UseUnderline = true;
                        this.prevbutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child prevbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w45 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w46 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w46 = new global::Gtk.HBox ();
-                       w46.Spacing = 2;
+                       global::Gtk.HBox w47 = new global::Gtk.HBox ();
+                       w47.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w47 = new global::Gtk.Image ();
-                       w47.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-previous", 
global::Gtk.IconSize.Button);
-                       w46.Add (w47);
+                       global::Gtk.Image w48 = new global::Gtk.Image ();
+                       w48.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-previous", 
global::Gtk.IconSize.Button);
+                       w47.Add (w48);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w49 = new global::Gtk.Label ();
-                       w46.Add (w49);
-                       w45.Add (w46);
-                       this.prevbutton.Add (w45);
+                       global::Gtk.Label w50 = new global::Gtk.Label ();
+                       w47.Add (w50);
+                       w46.Add (w47);
+                       this.prevbutton.Add (w46);
                        this.buttonsbox.Add (this.prevbutton);
-                       global::Gtk.Box.BoxChild w53 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.prevbutton]));
-                       w53.Position = 4;
-                       w53.Expand = false;
-                       w53.Fill = false;
+                       global::Gtk.Box.BoxChild w54 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.prevbutton]));
+                       w54.Position = 4;
+                       w54.Expand = false;
+                       w54.Fill = false;
                        // Container child buttonsbox.Gtk.Box+BoxChild
                        this.nextbutton = new global::Gtk.Button ();
                        this.nextbutton.Sensitive = false;
@@ -241,29 +248,29 @@ namespace LongoMatch.Gui
                        this.nextbutton.UseUnderline = true;
                        this.nextbutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child nextbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w54 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w55 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w55 = new global::Gtk.HBox ();
-                       w55.Spacing = 2;
+                       global::Gtk.HBox w56 = new global::Gtk.HBox ();
+                       w56.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w56 = new global::Gtk.Image ();
-                       w56.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-next", 
global::Gtk.IconSize.Button);
-                       w55.Add (w56);
+                       global::Gtk.Image w57 = new global::Gtk.Image ();
+                       w57.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-media-next", 
global::Gtk.IconSize.Button);
+                       w56.Add (w57);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w58 = new global::Gtk.Label ();
-                       w55.Add (w58);
-                       w54.Add (w55);
-                       this.nextbutton.Add (w54);
+                       global::Gtk.Label w59 = new global::Gtk.Label ();
+                       w56.Add (w59);
+                       w55.Add (w56);
+                       this.nextbutton.Add (w55);
                        this.buttonsbox.Add (this.nextbutton);
-                       global::Gtk.Box.BoxChild w62 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.nextbutton]));
-                       w62.Position = 5;
-                       w62.Expand = false;
-                       w62.Fill = false;
-                       this.controlsbox.Add (this.buttonsbox);
-                       global::Gtk.Box.BoxChild w63 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.buttonsbox]));
-                       w63.Position = 0;
+                       global::Gtk.Box.BoxChild w63 = ((global::Gtk.Box.BoxChild)(this.buttonsbox 
[this.nextbutton]));
+                       w63.Position = 5;
                        w63.Expand = false;
                        w63.Fill = false;
+                       this.controlsbox.Add (this.buttonsbox);
+                       global::Gtk.Box.BoxChild w64 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.buttonsbox]));
+                       w64.Position = 0;
+                       w64.Expand = false;
+                       w64.Fill = false;
                        // Container child controlsbox.Gtk.Box+BoxChild
                        this.hbox1 = new global::Gtk.HBox ();
                        this.hbox1.Name = "hbox1";
@@ -273,10 +280,10 @@ namespace LongoMatch.Gui
                        this.jumplabel.Name = "jumplabel";
                        this.jumplabel.LabelProp = global::Mono.Unix.Catalog.GetString ("Jump (s):");
                        this.hbox1.Add (this.jumplabel);
-                       global::Gtk.Box.BoxChild w64 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.jumplabel]));
-                       w64.Position = 0;
-                       w64.Expand = false;
-                       w64.Fill = false;
+                       global::Gtk.Box.BoxChild w65 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.jumplabel]));
+                       w65.Position = 0;
+                       w65.Expand = false;
+                       w65.Fill = false;
                        // Container child hbox1.Gtk.Box+BoxChild
                        this.jumpspinbutton = new global::Gtk.SpinButton (1, 100, 1);
                        this.jumpspinbutton.TooltipMarkup = "Jump in seconds. Hold the Shift key with the 
direction keys to activate it.";
@@ -286,24 +293,24 @@ namespace LongoMatch.Gui
                        this.jumpspinbutton.Numeric = true;
                        this.jumpspinbutton.Value = 10;
                        this.hbox1.Add (this.jumpspinbutton);
-                       global::Gtk.Box.BoxChild w65 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.jumpspinbutton]));
-                       w65.Position = 1;
-                       w65.Expand = false;
-                       w65.Fill = false;
-                       this.controlsbox.Add (this.hbox1);
-                       global::Gtk.Box.BoxChild w66 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.hbox1]));
+                       global::Gtk.Box.BoxChild w66 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.jumpspinbutton]));
                        w66.Position = 1;
                        w66.Expand = false;
                        w66.Fill = false;
+                       this.controlsbox.Add (this.hbox1);
+                       global::Gtk.Box.BoxChild w67 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.hbox1]));
+                       w67.Position = 1;
+                       w67.Expand = false;
+                       w67.Fill = false;
                        // Container child controlsbox.Gtk.Box+BoxChild
                        this.tlabel = new global::Gtk.Label ();
                        this.tlabel.Name = "tlabel";
                        this.tlabel.LabelProp = global::Mono.Unix.Catalog.GetString ("Time:");
                        this.controlsbox.Add (this.tlabel);
-                       global::Gtk.Box.BoxChild w67 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.tlabel]));
-                       w67.Position = 2;
-                       w67.Expand = false;
-                       w67.Fill = false;
+                       global::Gtk.Box.BoxChild w68 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.tlabel]));
+                       w68.Position = 2;
+                       w68.Expand = false;
+                       w68.Fill = false;
                        // Container child controlsbox.Gtk.Box+BoxChild
                        this.timescale = new global::Gtk.HScale (null);
                        this.timescale.Name = "timescale";
@@ -316,72 +323,73 @@ namespace LongoMatch.Gui
                        this.timescale.Digits = 0;
                        this.timescale.ValuePos = ((global::Gtk.PositionType)(2));
                        this.controlsbox.Add (this.timescale);
-                       global::Gtk.Box.BoxChild w68 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.timescale]));
-                       w68.Position = 3;
+                       global::Gtk.Box.BoxChild w69 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.timescale]));
+                       w69.Position = 3;
                        // Container child controlsbox.Gtk.Box+BoxChild
                        this.timelabel = new global::Gtk.Label ();
                        this.timelabel.Name = "timelabel";
                        this.controlsbox.Add (this.timelabel);
-                       global::Gtk.Box.BoxChild w69 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.timelabel]));
-                       w69.Position = 4;
-                       w69.Expand = false;
+                       global::Gtk.Box.BoxChild w70 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.timelabel]));
+                       w70.Position = 4;
+                       w70.Expand = false;
                        // Container child controlsbox.Gtk.Box+BoxChild
                        this.volumebutton = new global::Gtk.Button ();
                        this.volumebutton.Name = "volumebutton";
                        this.volumebutton.UseUnderline = true;
                        this.volumebutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child volumebutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w70 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w71 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w71 = new global::Gtk.HBox ();
-                       w71.Spacing = 2;
+                       global::Gtk.HBox w72 = new global::Gtk.HBox ();
+                       w72.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w72 = new global::Gtk.Image ();
-                       w72.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "stock_volume", 
global::Gtk.IconSize.Button);
-                       w71.Add (w72);
+                       global::Gtk.Image w73 = new global::Gtk.Image ();
+                       w73.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "stock_volume", 
global::Gtk.IconSize.Button);
+                       w72.Add (w73);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w74 = new global::Gtk.Label ();
-                       w71.Add (w74);
-                       w70.Add (w71);
-                       this.volumebutton.Add (w70);
+                       global::Gtk.Label w75 = new global::Gtk.Label ();
+                       w72.Add (w75);
+                       w71.Add (w72);
+                       this.volumebutton.Add (w71);
                        this.controlsbox.Add (this.volumebutton);
-                       global::Gtk.Box.BoxChild w78 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.volumebutton]));
-                       w78.Position = 5;
-                       w78.Expand = false;
-                       w78.Fill = false;
+                       global::Gtk.Box.BoxChild w79 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.volumebutton]));
+                       w79.Position = 5;
+                       w79.Expand = false;
+                       w79.Fill = false;
                        // Container child controlsbox.Gtk.Box+BoxChild
                        this.detachbutton = new global::Gtk.Button ();
                        this.detachbutton.Name = "detachbutton";
                        this.detachbutton.UseUnderline = true;
                        this.detachbutton.Relief = ((global::Gtk.ReliefStyle)(2));
                        // Container child detachbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w79 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w80 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w80 = new global::Gtk.HBox ();
-                       w80.Spacing = 2;
+                       global::Gtk.HBox w81 = new global::Gtk.HBox ();
+                       w81.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w81 = new global::Gtk.Image ();
-                       w81.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-disconnect", 
global::Gtk.IconSize.Menu);
-                       w80.Add (w81);
+                       global::Gtk.Image w82 = new global::Gtk.Image ();
+                       w82.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-disconnect", 
global::Gtk.IconSize.Menu);
+                       w81.Add (w82);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w83 = new global::Gtk.Label ();
-                       w80.Add (w83);
-                       w79.Add (w80);
-                       this.detachbutton.Add (w79);
+                       global::Gtk.Label w84 = new global::Gtk.Label ();
+                       w81.Add (w84);
+                       w80.Add (w81);
+                       this.detachbutton.Add (w80);
                        this.controlsbox.Add (this.detachbutton);
-                       global::Gtk.Box.BoxChild w87 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.detachbutton]));
-                       w87.Position = 6;
-                       w87.Expand = false;
-                       w87.Fill = false;
-                       this.vbox3.Add (this.controlsbox);
-                       global::Gtk.Box.BoxChild w88 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.controlsbox]));
-                       w88.Position = 1;
+                       global::Gtk.Box.BoxChild w88 = ((global::Gtk.Box.BoxChild)(this.controlsbox 
[this.detachbutton]));
+                       w88.Position = 6;
                        w88.Expand = false;
                        w88.Fill = false;
+                       this.vbox3.Add (this.controlsbox);
+                       global::Gtk.Box.BoxChild w89 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.controlsbox]));
+                       w89.Position = 1;
+                       w89.Expand = false;
+                       w89.Fill = false;
                        this.Add (this.vbox3);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
+                       this.blackboarddrawingarea.Hide ();
                        this.closebutton.Hide ();
                        this.prevbutton.Hide ();
                        this.nextbutton.Hide ();
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
index 10b78c4..2a4f243 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
@@ -8,6 +8,7 @@
     <widget-library name="../../bin/LongoMatch.Multimedia.dll" />
     <widget-library name="../../bin/LongoMatch.GUI.Helpers.dll" />
     <widget-library name="../../bin/LongoMatch.GUI.Multimedia.dll" internal="true" />
+    <widget-library name="../../LongoMatch.Drawing.Cairo/bin/Debug/LongoMatch.Drawing.Cairo.dll" />
   </import>
   <widget class="Gtk.Window" id="LongoMatch.Gui.VolumeWindow" design-size="31 204">
     <property name="MemberName" />
@@ -93,26 +94,33 @@
                     <property name="MemberName" />
                     <property name="Spacing">6</property>
                     <child>
-                      <widget class="Gtk.HBox" id="hbox2">
+                      <widget class="Gtk.EventBox" id="videoeventbox">
                         <property name="MemberName" />
-                        <property name="Spacing">6</property>
                         <child>
-                          <widget class="Gtk.EventBox" id="videoeventbox">
+                          <widget class="Gtk.HBox" id="hbox2">
                             <property name="MemberName" />
+                            <property name="Spacing">6</property>
                             <child>
                               <widget class="Gtk.DrawingArea" id="videodrawingarea">
                                 <property name="MemberName" />
                                 <property name="CanFocus">True</property>
                               </widget>
+                              <packing>
+                                <property name="Position">0</property>
+                                <property name="AutoSize">True</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="Gtk.DrawingArea" id="blackboarddrawingarea">
+                                <property name="MemberName" />
+                                <property name="Visible">False</property>
+                              </widget>
+                              <packing>
+                                <property name="Position">1</property>
+                                <property name="AutoSize">True</property>
+                              </packing>
                             </child>
                           </widget>
-                          <packing>
-                            <property name="Position">0</property>
-                            <property name="AutoSize">True</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <placeholder />
                         </child>
                       </widget>
                       <packing>


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