[gnome-klotski] Added Click-To-Move and active piece color change
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-klotski] Added Click-To-Move and active piece color change
- Date: Thu, 7 Nov 2013 15:12:56 +0000 (UTC)
commit 8db16694bc38b6bca79906c8fba9395e4b50e754
Author: Isaac Lenton <isaac isuniversal com>
Date: Mon Nov 4 02:52:52 2013 +1000
Added Click-To-Move and active piece color change
https://bugzilla.gnome.org/show_bug.cgi?id=562018
src/puzzle-view.vala | 37 +++++++++++++++++++++++++++++++++++--
1 files changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/src/puzzle-view.vala b/src/puzzle-view.vala
index 7fa367f..aea6312 100644
--- a/src/puzzle-view.vala
+++ b/src/puzzle-view.vala
@@ -21,8 +21,15 @@ public class PuzzleView : Gtk.DrawingArea
private int piece_x = 0;
private int piece_y = 0;
+ private bool piece_unmoved = false;
+
+ private char _piece_id = '\0';
+ private char piece_id
+ {
+ get { return _piece_id; }
+ set { _piece_id = value; queue_draw (); }
+ }
- private char piece_id = '\0';
private char last_piece_id = '\0';
private double kx = 0;
@@ -140,8 +147,17 @@ public class PuzzleView : Gtk.DrawingArea
for (var y = 0; y < puzzle.height; y++)
for (var x = 0; x < puzzle.width; x++)
+ {
draw_square (cr, x, y, kx, ky);
+ if (piece_id == puzzle.get_piece_id (puzzle.map, x, y))
+ {
+ Gdk.cairo_set_source_rgba (cr, {1.0, 1.0, 1.0, 0.2});
+ cr.rectangle (x*tile_size + kx, y*tile_size + ky, tile_size, tile_size);
+ cr.fill ();
+ }
+ }
+
return false;
}
@@ -191,9 +207,22 @@ public class PuzzleView : Gtk.DrawingArea
{
if (puzzle.game_over ())
return false;
+
piece_x = (int) (event.x - kx) / tile_size;
piece_y = (int) (event.y - ky) / tile_size;
- piece_id = puzzle.get_piece_id (puzzle.map, piece_x, piece_y);
+ char new_piece_id = puzzle.get_piece_id (puzzle.map, piece_x, piece_y);
+
+ if (piece_id != '\0' && piece_unmoved)
+ {
+ piece_id = '\0';
+ return false;
+ }
+ if (new_piece_id == ' ' || new_piece_id == '.' || new_piece_id == '-'
+ || new_piece_id == '#' || new_piece_id == piece_id)
+ return false;
+
+ piece_unmoved = true;
+ piece_id = new_piece_id;
puzzle.move_map = puzzle.map;
}
@@ -204,6 +233,9 @@ public class PuzzleView : Gtk.DrawingArea
{
if (event.button == 1 && piece_id != '\0')
{
+ if (piece_unmoved)
+ return false;
+
if (puzzle.movable (piece_id) && puzzle.mapcmp (puzzle.move_map, puzzle.map))
{
if (last_piece_id == '\0' || last_piece_id != piece_id)
@@ -243,6 +275,7 @@ public class PuzzleView : Gtk.DrawingArea
return false;
if (puzzle.move_piece (piece_id, piece_x, piece_y, new_piece_x, new_piece_y))
{
+ piece_unmoved = false;
piece_x = new_piece_x;
piece_y = new_piece_y;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]