}
gdImagePtr img = gdImageCreate (img_size, img_size);
- int white = gdImageColorAllocate (img, 255,255,255);
+ gdImageColorAllocate (img, 255,255,255);
int black = gdImageColorAllocate (img, 0, 0, 0);
int blue = gdImageColorAllocate (img, 0, 0, 216);
gdFontPtr sm_fnt = gdFontGetMediumBold ();
return false;
}
-/* unfreeze the grid - mak editing possible to change words */
+/* unfreeze the grid - make editing possible to change words */
void unfreeze_puzzle (Puzzle *p)
{
for (int i = 0; i < p->grid_size; i ++)
/* save the puzzle to a file */
void save_puzzle (Puzzle *puzzle, const char* file) {
FILE *outfile;
- /* First output the uncompressed contents to temp file */
+ /* First output the uncompressed contents to a temp file */
outfile = tmpfile ();
if (outfile == NULL)
{
gzip compressed file */
fflush (outfile);
fseek (outfile, 0, 0);
-
+
/* now compress the file and save it to destination file */
gzFile outdestfile = gzopen (file, "wb");
if (outdestfile == NULL)
fclose (outfile);
exit (1);
}
- char buf[4096];
- while (fread (buf, sizeof(char), 4096, outfile))
+ char buf[128];
+ int num = fread (buf, sizeof(char), sizeof(char)*128, outfile);
+ while (num > 0)
{
- int res = gzwrite (outdestfile, buf, strlen (buf) );
+ int res = gzwrite (outdestfile, buf, num*sizeof(char) );
if (res == 0)
{
fprintf (stderr, "%s %s\n", ERROR_WRITING_FILE, COMPRESSED);
fclose (outfile);
exit (1);
}
+ num = fread (buf, sizeof(char), sizeof(char)*128, outfile);
}
gzclose (outdestfile);
fclose (outfile);
exit (1);
}
/* Put the uncompressed content to the temp file */
- char buf[4096];
- while (gzread (insourcefile, buf, 4096))
+ char buf[128];
+ int num = 0;
+ num = gzread (insourcefile, buf, 128);
+ while (num > 0)
{
- int res = fwrite (buf, sizeof(char), strlen (buf), infile);
+ int res = fwrite (buf, 1, num, infile);
if (res == 0)
{
fprintf (stderr, "%s\n", ERROR_READING_FILE);
gzclose (insourcefile);
exit (1);
}
+ num = gzread (insourcefile, buf, 128);
}
/* Close the gzip file */
gzclose (insourcefile);
GtkWidget *window;
+struct MainAppData {
+ Puzzle puzzle;
+ char filename[65535];
+ bool is_loaded;
+} app_data;
+
/* slot for drawing the puzzle */
gboolean on_puzzle_area_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
{
- GdkRGBA colorfore, colorback;
- gdk_rgba_parse (&colorfore, "#000000");
- gdk_rgba_parse (&colorback, "#ffffff");
- cairo_set_line_width (cr, 3);
- gtk_widget_set_size_request (widget, 10*30+5, 10*30+5);
- for (int i = 0; i < 10; i ++)
+ /* if a puzzle is loaded */
+ if (app_data.is_loaded == true)
{
- for (int j = 0; j < 10; j ++)
+ GdkRGBA colorfore, colorback;
+ gdk_rgba_parse (&colorfore, "#000000");
+ gdk_rgba_parse (&colorback, "#ffffff");
+ cairo_set_line_width (cr, 3);
+
+ /* set the size of the drawing area */
+ gtk_widget_set_size_request (widget, app_data.puzzle.grid_size*30+5,
+ app_data.puzzle.grid_size*30+5);
+
+ /* Draw the grid */
+ for (int i = 0; i < app_data.puzzle.grid_size; i ++)
{
- cairo_rectangle (cr, i*30+5, j*30+5, 30, 30);
- gdk_cairo_set_source_rgba (cr, &colorfore);
- cairo_stroke (cr);
-
- cairo_rectangle (cr, i*30+5, j*30+5, 30, 30);
- gdk_cairo_set_source_rgba (cr, &colorback);
- cairo_fill (cr);
+ for (int j = 0; j < app_data.puzzle.grid_size; j ++)
+ {
+ cairo_rectangle (cr, j*30+5, i*30+5, 30, 30);
+ gdk_cairo_set_source_rgba (cr, &colorfore);
+ cairo_stroke (cr);
+
+ /* if it is not a blank grid then set the background color
+ to black */
+ if (app_data.puzzle.chars[i][j] != '#')
+ gdk_cairo_set_source_rgba (cr, &colorback);
+
+ cairo_rectangle (cr, j*30+5, i*30+5, 30, 30);
+
+ cairo_fill (cr);
+ }
}
}
-
+
return FALSE;
}
}
/* slot for open menu */
-void on_menu_open_activate (GtkMenuItem *item, gpointer data)
+void on_menu_open_activate (GtkMenuItem *item, GtkDrawingArea* area)
{
GtkWidget *dialog;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
{
char *filename;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
- Puzzle p = load_puzzle (filename);
+ app_data.puzzle = load_puzzle (filename);
+ app_data.is_loaded = true;
+ strcpy (app_data.filename, filename);
/* if the grid is not frozen then the game cannot be played */
- if (p.grid_frozen == false)
+ if (app_data.puzzle.grid_frozen == false)
{
GtkWidget *errordlg ;
errordlg = gtk_message_dialog_new (GTK_WINDOW(window),
UNFROZEN_GRID_PLAYER);
gtk_dialog_run (GTK_DIALOG(errordlg));
gtk_widget_destroy (errordlg);
-
+ app_data.is_loaded = false;
}
+ gtk_widget_queue_draw_area (GTK_WIDGET (area), 0, 0, 305, 305);
+
g_free (filename);
}
("/org/harishankar/wordblox/wordblox.svg", NULL);
if (icon == NULL)
fprintf (stderr, ERROR_ICON);
-
+
GtkBuilder *builder;
builder = gtk_builder_new ();
guint ret = gtk_builder_add_from_resource (builder,
"/org/harishankar/wordblox/wordblox_player.glade", NULL);
+ app_data.is_loaded = false;
+
if (ret == 0)
{
fprintf (stderr, ERROR_WINDOW);