[gnome-games] glchess: Use Cairo.Surface.similar for caching pieces.



commit a0268dd86ee92895f085ef05c5fc73df9c1bd48d
Author: Tiffany Antopolski <tiffany antopolski gmail com>
Date:   Wed Feb 22 16:32:08 2012 +0100

    glchess: Use Cairo.Surface.similar for caching pieces.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=668552

 glchess/src/chess-view-2d.vala |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)
---
diff --git a/glchess/src/chess-view-2d.vala b/glchess/src/chess-view-2d.vala
index 95f1d31..17efada 100644
--- a/glchess/src/chess-view-2d.vala
+++ b/glchess/src/chess-view-2d.vala
@@ -4,9 +4,9 @@ private class ChessView2D : ChessView
     private int square_size;
     private int selected_square_size;
     private Cairo.ImageSurface? model_surface;
-    private Cairo.ImageSurface? selected_model_surface;
+    private Cairo.Surface? selected_model_surface;
     private string loaded_theme_name = "";
-    
+
     private double border_size
     {
         get { return square_size / 2; }
@@ -20,7 +20,7 @@ private class ChessView2D : ChessView
     public override bool configure_event (Gdk.EventConfigure event)
     {
         int short_edge = int.min (get_allocated_width (), get_allocated_height ());
-            
+
         square_size = (int) Math.floor ((short_edge - 2 * border) / 9.0);
         var extra = square_size * 0.1;
         if (extra < 3)
@@ -55,15 +55,15 @@ private class ChessView2D : ChessView
         handle.render_cairo (c2);
         c2.restore ();
     }
-    
-    private void load_theme ()
+
+    private void load_theme (Cairo.Context c)
     {
         /* Skip if already loaded */
         if (scene.theme_name == loaded_theme_name && model_surface != null && square_size == model_surface.get_height ())
             return;
 
         model_surface = new Cairo.ImageSurface (Cairo.Format.ARGB32, 12 * square_size, square_size);
-        selected_model_surface = new Cairo.ImageSurface (Cairo.Format.ARGB32, 12 * selected_square_size, selected_square_size);
+        selected_model_surface = new Cairo.Surface.similar (c.get_target (), Cairo.Content.COLOR_ALPHA, 12 * selected_square_size, selected_square_size);
 
         var c1 = new Cairo.Context (model_surface);
         var c2 = new Cairo.Context (selected_model_surface);
@@ -85,7 +85,7 @@ private class ChessView2D : ChessView
 
     public override bool draw (Cairo.Context c)
     {
-        load_theme ();
+        load_theme (c);
 
         c.translate (get_allocated_width () / 2, get_allocated_height () / 2);
         //c.scale (s, s);
@@ -102,7 +102,7 @@ private class ChessView2D : ChessView
             {
                 int x = (int) ((file - 4) * square_size);
                 int y = (int) ((3 - rank) * square_size);
-                
+
                 c.rectangle (x, y, square_size, square_size);
                 if ((file + rank) % 2 == 0)
                     c.set_source_rgb (0xba/255.0, 0xbd/255.0, 0xb6/255.0);
@@ -179,6 +179,7 @@ private class ChessView2D : ChessView
 
             draw_piece (c,
                         model.is_selected ? selected_model_surface : model_surface,
+						model.is_selected ? selected_square_size : square_size,
                         model.piece, model.under_threat && scene.show_move_hints ? 0.8 : 1.0);
 
             c.restore ();
@@ -196,7 +197,7 @@ private class ChessView2D : ChessView
                     c.translate (square_size / 2, square_size / 2);
                     c.rotate (-Math.PI * scene.board_angle / 180.0);
 
-                    draw_piece (c, model_surface, scene.get_selected_piece (), 0.1);
+                    draw_piece (c, model_surface, square_size, scene.get_selected_piece (), 0.1);
 
                     c.restore ();
                 }
@@ -205,13 +206,12 @@ private class ChessView2D : ChessView
 
         return true;
     }
-    
-    private void draw_piece (Cairo.Context c, Cairo.ImageSurface surface, ChessPiece piece, double alpha)
+
+    private void draw_piece (Cairo.Context c, Cairo.Surface surface, int size, ChessPiece piece, double alpha)
     {
         if (scene.board_side == "facetoface" && piece.color == Color.BLACK)
             c.rotate (Math.PI);
 
-        var size = surface.get_height ();
         c.translate (-size / 2, -size / 2);
 
         int offset = piece.type;



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