[gnome-chess] Use GResource for piece images



commit 627ee9c5b303f17987fb477fb8c81a2aeb27b7b7
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Thu Dec 24 11:56:53 2020 -0600

    Use GResource for piece images
    
    It's 2020, no need to load SVGs from /usr/share anymore.

 data/meson.build        |  5 -----
 src/chess-view.vala     |  3 ++-
 src/chess.gresource.xml | 32 +++++++++++++++++++++++++++++---
 src/gnome-chess.vala    | 23 ++++++++++++-----------
 4 files changed, 43 insertions(+), 20 deletions(-)
---
diff --git a/data/meson.build b/data/meson.build
index 7d254cf..ce1f983 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -1,10 +1,5 @@
 subdir('icons')
 
-# The SVGs of the chess pieces
-install_subdir('pieces',
-  install_dir: join_paths(datadir, meson.project_name())
-)
-
 # The engines.conf file
 install_data('engines.conf',
   install_dir: pkgsysconfdir,
diff --git a/src/chess-view.vala b/src/chess-view.vala
index a92f643..ed854d5 100644
--- a/src/chess-view.vala
+++ b/src/chess-view.vala
@@ -63,7 +63,8 @@ public class ChessView : Gtk.DrawingArea
         Rsvg.Handle handle;
         try
         {
-            handle = new Rsvg.Handle.from_file (Path.build_filename (PKGDATADIR, "pieces", scene.theme_name, 
name + ".svg", null));
+            var stream = resources_open_stream (Path.build_path ("/", "/org/gnome/Chess/pieces", 
scene.theme_name, name + ".svg"), ResourceLookupFlags.NONE);
+            handle = new Rsvg.Handle.from_stream_sync (stream, null, Rsvg.HandleFlags.FLAGS_NONE, null);
         }
         catch (Error e)
         {
diff --git a/src/chess.gresource.xml b/src/chess.gresource.xml
index d11b371..42d9db1 100644
--- a/src/chess.gresource.xml
+++ b/src/chess.gresource.xml
@@ -1,9 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/Chess/ui">
-    <file preprocess="xml-stripblanks" alias="gnome-chess.ui">gnome-chess.ui</file>
-    <file preprocess="xml-stripblanks" alias="preferences.ui">preferences.ui</file>
-    <file preprocess="xml-stripblanks" alias="promotion-type-selector.ui">promotion-type-selector.ui</file>
+    <file preprocess="xml-stripblanks">gnome-chess.ui</file>
+    <file preprocess="xml-stripblanks">preferences.ui</file>
+    <file preprocess="xml-stripblanks">promotion-type-selector.ui</file>
+  </gresource>
+  <gresource prefix="/org/gnome/Chess/pieces">
+    <file preprocess="xml-stripblanks" alias="fancy/blackBishop.svg">pieces/fancy/blackBishop.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/blackKing.svg">pieces/fancy/blackKing.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/blackKnight.svg">pieces/fancy/blackKnight.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/blackPawn.svg">pieces/fancy/blackPawn.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/blackQueen.svg">pieces/fancy/blackQueen.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/blackRook.svg">pieces/fancy/blackRook.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/whiteBishop.svg">pieces/fancy/whiteBishop.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/whiteKing.svg">pieces/fancy/whiteKing.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/whiteKnight.svg">pieces/fancy/whiteKnight.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/whitePawn.svg">pieces/fancy/whitePawn.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/whiteQueen.svg">pieces/fancy/whiteQueen.svg</file>
+    <file preprocess="xml-stripblanks" alias="fancy/whiteRook.svg">pieces/fancy/whiteRook.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/blackBishop.svg">pieces/simple/blackBishop.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/blackKing.svg">pieces/simple/blackKing.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/blackKnight.svg">pieces/simple/blackKnight.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/blackPawn.svg">pieces/simple/blackPawn.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/blackQueen.svg">pieces/simple/blackQueen.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/blackRook.svg">pieces/simple/blackRook.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/whiteBishop.svg">pieces/simple/whiteBishop.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/whiteKing.svg">pieces/simple/whiteKing.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/whiteKnight.svg">pieces/simple/whiteKnight.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/whitePawn.svg">pieces/simple/whitePawn.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/whiteQueen.svg">pieces/simple/whiteQueen.svg</file>
+    <file preprocess="xml-stripblanks" alias="simple/whiteRook.svg">pieces/simple/whiteRook.svg</file>
   </gresource>
   <gresource prefix="/org/gnome/Chess/gtk">
     <file preprocess="xml-stripblanks">help-overlay.ui</file>
diff --git a/src/gnome-chess.vala b/src/gnome-chess.vala
index 19e391f..0824aa0 100644
--- a/src/gnome-chess.vala
+++ b/src/gnome-chess.vala
@@ -391,17 +391,17 @@ Copyright © 2015–2016 Sahil Sareen""";
             else
                 color = "black";
 
-            var filename = Path.build_filename (PKGDATADIR, "pieces", scene.theme_name, "%sQueen.svg".printf 
(color));
-            set_piece_image ((Image) builder.get_object ("image_queen"), filename);
+            var resource_path = Path.build_path ("/", "/org/gnome/Chess/pieces", scene.theme_name, 
"%sQueen.svg".printf (color));
+            set_piece_image ((Image) builder.get_object ("image_queen"), resource_path);
 
-            filename = Path.build_filename (PKGDATADIR, "pieces", scene.theme_name, "%sKnight.svg".printf 
(color));
-            set_piece_image ((Image) builder.get_object ("image_knight"), filename);
+            resource_path = Path.build_path ("/", "/org/gnome/Chess/pieces", scene.theme_name, 
"%sKnight.svg".printf (color));
+            set_piece_image ((Image) builder.get_object ("image_knight"), resource_path);
 
-            filename = Path.build_filename (PKGDATADIR, "pieces", scene.theme_name, "%sRook.svg".printf 
(color));
-            set_piece_image ((Image) builder.get_object ("image_rook"), filename);
+            resource_path = Path.build_path ("/", "/org/gnome/Chess/pieces", scene.theme_name, 
"%sRook.svg".printf (color));
+            set_piece_image ((Image) builder.get_object ("image_rook"), resource_path);
 
-            filename = Path.build_filename (PKGDATADIR, "pieces", scene.theme_name, "%sBishop.svg".printf 
(color));
-            set_piece_image ((Image) builder.get_object ("image_bishop"), filename);
+            resource_path = Path.build_path ("/", "/org/gnome/Chess/pieces", scene.theme_name, 
"%sBishop.svg".printf (color));
+            set_piece_image ((Image) builder.get_object ("image_bishop"), resource_path);
 
             promotion_type_selector_dialog.response.connect (promotion_type_selector_response_cb);
         }
@@ -411,13 +411,14 @@ Copyright © 2015–2016 Sahil Sareen""";
         promotion_type_completion_handler = (type) => handler (type);
     }
 
-    private void set_piece_image (Image image, string filename)
+    private void set_piece_image (Image image, string resource_path)
     {
         const int size = 48;
 
         try
         {
-            var h = new Rsvg.Handle.from_file (filename);
+            var stream = resources_open_stream (resource_path, ResourceLookupFlags.NONE);
+            var h = new Rsvg.Handle.from_stream_sync (stream, null, Rsvg.HandleFlags.FLAGS_NONE, null);
 
             var s = new Cairo.ImageSurface (Cairo.Format.ARGB32, size, size);
             var c = new Cairo.Context (s);
@@ -430,7 +431,7 @@ Copyright © 2015–2016 Sahil Sareen""";
         }
         catch (Error e)
         {
-            warning ("Failed to load image %s: %s", filename, e.message);
+            warning ("Failed to load image %s: %s", resource_path, e.message);
         }
     }
 


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