Beispiel #1
0
static void
render_graphics (void)
{
  theme_pixbuf = games_preimage_render (theme_preimage,
                                        14 * tile_width, tile_height);
  rerender_needed = FALSE;
}
Beispiel #2
0
void
bj_chip_set_size (gint width,
                  gint height)
{
        static const gchar *names[4] = { CHIP_FILENAME_100,
                                         CHIP_FILENAME_25,
                                         CHIP_FILENAME_5,
                                         CHIP_FILENAME_1 };
        const char *pixmapdir;

        pixmapdir = games_runtime_get_directory (GAMES_RUNTIME_GAME_PIXMAP_DIRECTORY);

        for (guint i = 0; i < G_N_ELEMENTS (names); i++) {
                gchar *fullname;

                fullname = g_build_filename (pixmapdir, names[i], NULL);

                if (!fullname)
                        continue;

		if (!chip_preimage[i])
			chip_preimage[i] = games_preimage_new_from_file (fullname,
									 NULL);

                if (chip_scaled_pixbuf[i])
                        g_object_unref (chip_scaled_pixbuf[i]);

                chip_scaled_pixbuf[i] = games_preimage_render (chip_preimage[i],
                                                               width,
                                                               height);
                g_free (fullname);
        }
}
static GdkPixbuf *
games_card_theme_svg_get_card_pixbuf (GamesCardTheme *card_theme,
                                      int card_id)
{
  GamesCardThemePreimage *preimage_card_theme = (GamesCardThemePreimage *) card_theme;
  GamesPreimage *preimage = preimage_card_theme->cards_preimage;
  GdkPixbuf *subpixbuf;
  int suit, rank;
  double card_width, card_height;
  double width, height;
  double offsetx, offsety;
  double zoomx, zoomy;
  char node[32];

  if (G_UNLIKELY (card_id == GAMES_CARD_SLOT)) {
    subpixbuf = games_preimage_render (preimage_card_theme->slot_preimage,
                                       preimage_card_theme->card_size.width,
                                       preimage_card_theme->card_size.height);

    return subpixbuf;
  }

  suit = card_id / 13;
  rank = card_id % 13;

  card_width = ((double) games_preimage_get_width (preimage)) / N_COLS;
  card_height = ((double) games_preimage_get_height (preimage)) / N_ROWS;

  width = preimage_card_theme->card_size.width - 2 * DELTA;
  height = preimage_card_theme->card_size.height - 2 * DELTA;

  offsetx = -((double) rank) * card_width + DELTA;
  offsety = -((double) suit) * card_height + DELTA;

  zoomx = width / card_width;
  zoomy = height / card_height;

  games_card_get_node_by_suit_and_rank_snprintf (node, sizeof (node), suit, rank);

  subpixbuf = games_preimage_render_sub (preimage,
                                         node,
                                         preimage_card_theme->card_size.width,
                                         preimage_card_theme->card_size.height,
                                         offsetx, offsety,
                                         zoomx, zoomy);

  return subpixbuf;
}
static GdkPixbuf *
ar_card_theme_sliced_get_card_pixbuf (ArCardTheme *card_theme,
                                         int card_id)
{
  ArCardThemePreimage *preimage_card_theme = (ArCardThemePreimage *) card_theme;
  ArCardThemeSliced *theme = (ArCardThemeSliced *) card_theme;
  GdkPixbuf *subpixbuf, *card_pixbuf;
  int suit, rank;

  if (G_UNLIKELY (card_id == AR_CARD_SLOT)) {
    subpixbuf = games_preimage_render (preimage_card_theme->slot_preimage,
                                       preimage_card_theme->card_size.width,
                                       preimage_card_theme->card_size.height);

    return subpixbuf;
  }

  suit = card_id / 13;
  rank = card_id % 13;

  if (!theme->source &&
      (!theme->scalable ||
       !ar_card_theme_sliced_prerender_scalable (theme)))
    return NULL;

  subpixbuf = gdk_pixbuf_new_subpixbuf (theme->source,
                                        rank *
                                        theme->subsize.width,
                                        suit *
                                        theme->subsize.height,
                                        theme->subsize.width,
                                        theme->subsize.height);
  if (theme->scalable) {
    card_pixbuf = subpixbuf;
  } else {
    card_pixbuf = gdk_pixbuf_scale_simple (subpixbuf,
                                           preimage_card_theme->card_size.width,
                                           preimage_card_theme->card_size.height,
                                           GDK_INTERP_BILINEAR);
    g_object_unref (subpixbuf);
  }

  return card_pixbuf;
}
static gboolean
ar_card_theme_sliced_prerender_scalable (ArCardThemeSliced *theme)
{
  ArCardThemePreimage *preimage_card_theme = (ArCardThemePreimage *) theme;

  g_assert (theme->source == NULL);

  _games_profile_start ("prerendering source pixbuf for %s card theme %s", G_OBJECT_TYPE_NAME (theme), ((ArCardTheme*)theme)->theme_info->display_name);

  theme->source = games_preimage_render (preimage_card_theme->cards_preimage,
                                         preimage_card_theme->card_size.width * 13,
                                         preimage_card_theme->card_size.height * 5);

  _games_profile_end ("prerendering source pixbuf for %s card theme %s", G_OBJECT_TYPE_NAME (theme), ((ArCardTheme*)theme)->theme_info->display_name);

  if (!theme->source)
    return FALSE;

  theme->subsize.width = gdk_pixbuf_get_width (theme->source) / 13;
  theme->subsize.height = gdk_pixbuf_get_height (theme->source) / 5;

  return TRUE;
}