Exemple #1
0
        public CoverArtPanel(AudioPlayer audioPlayer, params ITrackSelector[] trackSelectors)
            : base(false, 0)
        {
            ButtonBox buttonBox = new HButtonBox();
            _selectedButton = new ToggleButton("Selected");
            _playingButton = new ToggleButton("Playing");
            buttonBox.Add(_playingButton);
            buttonBox.Add(_selectedButton);
            PackStart(buttonBox, false, false, 0);

            EventBox eventBox = new EventBox();
            eventBox.Add(_picture);
            eventBox.ButtonPressEvent += (o, args) =>
                {
                    var window = new Gtk.Window(WindowType.Toplevel);
                    var pixbuf = _currentPixbuf.Copy();
                    AutoScalingImage image = new AutoScalingImage();
                    window.Add(image);
                    int left, top, right, bottom;
                    window.GetFrameDimensions(out left, out top, out right, out bottom);
                    int windowHeightWithFullImage = pixbuf.Height + top + bottom;
                    if (windowHeightWithFullImage > Screen.Height)
                        window.SetDefaultSize(((pixbuf.Width + left + right) * Screen.Height) / windowHeightWithFullImage, Screen.Height);
                    else
                        window.SetDefaultSize(pixbuf.Width + left + right, pixbuf.Height + top + bottom);
                    window.AllowShrink = true;
                    image.Pixbuf = pixbuf;

                    Track track = _selectedButton.Active ? _selectedTrack : _playingTrack;
                    window.Title = String.Format("{0} - {1}",
                        string.Join("; ", track.Album.Artists.Select(a => a.Name)),
                        track.Album.Title);
                    window.ShowAll();
                    image.QueueResize();

                    window.SizeAllocated += (o1, allocatedArgs) =>
                        {
                            Console.WriteLine("window: {0}", window.Allocation);
                            Console.WriteLine("args: {0}", allocatedArgs.Allocation);
                            if (window.Allocation.Width != allocatedArgs.Allocation.Width ||
                                window.Allocation.Height != allocatedArgs.Allocation.Height)
                            {
                                image.SizeAllocate(allocatedArgs.Allocation);
                                image.QueueResize();
                                image.QueueDraw();
                                window.QueueDraw();
                            }
                        };
                };

            PackStart(eventBox, true, true, 0);

            _selectedButton.Toggled += SelectedButtonOnToggled;
            _playingButton.Toggled += PlayingButtonOnToggled;

            foreach (var trackSelector in trackSelectors)
            {
                if (trackSelector.HasFocus)
                    _selectedTrack = trackSelector.CurrentTrack;
                trackSelector.SelectedTrack += TrackSelectorOnSelectedTrack;
            }

            audioPlayer.TrackChanged += AudioPlayerOnTrackChanged;

            _selectedButton.Shown += (sender, args) => _selectedButton.Active = true;

            ShowAll();
        }