[gnome-games/sudoku-vala] UI support for multisized Sudoku, bugfix
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/sudoku-vala] UI support for multisized Sudoku, bugfix
- Date: Mon, 16 Apr 2012 05:02:53 +0000 (UTC)
commit ee4f0811d8dd3e2056b70de17c3180b25fdb0f35
Author: PioneerAxon <arth svnit gmail com>
Date: Mon Apr 2 12:52:21 2012 +0530
UI support for multisized Sudoku, bugfix
UI now has full support for multisized sudoku.
Updated SudokuBoard for easier integreation with UI.
Bugfix : hide number_picker on focus_out event.
gnome-sudoku/src/gnome-sudoku.vala | 14 -----------
gnome-sudoku/src/sudoku-game.vala | 46 ++++++++++++++++++++++-------------
gnome-sudoku/src/sudoku-view.vala | 38 ++++++++++++++++-------------
3 files changed, 50 insertions(+), 48 deletions(-)
---
diff --git a/gnome-sudoku/src/gnome-sudoku.vala b/gnome-sudoku/src/gnome-sudoku.vala
index bd87c6b..2c48107 100644
--- a/gnome-sudoku/src/gnome-sudoku.vala
+++ b/gnome-sudoku/src/gnome-sudoku.vala
@@ -96,20 +96,6 @@ public class Application
[CCode (cname = "G_MODULE_EXPORT quit_cb", instance_pos = -1)]
public void quit_cb (Gtk.Widget widget)
{
-/* FIXME: Every time the game exits with Segmentation fault.
-The stack trace is
-#0 0x00007ffff7267b70 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
-#1 0x00007ffff726a315 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
-#2 0x00007ffff68799f0 in g_object_unref () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
-#3 0x0000000000406b98 in application_finalize (obj=<optimized out>) at gnome-sudoku.c:832
-#4 0x0000000000406f26 in application_unref (instance=0x6ba980) at gnome-sudoku.c:869
-#5 application_unref (instance=0x6ba980) at gnome-sudoku.c:865
-#6 0x0000000000407322 in gnome_sudoku_main (args=0x7fffffffe108, args_length1=1) at gnome-sudoku.c:959
-#7 0x00007ffff5fd730d in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
-#8 0x0000000000405b39 in _start ()
-
-Hope this helps.
-*/
Gtk.main_quit ();
}
diff --git a/gnome-sudoku/src/sudoku-game.vala b/gnome-sudoku/src/sudoku-game.vala
index c13e0f8..0f47965 100644
--- a/gnome-sudoku/src/sudoku-game.vala
+++ b/gnome-sudoku/src/sudoku-game.vala
@@ -7,13 +7,25 @@ public class SudokuBoard
private bool[,] possible_in_row; /* if specific value is possible in specific row */
private bool[,] possible_in_col; /* if specific value is possible in specific col */
private bool[,,] possible_in_block; /* if specific value is possible in specific block */
- private int block_row; /* size of sub-part ( block ) in board */
- private int block_col; /* size of sub-part ( block ) in board */
public bool broken; /* true if forced inserted */
public signal void value_changed (int row, int col, int old_value, int new_value);
public signal void value_changing (int row, int col, int old_value, int new_value);
+ /* Number of rows in one block */
+ private int _block_row;
+ public int block_row
+ {
+ get { return _block_row; }
+ }
+
+ /* Number of columns in one block */
+ private int _block_col;
+ public int block_col
+ {
+ get { return _block_col; }
+ }
+
/* Number of rows in board */
private int _row;
public int row
@@ -41,17 +53,17 @@ public class SudokuBoard
get { return _filled; }
}
- public SudokuBoard (int row = 9, int col = 9, int block_row = 3, int block_col = 3)
+ public SudokuBoard (int block_row, int block_col)
{
- _row = row;
- _col = col;
- this.block_row = block_row;
- this.block_col = block_col;
+ _row = block_row * block_col;
+ _col = block_row * block_col;
+ _block_row = block_row;
+ _block_col = block_col;
cells = new int[_row, _col];
is_fixed = new bool[_row, _col];
possible_in_row = new bool[_row, _col];
possible_in_col = new bool[_col, _row];
- possible_in_block = new bool[block_row, block_col, block_row * block_col];
+ possible_in_block = new bool[_block_row, _block_col, _block_row * _block_col];
broken = false;
for (var l1 = 0; l1 < _row; l1++)
{
@@ -63,9 +75,9 @@ public class SudokuBoard
possible_in_col[l2, l1] = true;
}
}
- for (var l1 = 0; l1 < block_row; l1++)
+ for (var l1 = 0; l1 < _block_row; l1++)
{
- for (var l2 = 0; l2 < block_col; l2++)
+ for (var l2 = 0; l2 < _block_col; l2++)
{
for (var l3 = 0; l3 < max_val; l3++)
possible_in_block[l1, l2, l3] = true;
@@ -86,7 +98,7 @@ public class SudokuBoard
public bool is_possible (int row, int col, int val)
{
val--;
- return (possible_in_row[row,val] && possible_in_col[col,val] && possible_in_block [ row / block_col, col / block_row, val]);
+ return (possible_in_row[row,val] && possible_in_col[col,val] && possible_in_block [ row / _block_col, col / _block_row, val]);
}
public int count_possible (int row, int col)
@@ -130,10 +142,10 @@ public class SudokuBoard
int val = cells [l1, l2];
if (val-- == 0)
continue;
- ret |= (possible_in_row [l1, val] == false || possible_in_col [l2, val] == false || possible_in_block [l1 / block_col, l2 / block_row, val] == false);
+ ret |= (possible_in_row [l1, val] == false || possible_in_col [l2, val] == false || possible_in_block [l1 / _block_col, l2 / _block_row, val] == false);
possible_in_row [l1, val] = false;
possible_in_col [l2, val] = false;
- possible_in_block [l1 / block_col, l2 / block_row, val] = false;
+ possible_in_block [l1 / _block_col, l2 / _block_row, val] = false;
}
}
return ret;
@@ -153,7 +165,7 @@ public class SudokuBoard
val--;
possible_in_row[row, val] = false;
possible_in_col[col, val] = false;
- possible_in_block[row / block_col, col / block_row, val] = false;
+ possible_in_block[row / _block_col, col / _block_row, val] = false;
_filled++;
}
@@ -179,7 +191,7 @@ public class SudokuBoard
cells[row, col] = 0;
possible_in_row[row, val] = true;
possible_in_col[col, val] = true;
- possible_in_block[row / block_col, col / block_row, val] = true;
+ possible_in_block[row / _block_col, col / _block_row, val] = true;
_filled--;
if (broken)
broken = update_possibles ();
@@ -222,9 +234,9 @@ public class SudokuGame
public signal void cell_changed (int row, int col, int old_val, int new_val);
- public SudokuGame ()
+ public SudokuGame (int block_row = 3, int block_col = 3)
{
- board = new SudokuBoard ();
+ board = new SudokuBoard (block_row, block_col);
undostack = null;
redostack = null;
board.value_changing.connect (update_undo);
diff --git a/gnome-sudoku/src/sudoku-view.vala b/gnome-sudoku/src/sudoku-view.vala
index f166d4b..c6c6bb4 100644
--- a/gnome-sudoku/src/sudoku-view.vala
+++ b/gnome-sudoku/src/sudoku-view.vala
@@ -145,12 +145,12 @@ private class SudokuCellView : Gtk.DrawingArea
popup.skip_pager_hint = true;
popup.set_type_hint (Gdk.WindowTypeHint.DIALOG);
- var table = new Gtk.Table (3, 3, false);
- for (var col = 0; col < 3; col++)
+ var table = new Gtk.Table (board.block_row, board.block_col, true);
+ for (var col = 0; col < board.block_col; col++)
{
- for (var row = 0; row < 3; row++)
+ for (var row = 0; row < board.block_row; row++)
{
- int n = col + row * 3 + 1;
+ int n = col + row * board.block_col + 1;
var button = new Gtk.Button ();
table.attach_defaults (button, col, col+1, row, row+1);
@@ -181,7 +181,7 @@ private class SudokuCellView : Gtk.DrawingArea
get_window ().get_origin (out x, out y);
popup.show ();
popup.get_size (out width, out height);
-
+ popup.focus_out_event.connect (() => { hide_popup (); return true; });
var screen = popup.get_screen ();
var popup_x = x - (width - get_allocated_width ()) / 2;
var popup_y = y - (height - get_allocated_height ()) / 2;
@@ -391,19 +391,23 @@ public class SudokuView : Gtk.AspectFrame
add (box);
box.show ();
- var table = new Gtk.Table (9, 9, true);
+ var table = new Gtk.Table (game.board.row, game.board.col, false);
table.row_spacing = 1;
table.column_spacing = 1;
- table.set_row_spacing (2, 2);
- table.set_row_spacing (5, 2);
- table.set_col_spacing (2, 2);
- table.set_col_spacing (5, 2);
+ for (var row = game.board.block_row; row < game.board.row; row += game.board.block_row)
+ {
+ table.set_row_spacing (row - 1, 2);
+ }
+ for (var col = game.board.block_col; col < game.board.col; col += game.board.block_col)
+ {
+ table.set_col_spacing (col - 1, 2);
+ }
table.border_width = 2;
- cells = new SudokuCellView[9,9];
- for (var row = 0; row < 9; row++)
+ cells = new SudokuCellView[game.board.row, game.board.col];
+ for (var row = 0; row < game.board.row; row++)
{
- for (var col = 0; col < 9; col++)
+ for (var col = 0; col < game.board.col; col++)
{
var cell = new SudokuCellView (row, col, ref game.board);
cells[row, col] = cell;
@@ -445,16 +449,16 @@ public class SudokuView : Gtk.AspectFrame
public void clear_top_notes ()
{
- for (var i = 0; i < 9; i++)
- for (var j = 0; j < 9; j++)
+ for (var i = 0; i < game.board.row; i++)
+ for (var j = 0; j < game.board.col; j++)
cells[i,j].top_notes = "";
queue_draw ();
}
public void clear_bottom_notes ()
{
- for (var i = 0; i < 9; i++)
- for (var j = 0; j < 9; j++)
+ for (var i = 0; i < game.board.row; i++)
+ for (var j = 0; j < game.board.col; j++)
cells[i,j].bottom_notes = "";
queue_draw ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]