示例#1
0
void load_intro_gfx(void)
{
  int tot, lin, y, w;
  char s[64];
  XColor face;
  int have_face;
  const char *motto = freeciv_motto();
  XFontSetExtents *exts;

  /* metrics */

  exts = XExtentsOfFontSet(main_font_set);
  lin = exts->max_logical_extent.height;

  /* get colors */

  if(XParseColor(display, cmap, COLOR_MOTTO_FACE, &face) &&
     XAllocColor(display, cmap, &face)) {
    have_face = TRUE;
  } else {
    face.pixel = get_color(tileset, COLOR_OVERVIEW_VIEWRECT)->color.pixel;
    have_face = FALSE;
  }

  /* Main graphic */

  intro_gfx_sprite = load_gfxfile(tileset_main_intro_filename(tileset));
  tot = intro_gfx_sprite->width;

  y = intro_gfx_sprite->height - (2 * lin);

  w = XmbTextEscapement(main_font_set, motto, strlen(motto));
  XSetForeground(display, font_gc, face.pixel);
  XmbDrawString(display, intro_gfx_sprite->pixmap,
      		main_font_set, font_gc,
		tot / 2 - w / 2, y,
		motto, strlen(motto));

  /* Minimap graphic */

  radar_gfx_sprite = load_gfxfile(tileset_mini_intro_filename(tileset));
  tot = radar_gfx_sprite->width;

  y = radar_gfx_sprite->height - (lin +
      1.5 * (exts->max_logical_extent.height + exts->max_logical_extent.y));

  w = XmbTextEscapement(main_font_set, word_version(), strlen(word_version()));
  XSetForeground(display, font_gc,
		 get_color(tileset, COLOR_OVERVIEW_UNKNOWN)->color.pixel);
  XmbDrawString(display, radar_gfx_sprite->pixmap,
		main_font_set, font_gc,
		(tot / 2 - w / 2) + 1, y + 1,
		word_version(), strlen(word_version()));
  XSetForeground(display, font_gc,
		 get_color(tileset, COLOR_OVERVIEW_VIEWRECT)->color.pixel);
  XmbDrawString(display, radar_gfx_sprite->pixmap,
		main_font_set, font_gc,
		tot / 2 - w / 2, y,
		word_version(), strlen(word_version()));

  y += lin;

  fc_snprintf(s, sizeof(s), "%d.%d.%d%s",
	      MAJOR_VERSION, MINOR_VERSION,
	      PATCH_VERSION, VERSION_LABEL);
  w = XmbTextEscapement(main_font_set, s, strlen(s));
  XSetForeground(display, font_gc,
		 get_color(tileset, COLOR_OVERVIEW_UNKNOWN)->color.pixel);
  XmbDrawString(display, radar_gfx_sprite->pixmap,
		main_font_set, font_gc,
		(tot / 2 - w / 2) + 1, y + 1, s, strlen(s));
  XSetForeground(display, font_gc,
		 get_color(tileset, COLOR_OVERVIEW_VIEWRECT)->color.pixel);
  XmbDrawString(display, radar_gfx_sprite->pixmap,
		main_font_set, font_gc,
		tot / 2 - w / 2, y, s, strlen(s));

  /* free colors */

  if (have_face) {
    XFreeColors(display, cmap, &(face.pixel), 1, 0);
  }

  /* done */

  return;
}
示例#2
0
文件: pages.cpp 项目: valisc/freeciv
/**************************************************************************
  Creates buttons and layouts for start page.
**************************************************************************/
void fc_client::create_main_page(void)
{

  QPixmap main_graphics(tileset_main_intro_filename(tileset));
  QLabel* free_main_pic = new QLabel;
  QPainter painter(&main_graphics);
  QStringList buttons_names;
  int buttons_nr;
  char msgbuf[128];
  const char *rev_ver;
  QFont f = QApplication::font();
  QFontMetrics fm(f);

  pages_layout[PAGE_MAIN] = new QGridLayout;

  rev_ver = fc_svn_revision();
  if (rev_ver == NULL) {
    /* TRANS: "version 2.6.0, Qt client" */
    fc_snprintf(msgbuf, sizeof(msgbuf), _("%s%s, Qt client"),
                word_version(), VERSION_STRING);
  } else {
    /* TRANS: "version 2.6.0 (r25000), Qt client" */
    fc_snprintf(msgbuf, sizeof(msgbuf), _("%s%s (%s), Qt client"),
                word_version(), VERSION_STRING, rev_ver);
  }

  painter.setPen(Qt::white);
  painter.drawText(main_graphics.width()-fm.width(msgbuf)-10,
                   main_graphics.height()-fm.descent(), msgbuf);
  free_main_pic->setPixmap(main_graphics);
  pages_layout[PAGE_MAIN]->addWidget(free_main_pic,
                                     0, 0, 1, 2, Qt::AlignCenter);
  buttons_names << _("Start new game") << _("Start scenario game")
                << _("Load saved game") << _("Connect to network game")
                << _("Options") << _("Quit");

  buttons_nr = buttons_names.count();

  for (int iter = 0; iter < buttons_nr; iter++) {
    button = new QPushButton(buttons_names[iter]);

    switch (iter) {
    case 0:
      pages_layout[PAGE_MAIN]->addWidget(button, 1, 0);
      break;
    case 1:
      pages_layout[PAGE_MAIN]->addWidget(button, 2, 0);
      connect(button, SIGNAL(clicked()), switch_page_mapper, SLOT(map()));
      switch_page_mapper->setMapping(button, PAGE_SCENARIO);
      break;
    case 2:
      pages_layout[PAGE_MAIN]->addWidget(button, 3, 0);
      connect(button, SIGNAL(clicked()), switch_page_mapper, SLOT(map()));
      switch_page_mapper->setMapping(button, PAGE_LOAD);
      break;
    case 3:
      pages_layout[PAGE_MAIN]->addWidget(button, 1, 1);
      connect(button, SIGNAL(clicked()), switch_page_mapper, SLOT(map()));
      switch_page_mapper->setMapping(button, PAGE_NETWORK);
      break;
    case 4:
      pages_layout[PAGE_MAIN]->addWidget(button, 2, 1);
      connect(button, SIGNAL(clicked()), this, SLOT(popup_client_options()));
      break;
    case 5:
      pages_layout[PAGE_MAIN]->addWidget(button, 3, 1);
      QObject::connect(button, SIGNAL(clicked()), this, SLOT(quit()));
      break;
    default:
      break;
    }
  }
}