[gnome-tetravex/arnaudb/add-moves-arrows] Draw helpers to move all tiles.
- From: Arnaud B. <arnaudb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-tetravex/arnaudb/add-moves-arrows] Draw helpers to move all tiles.
- Date: Sat, 19 Oct 2019 00:59:34 +0000 (UTC)
commit dd46548634eec5dfb90ca318faa2dc0f3957bfec
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Fri Oct 18 03:15:16 2019 +0200
Draw helpers to move all tiles.
src/puzzle-view.vala | 43 +++++++++++++++++++++++++++++++++++++++++--
src/puzzle.vala | 30 +++++++++++++++++++++++-------
2 files changed, 64 insertions(+), 9 deletions(-)
---
diff --git a/src/puzzle-view.vala b/src/puzzle-view.vala
index 737209e..44da5d4 100644
--- a/src/puzzle-view.vala
+++ b/src/puzzle-view.vala
@@ -243,15 +243,17 @@ private class PuzzleView : Gtk.DrawingArea
/* Move immediately */
if (duration == 0)
{
- redraw_tile (image);
+// redraw_tile (image);
image.x = image.target_x;
image.y = image.target_y;
image.snap_to_cursor = true;
- redraw_tile (image);
+// redraw_tile (image);
+ queue_draw ();
return;
}
/* Start animation (maximum of 100fps) */
+ queue_draw ();
if (animation_timeout == 0)
animation_timeout = Timeout.add (10, animate_cb);
}
@@ -447,6 +449,41 @@ private class PuzzleView : Gtk.DrawingArea
context.rectangle (0.0, 0.0, /* width and height */ tilesize, tilesize);
context.fill ();
+ if (x < puzzle.size && selected_tile == null)
+ {
+ Direction dir = puzzle.can_move (x, y);
+ if ((dir == Direction.LEFT && puzzle.has_tile_on_line (y))
+ || (dir == Direction.RIGHT && puzzle.has_tile_on_line (y))
+ || (dir == Direction.UP && puzzle.has_tile_on_column (x))
+ || (dir == Direction.DOWN && puzzle.has_tile_on_column (x)))
+// || dir == Direction.UP_LEFT || dir == Direction.DOWN_RIGHT
+// || dir == Direction.UP_RIGHT || dir == Direction.DOWN_LEFT)
+ {
+ context.save ();
+ context.translate (tilesize / 2.0, tilesize / 2.0);
+ switch (dir)
+ {
+ case Direction.LEFT: context.rotate (-Math.PI_2); break;
+ case Direction.DOWN: context.rotate ( Math.PI ); break;
+ case Direction.RIGHT: context.rotate ( Math.PI_2); break;
+// case Direction.UP_LEFT: context.rotate (-Math.PI_4); break;
+// case Direction.UP_RIGHT: context.rotate ( Math.PI_4); break;
+// case Direction.DOWN_LEFT: context.rotate (-Math.PI_4 * 3.0); break;
+// case Direction.DOWN_RIGHT: context.rotate ( Math.PI_4 * 3.0); break;
+ default: break;
+ }
+
+ context.move_to ( 0.0, -4.0 * tilesize / 10.0);
+ context.line_to (tilesize / -6.0, -3.0 * tilesize / 10.0);
+ context.line_to (tilesize / 6.0, -3.0 * tilesize / 10.0);
+ context.close_path ();
+
+ context.set_source_rgba (1.0, 1.0, 1.0, 0.3);
+ context.stroke ();
+ context.restore ();
+ }
+ }
+
context.restore ();
}
@@ -575,6 +612,8 @@ private class PuzzleView : Gtk.DrawingArea
if (get_tile_coords (x, y, out tile_x, out tile_y))
puzzle.try_move (tile_x, tile_y);
}
+ if (tile_selected)
+ queue_draw (); // hiding move arrows
}
private inline bool get_tile_coords (double event_x, double event_y, out uint8 tile_x, out uint8 tile_y)
{
diff --git a/src/puzzle.vala b/src/puzzle.vala
index 49b0230..5134559 100644
--- a/src/puzzle.vala
+++ b/src/puzzle.vala
@@ -422,7 +422,7 @@ private class Puzzle : Object
}
}
- private inline Direction can_move (uint8 x, uint8 y)
+ internal Direction can_move (uint8 x, uint8 y)
{
bool left_board = x < size;
if (half_board_is_empty (left_board))
@@ -459,13 +459,20 @@ private class Puzzle : Object
return true;
}
- private enum Direction
+ internal bool has_tile_on_line (uint8 y)
{
- NONE,
- UP,
- DOWN,
- LEFT,
- RIGHT;
+ for (uint8 x = 0; x < size; x++)
+ if (board [x, y] != null)
+ return true;
+ return false;
+ }
+
+ internal bool has_tile_on_column (uint8 x)
+ {
+ for (uint8 y = 0; y < size; y++)
+ if (board [x, y] != null)
+ return true;
+ return false;
}
/*\
@@ -863,3 +870,12 @@ private class Puzzle : Object
// TODO restore history 2/2
}
+
+private enum Direction
+{
+ NONE,
+ UP,
+ DOWN,
+ LEFT,
+ RIGHT;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]