From b326781ea43abdb6da9b6a34846a31c79c27e4e3 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Jul 18 2017 19:11:34 +0000 Subject: clean up cairo warnings, clean up icon warning --- diff --git a/banshee-2.6.2-cairo-fix.patch b/banshee-2.6.2-cairo-fix.patch new file mode 100644 index 0000000..36a3798 --- /dev/null +++ b/banshee-2.6.2-cairo-fix.patch @@ -0,0 +1,1027 @@ +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.CairoGlyphs/BansheeLineLogo.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.CairoGlyphs/BansheeLineLogo.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.CairoGlyphs/BansheeLineLogo.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.CairoGlyphs/BansheeLineLogo.cs 2017-07-18 13:36:34.005318558 -0400 +@@ -84,14 +84,14 @@ namespace Banshee.CairoGlyphs + cr.LineJoin = LineJoin.Round; + + // inner 'b' note +- cr.Color = innerColor; ++ cr.SetSourceColor (innerColor); + cr.MoveTo (0, 2); + cr.LineTo (2, 0); + cr.Arc (4, 8, 2, Math.PI, Math.PI * 3); + cr.Stroke (); + + // outer 'cut' circle +- cr.Color = outerColor; ++ cr.SetSourceColor (outerColor); + cr.Arc (4, 8, 4, Math.PI * 1.5, Math.PI * 1.12); + cr.Stroke (); + +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs 2017-07-18 13:36:34.005318558 -0400 +@@ -74,7 +74,7 @@ namespace Banshee.Collection.Gui + if (image != null) { + if (fill) { + CairoExtensions.RoundedRectangle (cr, x, y, width, height, radius, corners); +- cr.Color = fillColor; ++ cr.SetSourceColor (fillColor); + cr.Fill (); + } + +@@ -85,12 +85,12 @@ namespace Banshee.Collection.Gui + CairoExtensions.RoundedRectangle (cr, x, y, width, height, radius, corners); + + if (fill) { +- var grad = new LinearGradient (x, y, x, y + height); +- grad.AddColorStop (0, fillColor); +- grad.AddColorStop (1, CairoExtensions.ColorShade (fillColor, 1.3)); +- cr.Pattern = grad; +- cr.Fill (); +- grad.Destroy (); ++ using (var grad = new LinearGradient (x, y, x, y + height)) { ++ grad.AddColorStop (0, fillColor); ++ grad.AddColorStop (1, CairoExtensions.ColorShade (fillColor, 1.3)); ++ cr.SetSource (grad); ++ cr.Fill (); ++ } + } + + Banshee.CairoGlyphs.BansheeLineLogo.Render (cr, +@@ -112,12 +112,12 @@ namespace Banshee.Collection.Gui + cr.Antialias = Antialias.None; + + CairoExtensions.RoundedRectangle (cr, x + 1.5, y + 1.5, width - 3, height - 3, radius, corners); +- cr.Color = cover_border_light_color; ++ cr.SetSourceColor (cover_border_light_color); + cr.Stroke (); + } + + CairoExtensions.RoundedRectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1, radius, corners); +- cr.Color = cover_border_dark_color; ++ cr.SetSourceColor (cover_border_dark_color); + cr.Stroke (); + + if (dispose && image != null) { +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs 2017-07-18 13:36:34.006318533 -0400 +@@ -133,7 +133,7 @@ namespace Banshee.Collection.Gui + // Render the second line first since we have that state already + if (!String.IsNullOrEmpty (album.ArtistName)) { + context.Context.MoveTo (x, y + fl_height); +- context.Context.Color = text_color; ++ context.Context.SetSourceColor (text_color); + PangoCairoHelper.ShowLayout (context.Context, layout); + } + +@@ -147,7 +147,7 @@ namespace Banshee.Collection.Gui + + context.Context.MoveTo (x, y); + text_color.A = 1; +- context.Context.Color = text_color; ++ context.Context.SetSourceColor (text_color); + PangoCairoHelper.ShowLayout (context.Context, layout); + } + +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs 2017-07-18 13:36:34.006318533 -0400 +@@ -81,7 +81,7 @@ namespace Banshee.Collection.Gui + Cairo.Color color = context.Theme.Colors.GetWidgetColor ( + context.TextAsForeground ? GtkColorClass.Foreground : GtkColorClass.Text, state); + color.A = (!context.Opaque) ? 0.3 : 1.0; +- context.Context.Color = color; ++ context.Context.SetSourceColor (color); + + PangoCairoHelper.ShowLayout (context.Context, context.Layout); + } +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs 2017-07-18 13:36:34.006318533 -0400 +@@ -210,7 +210,7 @@ namespace Banshee.Gui.Widgets + + if (renderTrack) { + cr.MoveTo (x, y); +- cr.Color = TextColor; ++ cr.SetSourceColor (TextColor); + PangoCairoHelper.ShowLayout (cr, first_line_layout); + } + +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs 2017-07-18 13:36:34.006318533 -0400 +@@ -129,7 +129,7 @@ namespace Banshee.Gui.Widgets + } + + cr.Rectangle (x, y, asr, alloc.Height); +- cr.Color = BackgroundColor; ++ cr.SetSourceColor (BackgroundColor); + cr.Fill (); + + x += (asr - surface_w) / 2; +@@ -141,40 +141,42 @@ namespace Banshee.Gui.Widgets + + private Surface CreateScene (Cairo.Context window_cr, ImageSurface image, int reflect) + { +- Surface surface = window_cr.Target.CreateSimilar (window_cr.Target.Content, +- image.Width, image.Height + reflect); +- Cairo.Context cr = new Context (surface); +- +- cr.Save (); ++ Surface surface; ++ using (var t = window_cr.GetTarget ()) { ++ surface = t.CreateSimilar (t.Content, image.Width, image.Height + reflect); ++ } + +- cr.SetSource (image); +- cr.Paint (); ++ using (Cairo.Context cr = new Context (surface)) { ++ cr.Save (); ++ cr.SetSource (image); ++ cr.Paint (); + +- cr.Rectangle (0, image.Height, image.Width, reflect); +- cr.Clip (); ++ cr.Rectangle (0, image.Height, image.Width, reflect); ++ cr.Clip (); + +- Matrix matrix = new Matrix (); +- matrix.InitScale (1, -1); +- matrix.Translate (0, -(2 * image.Height) + 1); +- cr.Transform (matrix); ++ Matrix matrix = new Matrix (); ++ matrix.InitScale (1, -1); ++ matrix.Translate (0, -(2 * image.Height) + 1); ++ cr.Transform (matrix); + +- cr.SetSource (image); +- cr.Paint (); ++ cr.SetSource (image); ++ cr.Paint (); + +- cr.Restore (); ++ cr.Restore (); + +- Color bg_transparent = BackgroundColor; +- bg_transparent.A = 0.65; ++ Color bg_transparent = BackgroundColor; ++ bg_transparent.A = 0.65; + +- LinearGradient mask = new LinearGradient (0, image.Height, 0, image.Height + reflect); +- mask.AddColorStop (0, bg_transparent); +- mask.AddColorStop (1, BackgroundColor); ++ using (LinearGradient mask = new LinearGradient (0, image.Height, 0, image.Height + reflect)) { ++ mask.AddColorStop (0, bg_transparent); ++ mask.AddColorStop (1, BackgroundColor); + +- cr.Rectangle (0, image.Height, image.Width, reflect); +- cr.Pattern = mask; +- cr.Fill (); ++ cr.Rectangle (0, image.Height, image.Width, reflect); ++ cr.SetSource (mask); ++ cr.Fill (); ++ } + +- ((IDisposable)cr).Dispose (); ++ } + return surface; + } + +@@ -254,7 +256,7 @@ namespace Banshee.Gui.Widgets + + if (render_track) { + cr.MoveTo (track_info_alloc.X, track_info_alloc.Y); +- cr.Color = TextColor; ++ cr.SetSourceColor (TextColor); + PangoCairoHelper.ShowLayout (cr, first_line_layout); + + RenderTrackRating (cr, track); +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs.cairofix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs 2017-07-18 13:36:34.006318533 -0400 +@@ -269,9 +269,9 @@ namespace Banshee.Sources.Gui + // Draw the count + if (!hide_count) { + if (view != null && view.Cr != null) { +- view.Cr.Color = state == StateType.Normal || (view != null && state == StateType.Prelight) ++ view.Cr.SetSourceColor (state == StateType.Normal || (view != null && state == StateType.Prelight) + ? view.Theme.TextMidColor +- : view.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state); ++ : view.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state)); + + view.Cr.MoveTo ( + cell_area.X + cell_area.Width - count_layout_width - 2, +diff -up banshee-2.6.2/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs.cairofix banshee-2.6.2/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs +--- banshee-2.6.2/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs.cairofix 2014-02-18 15:40:14.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs 2017-07-18 13:36:34.006318533 -0400 +@@ -128,13 +128,13 @@ namespace Banshee.Widgets + cr.LineWidth = base_line_width / 1.5; + + cr.Arc(x, y, radius, 0, 2 * Math.PI); +- cr.Pattern = bg_gradient; ++ cr.SetSource (bg_gradient); + cr.Fill(); + + /*cr.LineTo(x, y); + cr.Arc(x, y, radius, a1 + 2 * Math.PI * 0.92, a1); + cr.LineTo(x, y); +- cr.Pattern = bound_gradient; ++ cr.SetSource (bound_gradient); + cr.Fill(); + cr.Stroke();*/ + +@@ -150,28 +150,28 @@ namespace Banshee.Widgets + cr.Pattern = Fraction >= 1.0 ? fg_gradient_full : fg_gradient; + cr.FillPreserve(); + +- cr.Color = stroke_color; ++ cr.SetSourceColor (stroke_color); + cr.Stroke(); + } + + cr.Arc(x, y, radius / 2.75, 0, 2 * Math.PI); +- cr.Color = fill_color_c; ++ cr.SetSourceColor (fill_color_c); + cr.FillPreserve(); +- cr.Color = new Cairo.Color(1, 1, 1, 0.75); ++ cr.SetSourceColor (new Cairo.Color(1, 1, 1, 0.75)); + cr.FillPreserve(); + + cr.LineWidth = base_line_width / 1.5; + +- cr.Color = stroke_color; ++ cr.SetSourceColor (stroke_color); + cr.Stroke(); + + cr.Arc(x, y, radius / 5.5, 0, 2 * Math.PI); +- cr.Color = fill_color_c; ++ cr.SetSourceColor (fill_color_c); + cr.FillPreserve(); + + cr.LineWidth = base_line_width / 2; + +- cr.Color = inner_stroke_color; ++ cr.SetSourceColor (inner_stroke_color); + cr.Stroke(); + + cr.Arc(x, y, radius, 0, 2 * Math.PI); +@@ -180,11 +180,11 @@ namespace Banshee.Widgets + if(Capacity <= 0) { + // this sucks balls + cr.Rectangle(0, 0, Allocation.Width, Allocation.Height); +- cr.Color = text_bg_color; ++ cr.SetSourceColor (text_bg_color); + cr.FillPreserve(); + + cr.SelectFontFace("Sans", FontSlant.Normal, FontWeight.Bold); +- cr.Color = text_color; ++ cr.SetSourceColor (text_color); + cr.SetFontSize(Allocation.Width * 0.2); + DrawText(cr, Mono.Unix.Catalog.GetString("Insert\nDisc"), 3); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -112,7 +112,7 @@ namespace Hyena.Data.Gui + Cairo.Color color = context.Theme.Colors.GetWidgetColor ( + context.TextAsForeground ? GtkColorClass.Foreground : GtkColorClass.Text, context.State); + color.A = Alpha ?? (context.Opaque ? 1.0 : 0.5); +- context.Context.Color = color; ++ context.Context.SetSourceColor (color); + + PangoCairoHelper.ShowLayout (context.Context, context.Layout); + //context.Context.ResetClip (); +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -235,7 +235,7 @@ namespace Hyena.Data.Gui + GtkColorClass.Base, StateType.Normal), 0.0); + stroke_color.A = 0.3; + +- cairo_context.Color = stroke_color; ++ cairo_context.SetSourceColor (stroke_color); + cairo_context.MoveTo (area.X + 0.5, area.Y + 1.0); + cairo_context.LineTo (area.X + 0.5, area.Bottom); + cairo_context.MoveTo (area.Right - 0.5, area.Y + 1.0); +@@ -390,7 +390,7 @@ namespace Hyena.Data.Gui + cairo_context.Antialias = Cairo.Antialias.None; + cairo_context.MoveTo (single_list_alloc.Left, single_list_alloc.Top); + cairo_context.LineTo (single_list_alloc.Right, single_list_alloc.Top); +- cairo_context.Color = Theme.Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal); ++ cairo_context.SetSourceColor (Theme.Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal)); + cairo_context.Stroke (); + cairo_context.Restore (); + } +@@ -448,7 +448,7 @@ namespace Hyena.Data.Gui + if (dragging) { + Cairo.Color fill_color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal); + fill_color.A = 0.5; +- cairo_context.Color = fill_color; ++ cairo_context.SetSourceColor (fill_color); + cairo_context.Rectangle (area.X, area.Y, area.Width, area.Height); + cairo_context.Fill (); + } +@@ -483,7 +483,7 @@ namespace Hyena.Data.Gui + + cairo_context.Rectangle (x, header_rendering_alloc.Bottom + 1, column.Width - 2, + list_rendering_alloc.Bottom - header_rendering_alloc.Bottom - 1); +- cairo_context.Color = fill_color; ++ cairo_context.SetSourceColor (fill_color); + cairo_context.Fill (); + + cairo_context.MoveTo (x - 0.5, header_rendering_alloc.Bottom + 0.5); +@@ -491,7 +491,7 @@ namespace Hyena.Data.Gui + cairo_context.LineTo (x + column.Width - 1.5, list_rendering_alloc.Bottom + 0.5); + cairo_context.LineTo (x + column.Width - 1.5, header_rendering_alloc.Bottom + 0.5); + +- cairo_context.Color = stroke_color; ++ cairo_context.SetSourceColor (stroke_color); + cairo_context.LineWidth = 1.0; + cairo_context.Stroke (); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -240,7 +240,7 @@ namespace Hyena.Data.Gui.Tests + red = !red; + Cairo.Context cr = context.Context; + cr.Rectangle (0, 0, cellWidth, cellHeight); +- cr.Color = CairoExtensions.RgbaToColor (red ? 0xff000099 : 0x00000099); ++ cr.SetSourceColor (CairoExtensions.RgbaToColor (red ? 0xff000099 : 0x00000099)); + cr.Fill (); + + List points = Points; +@@ -252,7 +252,7 @@ namespace Hyena.Data.Gui.Tests + } + } + +- cr.Color = CairoExtensions.RgbToColor ((uint)random.Next (0xffffff)); ++ cr.SetSourceColor (CairoExtensions.RgbToColor ((uint)random.Next (0xffffff))); + cr.LineWidth = 1; + cr.Stroke (); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -49,7 +49,7 @@ namespace Hyena.Gui + { + cr.Save (); + cr.LineWidth = 1.0; +- cr.Color = CairoExtensions.RgbToColor ((uint)rand.Next (0, 0xffffff)); ++ cr.SetSourceColor (CairoExtensions.RgbToColor ((uint)rand.Next (0, 0xffffff))); + cr.Rectangle (x + 0.5, y + 0.5, w - 1, h - 1); + cr.Stroke (); + cr.Restore (); +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoExtensions.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoExtensions.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoExtensions.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/CairoExtensions.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -65,13 +65,17 @@ namespace Hyena.Gui + return layout; + } + +- public static Surface CreateSurfaceForPixbuf (Cairo.Context cr, Gdk.Pixbuf pixbuf) ++ public static Surface CreateSurfaceForPixbuf (Context cr, Pixbuf pixbuf) + { +- Surface surface = cr.Target.CreateSimilar (cr.Target.Content, pixbuf.Width, pixbuf.Height); +- Cairo.Context surface_cr = new Context (surface); +- Gdk.CairoHelper.SetSourcePixbuf (surface_cr, pixbuf, 0, 0); +- surface_cr.Paint (); +- ((IDisposable)surface_cr).Dispose (); ++ Surface surface; ++ using (var t = cr.GetTarget ()) { ++ surface = t.CreateSimilar (t.Content, pixbuf.Width, pixbuf.Height); ++ } ++ using (Context surface_cr = new Context (surface)) { ++ CairoHelper.SetSourcePixbuf (surface_cr, pixbuf, 0, 0); ++ surface_cr.Paint (); ++ surface_cr.Dispose (); ++ } + return surface; + } + +@@ -319,8 +323,7 @@ namespace Hyena.Gui + + public static void DisposeContext (Cairo.Context cr) + { +- ((IDisposable)cr.Target).Dispose (); +- ((IDisposable)cr).Dispose (); ++ cr.Dispose (); + } + + private struct CairoInteropCall +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Brush.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Brush.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Brush.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Brush.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -64,7 +64,7 @@ namespace Hyena.Gui.Canvas + + public virtual void Apply (Cairo.Context cr) + { +- cr.Color = color; ++ cr.SetSourceColor (color); + } + + public static readonly Brush Black = new Brush (0.0, 0.0, 0.0); +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/CanvasHost.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/CanvasHost.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/CanvasHost.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/CanvasHost.cs 2017-07-18 13:36:34.007318509 -0400 +@@ -150,8 +150,7 @@ namespace Hyena.Gui.Canvas + + if (Debug) { + cr.LineWidth = 1.0; +- cr.Color = CairoExtensions.RgbToColor ( +- (uint)(rand = rand ?? new Random ()).Next (0, 0xffffff)); ++ cr.SetSourceColor (CairoExtensions.RgbToColor ((uint)(rand = rand ?? new Random ()).Next (0, 0xffffff))); + cr.Rectangle (damage.X + 0.5, damage.Y + 0.5, damage.Width - 1, damage.Height - 1); + cr.Stroke (); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Prelight.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Prelight.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Prelight.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Prelight.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -41,13 +41,13 @@ namespace Hyena.Gui.Canvas + + var x = rect.Width / 2.0; + var y = rect.Height / 2.0; +- var grad = new Cairo.RadialGradient (x, y, 0, x, y, rect.Width / 2.0); +- grad.AddColorStop (0, new Cairo.Color (0, 0, 0, 0.1 * opacity)); +- grad.AddColorStop (1, new Cairo.Color (0, 0, 0, 0.35 * opacity)); +- cr.Pattern = grad; +- CairoExtensions.RoundedRectangle (cr, rect.X, rect.Y, rect.Width, rect.Height, theme.Context.Radius); +- cr.Fill (); +- grad.Destroy (); ++ using (var grad = new Cairo.RadialGradient (x, y, 0, x, y, rect.Width / 2.0)) { ++ grad.AddColorStop (0, new Cairo.Color (0, 0, 0, 0.1 * opacity)); ++ grad.AddColorStop (1, new Cairo.Color (0, 0, 0, 0.35 * opacity)); ++ cr.SetSource (grad); ++ CairoExtensions.RoundedRectangle (cr, rect.X, rect.Y, rect.Width, rect.Height, theme.Context.Radius); ++ cr.Fill (); ++ } + + cr.Restore (); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/ShadowMarginStyle.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/ShadowMarginStyle.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/ShadowMarginStyle.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/ShadowMarginStyle.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -66,7 +66,7 @@ namespace Hyena.Gui.Canvas + steps - i); + + color.A = opacity_step * (i + 1); +- cr.Color = color; ++ cr.SetSourceColor (color); + cr.Stroke (); + } + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Slider.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Slider.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Slider.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/Slider.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -153,7 +153,7 @@ namespace Hyena.Gui.Canvas + double throbber_y = (Allocation.Height - ThrobberSize) / 2.0 - Margin.Top + throbber_r; + double bar_w = RenderSize.Width * Value; + +- cr.Color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, Gtk.StateType.Normal); ++ cr.SetSourceColor (Theme.Colors.GetWidgetColor (GtkColorClass.Base, Gtk.StateType.Normal)); + cr.Rectangle (0, 0, RenderSize.Width, RenderSize.Height); + cr.Fill (); + +@@ -169,10 +169,10 @@ namespace Hyena.Gui.Canvas + fill.AddColorStop (1, light_fill_color); + + cr.Rectangle (0, 0, bar_w, RenderSize.Height); +- cr.Pattern = fill; ++ cr.SetSource (fill); + cr.Fill (); + +- cr.Color = fill_color; ++ cr.SetSourceColor (fill_color); + cr.Arc (throbber_x, throbber_y, throbber_r, 0, Math.PI * 2); + cr.Fill (); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TestTile.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TestTile.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TestTile.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TestTile.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -55,7 +55,7 @@ namespace Hyena.Gui.Canvas + } + + CairoExtensions.RoundedRectangle (cr, 0, 0, RenderSize.Width, RenderSize.Height, 5); +- cr.Color = color; ++ cr.SetSourceColor (color); + cr.Fill (); + } + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TextBlock.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TextBlock.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TextBlock.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Canvas/TextBlock.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -217,7 +217,7 @@ namespace Hyena.Gui.Canvas + + cr.PopGroupToSource (); + cr.Mask (mask); +- mask.Destroy (); ++ mask.Dispose (); + } + + cr.ResetClip (); +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/RatingRenderer.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/RatingRenderer.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/RatingRenderer.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/RatingRenderer.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -93,13 +93,13 @@ namespace Hyena.Gui + + if (fill || hover_fill) { + if (!isHovering || hoverValue >= Value) { +- cr.Color = fill ? fill_color : hover_fill_color; ++ cr.SetSourceColor (fill ? fill_color : hover_fill_color); + } else { +- cr.Color = hover_fill ? fill_color : hover_fill_color; ++ cr.SetSourceColor (hover_fill ? fill_color : hover_fill_color); + } + cr.Fill (); + } else { +- cr.Color = stroke_color; ++ cr.SetSourceColor (stroke_color); + cr.Stroke (); + } + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs 2017-07-18 13:36:34.008318485 -0400 +@@ -58,7 +58,7 @@ namespace Hyena.Gui + double y = Allocation.Y + yi * step_height; + + cr.Rectangle (x, y, step_width, step_height); +- cr.Color = CairoExtensions.ColorFromHsb (h, s, bg_b); ++ cr.SetSourceColor (CairoExtensions.ColorFromHsb (h, s, bg_b)); + cr.Fill (); + + int tw, th; +@@ -68,7 +68,7 @@ namespace Hyena.Gui + + cr.Translate (0.5, 0.5); + cr.MoveTo (x + (step_width - tw) / 2.0, y + (step_height - th) / 2.0); +- cr.Color = CairoExtensions.ColorFromHsb (h, s, fg_b); ++ cr.SetSourceColor (CairoExtensions.ColorFromHsb (h, s, fg_b)); + PangoCairoHelper.ShowLayout (cr, layout); + cr.Translate (-0.5, -0.5); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs 2017-07-18 13:38:09.979993771 -0400 +@@ -87,17 +87,15 @@ namespace Hyena.Gui.Theming + Color color_a = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected); + Color color_b = CairoExtensions.ColorShade (color_a, 1.4); + +- RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0, +- Context.X, Context.Y, 2.0 * Context.Radius); +- fill.AddColorStop (0, color_a); +- fill.AddColorStop (1, color_b); +- Context.Cairo.Pattern = fill; +- +- Context.Cairo.FillPreserve (); +- fill.Destroy (); ++ using (RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0, Context.X, Context.Y, 2.0 * Context.Radius)) { ++ fill.AddColorStop (0, color_a); ++ fill.AddColorStop (1, color_b); ++ Context.Cairo.SetSource (fill); ++ Context.Cairo.FillPreserve (); ++ } + + // Stroke the pie +- Context.Cairo.Color = CairoExtensions.ColorShade (color_a, 0.8); ++ Context.Cairo.SetSourceColor (CairoExtensions.ColorShade (color_a, 0.8)); + Context.Cairo.LineWidth = Context.LineWidth; + Context.Cairo.Stroke (); + } +@@ -134,9 +132,9 @@ namespace Hyena.Gui.Theming + cr.LineTo (x3, y2); + cr.LineTo (x1, y1); + +- cr.Color = Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal); ++ cr.SetSourceColor (Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal)); + cr.FillPreserve (); +- cr.Color = Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal); ++ cr.SetSourceColor (Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal)); + cr.Stroke (); + + cr.Translate (-dx, -dy); +@@ -152,9 +150,9 @@ namespace Hyena.Gui.Theming + { + color.A = Context.FillAlpha; + if (pattern != null) { +- cr.Pattern = pattern; ++ cr.SetSource (pattern); + } else { +- cr.Color = color; ++ cr.SetSourceColor (color); + } + CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, CairoCorners.All); + cr.Fill (); +@@ -193,10 +191,10 @@ namespace Hyena.Gui.Theming + // FIXME Windows; shading the color by .8 makes it blend into the bg + if (Widget.HasFocus && !Hyena.PlatformDetection.IsWindows) { + cr.LineWidth = BorderWidth * 1.5; +- cr.Color = CairoExtensions.ColorShade (border_color, 0.8); ++ cr.SetSourceColor (CairoExtensions.ColorShade (border_color, 0.8)); + } else { + cr.LineWidth = BorderWidth; +- cr.Color = border_color; ++ cr.SetSourceColor (border_color); + } + + double offset = (double)cr.LineWidth / 2.0; +@@ -217,14 +215,13 @@ namespace Hyena.Gui.Theming + Cairo.Color light_color = CairoExtensions.ColorShade (color, 1.6); + Cairo.Color dark_color = CairoExtensions.ColorShade (color, 1.3); + +- LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom - 1); +- grad.AddColorStop (0, light_color); +- grad.AddColorStop (1, dark_color); +- +- cr.Pattern = grad; +- cr.Rectangle (alloc.X + 1.5, alloc.Y + 1.5, alloc.Width - 3, alloc.Height - 2); +- cr.Fill (); +- grad.Destroy (); ++ using (LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom - 1)) { ++ grad.AddColorStop (0, light_color); ++ grad.AddColorStop (1, dark_color); ++ cr.SetSource (grad); ++ cr.Rectangle (alloc.X + 1.5, alloc.Y + 1.5, alloc.Width - 3, alloc.Height - 2); ++ cr.Fill (); ++ } + } + + public override void DrawHeaderBackground (Cairo.Context cr, Gdk.Rectangle alloc) +@@ -235,19 +232,18 @@ namespace Hyena.Gui.Theming + + CairoCorners corners = CairoCorners.TopLeft | CairoCorners.TopRight; + +- LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom); +- grad.AddColorStop (0, light_color); +- grad.AddColorStop (0.75, dark_color); +- grad.AddColorStop (0, light_color); +- +- cr.Pattern = grad; +- CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, corners); +- cr.Fill (); ++ using (LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom)) { ++ grad.AddColorStop (0, light_color); ++ grad.AddColorStop (0.75, dark_color); ++ grad.AddColorStop (0, light_color); ++ cr.SetSource (grad); ++ CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, corners); ++ cr.Fill (); ++ } + +- cr.Color = border_color; ++ cr.SetSourceColor (border_color); + cr.Rectangle (alloc.X, alloc.Bottom, alloc.Width, BorderWidth); + cr.Fill (); +- grad.Destroy (); + } + + public override void DrawColumnHeaderFocus (Cairo.Context cr, Gdk.Rectangle alloc) +@@ -262,7 +258,7 @@ namespace Hyena.Gui.Theming + Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected), 0.8); + + stroke_color.A = 0.1; +- cr.Color = stroke_color; ++ cr.SetSourceColor (stroke_color); + + CairoExtensions.RoundedRectangle (cr, + alloc.X + margin + line_width + right_offset, +@@ -275,7 +271,7 @@ namespace Hyena.Gui.Theming + + stroke_color.A = 1.0; + cr.LineWidth = line_width; +- cr.Color = stroke_color; ++ cr.SetSourceColor (stroke_color); + CairoExtensions.RoundedRectangle (cr, + alloc.X + margin + line_width + right_offset, + alloc.Y + margin + line_width + top_offset, +@@ -297,12 +293,12 @@ namespace Hyena.Gui.Theming + cr.LineWidth = 1; + cr.Antialias = Cairo.Antialias.None; + +- cr.Color = dark_color; ++ cr.SetSourceColor (dark_color); + cr.MoveTo (x, y_1); + cr.LineTo (x, y_2); + cr.Stroke (); + +- cr.Color = light_color; ++ cr.SetSourceColor (light_color); + cr.MoveTo (x + 1, y_1); + cr.LineTo (x + 1, y_2); + cr.Stroke (); +@@ -313,7 +309,7 @@ namespace Hyena.Gui.Theming + public override void DrawListBackground (Context cr, Gdk.Rectangle alloc, Color color) + { + color.A = Context.FillAlpha; +- cr.Color = color; ++ cr.SetSourceColor (color); + cr.Rectangle (alloc.X, alloc.Y, alloc.Width, alloc.Height); + cr.Fill (); + } +@@ -322,7 +318,7 @@ namespace Hyena.Gui.Theming + Cairo.Color color, CairoCorners corners) + { + cr.LineWidth = 1.25; +- cr.Color = color; ++ cr.SetSourceColor (color); + CairoExtensions.RoundedRectangle (cr, x + cr.LineWidth/2.0, y + cr.LineWidth/2.0, + width - cr.LineWidth, height - cr.LineWidth, Context.Radius, corners, true); + cr.Stroke (); +@@ -342,11 +338,10 @@ namespace Hyena.Gui.Theming + Cairo.Color selection_stroke = CairoExtensions.ColorShade (selection_color, 0.85); + selection_highlight.A = 0.5; + selection_stroke.A = color.A; +- LinearGradient grad = null; + + if (filled) { + if (flat_fill) { +- cr.Color = selection_color; ++ cr.SetSourceColor (selection_color); + } else { + Cairo.Color selection_fill_light = CairoExtensions.ColorShade (selection_color, 1.12); + Cairo.Color selection_fill_dark = selection_color; +@@ -354,25 +349,22 @@ namespace Hyena.Gui.Theming + selection_fill_light.A = color.A; + selection_fill_dark.A = color.A; + +- grad = new LinearGradient (x, y, x, y + height); +- grad.AddColorStop (0, selection_fill_light); +- grad.AddColorStop (0.4, selection_fill_dark); +- grad.AddColorStop (1, selection_fill_light); +- +- cr.Pattern = grad; ++ using (LinearGradient grad = new LinearGradient (x, y, x, y + height)) { ++ grad.AddColorStop (0, selection_fill_light); ++ grad.AddColorStop (0.4, selection_fill_dark); ++ grad.AddColorStop (1, selection_fill_light); ++ cr.SetSource (grad); ++ } + } + + CairoExtensions.RoundedRectangle (cr, x, y, width, height, Context.Radius, corners, true); + cr.Fill (); + +- if (grad != null) { +- grad.Destroy (); +- } + } + + if (filled && stroked) { + cr.LineWidth = 1.0; +- cr.Color = selection_highlight; ++ cr.SetSourceColor (selection_highlight); + CairoExtensions.RoundedRectangle (cr, x + 1.5, y + 1.5, width - 3, height - 3, + Context.Radius - 1, corners, true); + cr.Stroke (); +@@ -380,7 +372,7 @@ namespace Hyena.Gui.Theming + + if (stroked) { + cr.LineWidth = 1.0; +- cr.Color = selection_stroke; ++ cr.SetSourceColor (selection_stroke); + CairoExtensions.RoundedRectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1, + Context.Radius, corners, true); + cr.Stroke (); +@@ -389,7 +381,7 @@ namespace Hyena.Gui.Theming + + public override void DrawRowRule (Cairo.Context cr, int x, int y, int width, int height) + { +- cr.Color = new Cairo.Color (rule_color.R, rule_color.G, rule_color.B, Context.FillAlpha); ++ cr.SetSourceRGBA (rule_color.R, rule_color.G, rule_color.B, Context.FillAlpha); + cr.Rectangle (x, y, width, height); + cr.Fill (); + } +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/PulsingButton.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/PulsingButton.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/PulsingButton.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/PulsingButton.cs 2017-07-18 13:36:34.009318461 -0400 +@@ -96,17 +96,17 @@ namespace Hyena.Widgets + double alpha = Choreographer.Compose (pulsator.Percent, Easing.Sine); + + Cairo.Color color = CairoExtensions.GdkColorToCairoColor (Style.Background (StateType.Selected)); +- Cairo.RadialGradient fill = new Cairo.RadialGradient (x, y, 0, x, y, r); +- color.A = alpha; +- fill.AddColorStop (0, color); +- fill.AddColorStop (0.5, color); +- color.A = 0; +- fill.AddColorStop (1, color); ++ using (Cairo.RadialGradient fill = new Cairo.RadialGradient (x, y, 0, x, y, r)) { ++ color.A = alpha; ++ fill.AddColorStop (0, color); ++ fill.AddColorStop (0.5, color); ++ color.A = 0; ++ fill.AddColorStop (1, color); + +- cr.Arc (x, y, r, 0, 2 * Math.PI); +- cr.Pattern = fill; +- cr.Fill (); +- fill.Destroy (); ++ cr.Arc (x, y, r, 0, 2 * Math.PI); ++ cr.SetSource (fill); ++ cr.Fill (); ++ } + + CairoExtensions.DisposeContext (cr); + return base.OnExposeEvent (evnt); +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs.cairofix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs.cairofix 2014-02-18 15:40:26.000000000 -0500 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs 2017-07-18 13:36:34.009318461 -0400 +@@ -330,50 +330,48 @@ namespace Hyena.Widgets + bar_height + bar_label_spacing + layout_height)); + cr.Clip (); + +- Pattern bar = RenderBar (Allocation.Width - 2 * h_padding, bar_height); +- +- cr.Save (); +- cr.Source = bar; +- cr.Paint (); +- cr.Restore (); +- +- if (reflect) { ++ using (Pattern bar = RenderBar (Allocation.Width - 2 * h_padding, bar_height)) { + cr.Save (); ++ cr.SetSource (bar); ++ cr.Paint (); ++ cr.Restore (); + +- cr.Rectangle (0, bar_height, Allocation.Width - h_padding, bar_height); +- cr.Clip (); ++ if (reflect) { ++ cr.Save (); + +- Matrix matrix = new Matrix (); +- matrix.InitScale (1, -1); +- matrix.Translate (0, -(2 * bar_height) + 1); +- cr.Transform (matrix); ++ cr.Rectangle (0, bar_height, Allocation.Width - h_padding, bar_height); ++ cr.Clip (); + +- cr.Pattern = bar; ++ Matrix matrix = new Matrix (); ++ matrix.InitScale (1, -1); ++ matrix.Translate (0, -(2 * bar_height) + 1); ++ cr.Transform (matrix); + +- LinearGradient mask = new LinearGradient (0, 0, 0, bar_height); ++ cr.SetSource (bar); + +- mask.AddColorStop (0.25, new Color (0, 0, 0, 0)); +- mask.AddColorStop (0.5, new Color (0, 0, 0, 0.125)); +- mask.AddColorStop (0.75, new Color (0, 0, 0, 0.4)); +- mask.AddColorStop (1.0, new Color (0, 0, 0, 0.7)); ++ using (LinearGradient mask = new LinearGradient (0, 0, 0, bar_height)) { ++ mask.AddColorStop (0.25, new Color (0, 0, 0, 0)); ++ mask.AddColorStop (0.5, new Color (0, 0, 0, 0.125)); ++ mask.AddColorStop (0.75, new Color (0, 0, 0, 0.4)); ++ mask.AddColorStop (1.0, new Color (0, 0, 0, 0.7)); + +- cr.Mask (mask); +- mask.Destroy (); ++ cr.Mask (mask); ++ } + +- cr.Restore (); ++ cr.Restore (); + +- CairoExtensions.PopGroupToSource (cr); +- cr.Paint (); +- } ++ CairoExtensions.PopGroupToSource (cr); ++ cr.Paint (); ++ } + +- if (show_labels) { +- cr.Translate ((reflect ? Allocation.X : -h_padding) + (Allocation.Width - layout_width) / 2, +- (reflect ? Allocation.Y : 0) + bar_height + bar_label_spacing); ++ if (show_labels) { ++ cr.Translate ((reflect ? Allocation.X : -h_padding) + (Allocation.Width - layout_width) / 2, ++ (reflect ? Allocation.Y : 0) + bar_height + bar_label_spacing); + +- RenderLabels (cr); +- } ++ RenderLabels (cr); ++ } + +- bar.Destroy (); ++ } + CairoExtensions.DisposeContext (cr); + + return true; +@@ -401,29 +399,29 @@ namespace Hyena.Widgets + + private void RenderBarSegments (Context cr, int w, int h, int r) + { +- LinearGradient grad = new LinearGradient (0, 0, w, 0); +- double last = 0.0; ++ using (LinearGradient grad = new LinearGradient (0, 0, w, 0)) { ++ double last = 0.0; + +- foreach (Segment segment in segments) { +- if (segment.Percent > 0) { +- grad.AddColorStop (last, segment.Color); +- grad.AddColorStop (last += segment.Percent, segment.Color); ++ foreach (Segment segment in segments) { ++ if (segment.Percent > 0) { ++ grad.AddColorStop (last, segment.Color); ++ grad.AddColorStop (last += segment.Percent, segment.Color); ++ } + } ++ ++ CairoExtensions.RoundedRectangle (cr, 0, 0, w, h, r); ++ cr.SetSource (grad); ++ cr.FillPreserve (); + } + +- CairoExtensions.RoundedRectangle (cr, 0, 0, w, h, r); +- cr.Pattern = grad; +- cr.FillPreserve (); +- cr.Pattern.Destroy (); +- +- grad = new LinearGradient (0, 0, 0, h); +- grad.AddColorStop (0.0, new Color (1, 1, 1, 0.125)); +- grad.AddColorStop (0.35, new Color (1, 1, 1, 0.255)); +- grad.AddColorStop (1, new Color (0, 0, 0, 0.4)); +- +- cr.Pattern = grad; +- cr.Fill (); +- cr.Pattern.Destroy (); ++ using (LinearGradient grad = new LinearGradient (0, 0, 0, h)) { ++ grad.AddColorStop (0.0, new Color (1, 1, 1, 0.125)); ++ grad.AddColorStop (0.35, new Color (1, 1, 1, 0.255)); ++ grad.AddColorStop (1, new Color (0, 0, 0, 0.4)); ++ ++ cr.SetSource (grad); ++ cr.Fill (); ++ } + } + + private void RenderBarStrokes (Context cr, int w, int h, int r) +@@ -440,24 +438,24 @@ namespace Hyena.Widgets + while (x <= w - r) { + cr.MoveTo (x - 0.5, 1); + cr.LineTo (x - 0.5, h - 1); +- cr.Pattern = seg_sep_light; ++ cr.SetSource (seg_sep_light); + cr.Stroke (); + + cr.MoveTo (x + 0.5, 1); + cr.LineTo (x + 0.5, h - 1); +- cr.Pattern = seg_sep_dark; ++ cr.SetSource (seg_sep_dark); + cr.Stroke (); + + x += seg_w; + } + + CairoExtensions.RoundedRectangle (cr, 0.5, 0.5, w - 1, h - 1, r); +- cr.Pattern = stroke; ++ cr.SetSource (stroke); + cr.Stroke (); + +- stroke.Destroy (); +- seg_sep_light.Destroy (); +- seg_sep_dark.Destroy (); ++ stroke.Dispose (); ++ seg_sep_light.Dispose (); ++ seg_sep_dark.Dispose (); + } + + private LinearGradient MakeSegmentGradient (int h, Color color) +@@ -489,12 +487,12 @@ namespace Hyena.Widgets + foreach (Segment segment in segments) { + cr.LineWidth = 1; + cr.Rectangle (x + 0.5, 2 + 0.5, segment_box_size - 1, segment_box_size - 1); +- LinearGradient grad = MakeSegmentGradient (segment_box_size, segment.Color, true); +- cr.Pattern = grad; +- cr.FillPreserve (); +- cr.Color = box_stroke_color; +- cr.Stroke (); +- grad.Destroy (); ++ using (LinearGradient grad = MakeSegmentGradient (segment_box_size, segment.Color, true)) { ++ cr.SetSource (grad); ++ cr.FillPreserve (); ++ cr.SetSourceColor (box_stroke_color); ++ cr.Stroke (); ++ } + + x += segment_box_size + segment_box_spacing; + +@@ -505,7 +503,7 @@ namespace Hyena.Widgets + + cr.MoveTo (x, 0); + text_color.A = 0.9; +- cr.Color = text_color; ++ cr.SetSourceColor (text_color); + PangoCairoHelper.ShowLayout (cr, layout); + cr.Fill (); + +@@ -514,7 +512,7 @@ namespace Hyena.Widgets + + cr.MoveTo (x, lh); + text_color.A = 0.75; +- cr.Color = text_color; ++ cr.SetSourceColor (text_color); + PangoCairoHelper.ShowLayout (cr, layout); + cr.Fill (); + diff --git a/banshee-2.6.2-dbus2.patch b/banshee-2.6.2-dbus2.patch index 0b2c7a6..3e1afae 100644 --- a/banshee-2.6.2-dbus2.patch +++ b/banshee-2.6.2-dbus2.patch @@ -1,12 +1,99 @@ +diff -up banshee-2.6.2/src/Clients/Beroe/Beroe/IndexerClient.cs.dbus2 banshee-2.6.2/src/Clients/Beroe/Beroe/IndexerClient.cs +--- banshee-2.6.2/src/Clients/Beroe/Beroe/IndexerClient.cs.dbus2 2017-07-18 12:03:47.804334294 -0400 ++++ banshee-2.6.2/src/Clients/Beroe/Beroe/IndexerClient.cs 2017-07-18 12:03:59.875023236 -0400 +@@ -43,7 +43,6 @@ using Banshee.Collection.Indexer; + + namespace Beroe + { +- [DBusExportable (ServiceName = "CollectionIndexer")] + public class IndexerClient : Client, IIndexerClient, IDBusExportable + { + public static void Main () +diff -up banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs.dbus2 banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs +--- banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs.dbus2 2017-07-18 12:04:12.220705091 -0400 ++++ banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs 2017-07-18 12:04:24.912378030 -0400 +@@ -42,7 +42,6 @@ using Banshee.Collection.Database; + + namespace Banshee.Collection.Indexer + { +- [DBusExportable (ServiceName = "CollectionIndexer")] + public class CollectionIndexer : ICollectionIndexer, IService, IDBusExportable, IDisposable + { + private static int instance_count = 0; +diff -up banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs.dbus2 banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs +--- banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs.dbus2 2017-07-18 12:04:40.802968534 -0400 ++++ banshee-2.6.2/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs 2017-07-18 12:04:50.458719709 -0400 +@@ -41,7 +41,6 @@ using Banshee.Collection.Database; + + namespace Banshee.Collection.Indexer + { +- [DBusExportable (ServiceName = "CollectionIndexer")] + public class CollectionIndexerService : ICollectionIndexerService, IDBusExportable, IDisposable + { + private List libraries = new List (); diff -up banshee-2.6.2/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs.dbus2 banshee-2.6.2/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs ---- banshee-2.6.2/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs.dbus2 2017-02-27 11:52:23.387595348 -0500 -+++ banshee-2.6.2/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs 2017-02-27 11:52:30.394410958 -0500 -@@ -137,7 +137,7 @@ namespace Banshee.ServiceStack - Log.DebugFormat ("Registering remote object {0} ({1}) on {2}", path, o.GetType (), bus_name); +--- banshee-2.6.2/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs.dbus2 2014-02-18 15:35:23.000000000 -0500 ++++ banshee-2.6.2/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs 2017-07-18 12:07:03.823282943 -0400 +@@ -40,15 +40,6 @@ using Banshee.Base; + + namespace Banshee.ServiceStack + { +- public class DBusExportableAttribute : Attribute +- { +- private string service_name; +- public string ServiceName { +- get { return service_name; } +- set { service_name = value; } +- } +- } +- + public class DBusServiceManager : IService + { + public const string ObjectRoot = "/org/bansheeproject/Banshee"; +@@ -102,43 +93,21 @@ namespace Banshee.ServiceStack + + public ObjectPath RegisterObject (IDBusExportable o) + { +- return RegisterObject (DBusConnection.DefaultServiceName, o); +- } +- +- public ObjectPath RegisterObject (string serviceName, IDBusExportable o) +- { +- return RegisterObject (serviceName, o, MakeObjectPath (o)); ++ return RegisterObject (o, MakeObjectPath (o)); + } + + public ObjectPath RegisterObject (object o, string objectName) + { +- return RegisterObject (DBusConnection.DefaultServiceName, o, objectName); +- } +- +- public ObjectPath RegisterObject (string serviceName, object o, string objectName) +- { + ObjectPath path = null; + + if (DBusConnection.Enabled && Bus.Session != null) { +- object [] attrs = o.GetType ().GetCustomAttributes (typeof (DBusExportableAttribute), true); +- if (attrs != null && attrs.Length > 0) { +- DBusExportableAttribute dbus_attr = (DBusExportableAttribute)attrs[0]; +- if (!String.IsNullOrEmpty (dbus_attr.ServiceName)) { +- serviceName = dbus_attr.ServiceName; +- } +- } +- + lock (registered_objects) { + registered_objects.Add (o, path = new ObjectPath (objectName)); + } + +- string bus_name = DBusConnection.MakeBusName (serviceName); +- +- Log.DebugFormat ("Registering remote object {0} ({1}) on {2}", path, o.GetType (), bus_name); ++ Log.DebugFormat ("Registering remote object {0} ({1})", path, o.GetType ()); - #pragma warning disable 0618 +- #pragma warning disable 0618 - Bus.Session.Register (bus_name, path, o); +- #pragma warning restore 0618 + Bus.Session.Register (path, o); - #pragma warning restore 0618 } + return path; diff --git a/banshee-2.6.2-icon-fix.patch b/banshee-2.6.2-icon-fix.patch new file mode 100644 index 0000000..abaafed --- /dev/null +++ b/banshee-2.6.2-icon-fix.patch @@ -0,0 +1,24 @@ +diff -up banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs.iconfix banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs +--- banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs.iconfix 2017-07-18 13:53:20.214942088 -0400 ++++ banshee-2.6.2/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs 2017-07-18 13:53:41.294431376 -0400 +@@ -64,7 +64,7 @@ namespace Banshee.Gui.Widgets + + // Setup widgetry + try { +- Pixbuf = Gtk.IconTheme.Default.LoadIcon ("process-working", 22, IconLookupFlags.NoSvg); ++ Pixbuf = Gtk.IconTheme.Default.LoadIcon ("process-working-symbolic", 22, (Gtk.IconLookupFlags) 0); + FrameHeight = 22; + FrameWidth = 22; + Load (); +diff -up banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/MessageBar.cs.iconfix banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/MessageBar.cs +--- banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/MessageBar.cs.iconfix 2017-07-18 13:53:05.679294258 -0400 ++++ banshee-2.6.2/src/Hyena/Hyena.Gui/Hyena.Widgets/MessageBar.cs 2017-07-18 13:53:13.031116138 -0400 +@@ -68,7 +68,7 @@ namespace Hyena.Widgets + + image = new AnimatedImage (); + try { +- image.Pixbuf = Gtk.IconTheme.Default.LoadIcon ("process-working", 22, IconLookupFlags.NoSvg); ++ image.Pixbuf = Gtk.IconTheme.Default.LoadIcon ("process-working-symbolic", 22, (Gtk.IconLookupFlags) 0); + image.FrameHeight = 22; + image.FrameWidth = 22; + Spinning = false; diff --git a/banshee.spec b/banshee.spec index 5a4db16..b829f5d 100644 --- a/banshee.spec +++ b/banshee.spec @@ -1,6 +1,6 @@ Name: banshee Version: 2.6.2 -Release: 20%{?dist} +Release: 21%{?dist} Summary: Easily import, manage, and play selections from your music collection License: MIT @@ -21,6 +21,10 @@ Patch7: banshee-2.6.2-gst1.0-handle-events-fix.patch Patch8: banshee-2.6.2-sqlite-hints.patch # Support dbus-sharp 2.0 Patch9: banshee-2.6.2-dbus2.patch +# clean up cairo warnings +Patch10: banshee-2.6.2-cairo-fix.patch +# clean up process-working exception +Patch11: banshee-2.6.2-icon-fix.patch # Mono only available on these: ExclusiveArch: %{mono_arches} @@ -117,6 +121,8 @@ developing extensions for %{name}. %patch7 -p1 -b .handle-events-fix %patch8 -p1 -b .sqlite-hints %patch9 -p1 -b .dbus2 +%patch10 -p1 -b .cairofix +%patch11 -p1 -b .iconfix sed -i "s#gmcs#mcs#g" configure.ac sed -i "s#gmcs#mcs#g" configure* @@ -212,6 +218,11 @@ update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : %{_libdir}/pkgconfig/banshee-*.pc %changelog +* Tue Jul 18 2017 Tom Callaway - 2.6.2-21 +- fix up cairo warnings +- fix icon warning +- use complete dbus patch from upstream (not new, upstream still dead) + * Mon Mar 20 2017 Tom Callaway - 2.6.2-20 - rebuild without webkitgtk