[gnome-games] glchess: Use Cairo.Surface.similar for caching pieces.
- From: Tiffany Antopolski <antopolski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] glchess: Use Cairo.Surface.similar for caching pieces.
- Date: Wed, 22 Feb 2012 20:05:36 +0000 (UTC)
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]