~ubuntu-branches/ubuntu/precise/gnome-games/precise-proposed

« back to all changes in this revision

Viewing changes to gnotski/gnotski.c

  • Committer: Package Import Robot
  • Author(s): Rodrigo Moya
  • Date: 2011-05-30 13:32:04 UTC
  • mfrom: (1.3.4)
  • mto: (163.1.3 precise)
  • mto: This revision was merged to the branch mainline in revision 143.
  • Revision ID: package-import@ubuntu.com-20110530133204-celaq1v1dsxc48q1
Tags: upstream-3.0.2
ImportĀ upstreamĀ versionĀ 3.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
GtkWidget *messagewidget;
67
67
GtkWidget *moveswidget;
68
68
 
69
 
GdkGC *space_gc = NULL;
70
 
 
71
 
GdkPixmap *buffer = NULL;
 
69
cairo_surface_t *buffer = NULL;
72
70
GdkPixbuf *tiles_pixbuf = NULL;
73
71
GamesPreimage *tiles_preimage;
74
72
 
485
483
#endif
486
484
 
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);
490
 
#endif
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 ());
567
563
}
568
564
 
569
565
static gboolean
570
 
expose_space (GtkWidget * widget, GdkEventExpose * event)
 
566
draw_space (GtkWidget * widget, cairo_t *cr)
571
567
{
572
568
  if (clear_game)
573
569
    return FALSE;
574
570
 
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);
 
572
  cairo_paint (cr);
 
573
 
580
574
  return FALSE;
581
575
}
582
576
 
667
661
void
668
662
gui_draw_space (void)
669
663
{
670
 
  static GdkGC *bordergc = NULL;
671
 
  static GdkGC *backgc = NULL;
672
 
  GdkColor *bg_color;
 
664
  cairo_t *cr;
673
665
  GtkStyle *style;
674
666
 
675
 
  if (!backgc)
676
 
    backgc = gdk_gc_new (gtk_widget_get_window (space));
677
 
  if (!bordergc)
678
 
    bordergc = gdk_gc_new (gtk_widget_get_window (space));
679
 
 
680
667
  style = gtk_widget_get_style (space);
681
668
 
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);
686
 
 
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);
691
 
 
692
669
  if (buffer)
693
 
    g_object_unref (buffer);
 
670
    cairo_surface_destroy (buffer);
694
671
 
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);
698
 
 
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);
 
676
 
 
677
  cr = cairo_create (buffer);
 
678
 
 
679
  gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
 
680
  cairo_paint (cr);
 
681
 
 
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);
 
686
  cairo_stroke (cr);
 
687
 
 
688
  cairo_destroy (cr);
705
689
 
706
690
  clear_buffer = clear_game = FALSE;
707
691
 
708
 
  space_gc = backgc;
709
 
 
710
692
  gtk_widget_queue_draw (space);
711
693
}
712
694
 
716
698
  gint value;
717
699
  gint overlay_size;
718
700
  gint overlay_offset;
719
 
 
720
 
  gdk_draw_rectangle (buffer, space_gc, TRUE,
721
 
                      x * tile_size + SPACE_OFFSET,
722
 
                      y * tile_size + SPACE_OFFSET, tile_size, tile_size);
 
701
  cairo_t *cr;
 
702
  GtkStyle *style;
 
703
  GdkRectangle rect;
 
704
 
 
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;
 
709
 
 
710
  style = gtk_widget_get_style (space);
 
711
 
 
712
  cr = cairo_create (buffer);
 
713
  gdk_cairo_rectangle (cr, &rect);
 
714
  gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
 
715
 
 
716
  cairo_fill (cr);
723
717
 
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);
 
723
    cairo_fill (cr);
730
724
  }
731
725
 
732
726
  if (get_piece_id (target, x, y) == '*') {
738
732
    overlay_size = THEME_OVERLAY_SIZE * tile_size / THEME_TILE_SIZE;
739
733
    overlay_offset =
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);
 
735
 
 
736
    cairo_rectangle (cr,
 
737
                     rect.x + overlay_offset, rect.y + overlay_offset,
 
738
                     overlay_size, overlay_size);
 
739
 
 
740
    gdk_cairo_set_source_pixbuf (cr, tiles_pixbuf,
 
741
                                 rect.x - value * tile_size,
 
742
                                 rect.y - tile_size / 2);
 
743
    cairo_fill (cr);
747
744
  }
748
745
 
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);
 
747
 
 
748
  cairo_destroy (cr);
753
749
}
754
750
 
755
751
static gint
835
831
void
836
832
game_score (void)
837
833
{
838
 
  GamesScoreValue score;
839
834
  gint pos;
840
835
  gchar *key;
841
836
    
845
840
  g_free (key);
846
841
  gtk_image_set_from_stock (GTK_IMAGE(level_image[current_level]), GTK_STOCK_YES, GTK_ICON_SIZE_MENU);
847
842
 
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 ();
852
846
  else
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));
1481
1475
 
1482
1476
  gtk_show_about_dialog (GTK_WINDOW (window),
1483
 
#if GTK_CHECK_VERSION (2, 11, 0)
1484
1477
                         "program-name", _(APPNAME_LONG),
1485
 
#else
1486
 
                         "name", _(APPNAME_LONG),
1487
 
#endif
1488
1478
                         "version", VERSION,
1489
1479
                         "comments", _("Sliding Block Puzzles\n\n"
1490
1480
                         "Klotski is a part of GNOME Games."),