487
485
context = g_option_context_new (NULL);
488
#if GLIB_CHECK_VERSION (2, 12, 0)
489
486
g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
491
487
g_option_context_add_group (context, gtk_get_option_group (TRUE));
492
488
#ifdef WITH_SMCLIENT
493
489
g_option_context_add_group (context, egg_sm_client_get_option_group ());
570
expose_space (GtkWidget * widget, GdkEventExpose * event)
566
draw_space (GtkWidget * widget, cairo_t *cr)
575
gdk_draw_drawable (gtk_widget_get_window (widget),
576
gtk_widget_get_style (widget)->fg_gc[GTK_STATE_NORMAL],
577
buffer, event->area.x, event->area.y,
578
event->area.x, event->area.y,
579
event->area.width, event->area.height);
571
cairo_set_source_surface (cr, buffer, 0, 0);
668
662
gui_draw_space (void)
670
static GdkGC *bordergc = NULL;
671
static GdkGC *backgc = NULL;
676
backgc = gdk_gc_new (gtk_widget_get_window (space));
678
bordergc = gdk_gc_new (gtk_widget_get_window (space));
680
667
style = gtk_widget_get_style (space);
682
bg_color = gdk_color_copy (&style->bg[GTK_STATE_NORMAL]);
683
gdk_gc_set_foreground (backgc, bg_color);
684
gdk_gc_set_fill (backgc, GDK_SOLID);
685
gdk_color_free (bg_color);
687
bg_color = gdk_color_copy (&style->fg[GTK_STATE_NORMAL]);
688
gdk_gc_set_foreground (bordergc, bg_color);
689
gdk_gc_set_fill (bordergc, GDK_SOLID);
690
gdk_color_free (bg_color);
693
g_object_unref (buffer);
670
cairo_surface_destroy (buffer);
695
buffer = gdk_pixmap_new (gtk_widget_get_window (space),
672
buffer = gdk_window_create_similar_surface (gtk_widget_get_window (space),
673
CAIRO_CONTENT_COLOR_ALPHA,
696
674
width * tile_size + SPACE_PADDING,
697
height * tile_size + SPACE_PADDING, -1);
699
gdk_draw_rectangle (buffer, bordergc, FALSE, 0, 0,
700
width * tile_size + SPACE_PADDING - 1,
701
height * tile_size + SPACE_PADDING - 1);
702
gdk_draw_rectangle (buffer, backgc, TRUE, 1, 1,
703
width * tile_size + SPACE_PADDING - 2,
704
height * tile_size + SPACE_PADDING - 2);
675
height * tile_size + SPACE_PADDING);
677
cr = cairo_create (buffer);
679
gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
682
gdk_cairo_set_source_color (cr, &style->fg[GTK_STATE_NORMAL]);
683
cairo_set_line_width (cr, 1.0);
684
cairo_rectangle (cr, 1.5, 1.5, width * tile_size + SPACE_PADDING - 2.0,
685
height * tile_size + SPACE_PADDING - 2.0);
706
690
clear_buffer = clear_game = FALSE;
710
692
gtk_widget_queue_draw (space);
717
699
gint overlay_size;
718
700
gint overlay_offset;
720
gdk_draw_rectangle (buffer, space_gc, TRUE,
721
x * tile_size + SPACE_OFFSET,
722
y * tile_size + SPACE_OFFSET, tile_size, tile_size);
705
rect.x = x * tile_size + SPACE_OFFSET;
706
rect.y = y * tile_size + SPACE_OFFSET;
707
rect.width = tile_size;
708
rect.height = tile_size;
710
style = gtk_widget_get_style (space);
712
cr = cairo_create (buffer);
713
gdk_cairo_rectangle (cr, &rect);
714
gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
724
718
if (get_piece_id (target, x, y) != ' ') {
725
gdk_draw_pixbuf (buffer, NULL, tiles_pixbuf,
726
get_piece_nr (target, x, y) * tile_size, tile_size / 2,
727
x * tile_size + SPACE_OFFSET,
728
y * tile_size + SPACE_OFFSET,
729
tile_size, tile_size, GDK_RGB_DITHER_NORMAL, 0, 0);
719
gdk_cairo_rectangle (cr, &rect);
720
gdk_cairo_set_source_pixbuf (cr, tiles_pixbuf,
721
rect.x - get_piece_nr (target, x, y) * tile_size,
722
rect.y - tile_size / 2);
732
726
if (get_piece_id (target, x, y) == '*') {
738
732
overlay_size = THEME_OVERLAY_SIZE * tile_size / THEME_TILE_SIZE;
740
734
THEME_TILE_CENTER * tile_size / THEME_TILE_SIZE - overlay_size / 2;
741
gdk_draw_pixbuf (buffer, NULL, tiles_pixbuf,
742
value * tile_size + overlay_offset,
743
overlay_offset + tile_size / 2,
744
x * tile_size + overlay_offset + SPACE_OFFSET,
745
y * tile_size + overlay_offset + SPACE_OFFSET,
746
overlay_size, overlay_size, GDK_RGB_DITHER_NORMAL, 0, 0);
737
rect.x + overlay_offset, rect.y + overlay_offset,
738
overlay_size, overlay_size);
740
gdk_cairo_set_source_pixbuf (cr, tiles_pixbuf,
741
rect.x - value * tile_size,
742
rect.y - tile_size / 2);
749
gtk_widget_queue_draw_area (space,
750
x * tile_size + SPACE_OFFSET,
751
y * tile_size + SPACE_OFFSET,
752
tile_size, tile_size);
746
gdk_window_invalidate_rect (gtk_widget_get_window (space), &rect, TRUE);
846
841
gtk_image_set_from_stock (GTK_IMAGE(level_image[current_level]), GTK_STOCK_YES, GTK_ICON_SIZE_MENU);
848
score.plain = (guint32) moves;
849
pos = games_scores_add_score (highscores, score);
843
pos = games_scores_add_plain_score (highscores, (guint32) moves);
850
844
if (show_score_dialog (pos, TRUE) == GTK_RESPONSE_REJECT)
851
845
gtk_main_quit ();
944
938
| GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK);
945
939
/* We do our own double-buffering. */
946
940
gtk_widget_set_double_buffered (space, FALSE);
947
g_signal_connect (G_OBJECT (space), "expose_event",
948
G_CALLBACK (expose_space), NULL);
941
g_signal_connect (G_OBJECT (space), "draw",
942
G_CALLBACK (draw_space), NULL);
949
943
g_signal_connect (G_OBJECT (space), "configure_event",
950
944
G_CALLBACK (configure_space), NULL);
951
945
g_signal_connect (G_OBJECT (space), "button_press_event",
1480
1474
gchar *license = games_get_license (_(APPNAME_LONG));
1482
1476
gtk_show_about_dialog (GTK_WINDOW (window),
1483
#if GTK_CHECK_VERSION (2, 11, 0)
1484
1477
"program-name", _(APPNAME_LONG),
1486
"name", _(APPNAME_LONG),
1488
1478
"version", VERSION,
1489
1479
"comments", _("Sliding Block Puzzles\n\n"
1490
1480
"Klotski is a part of GNOME Games."),