Author: cazfi
Date: Thu Dec  4 21:04:56 2014
New Revision: 27179

URL: http://svn.gna.org/viewcvs/freeciv?rev=27179&view=rev
Log:
Scale gtk3-client main screen picture down as needed for the buttons to fit in 
on
small screen.

See bug #21028

Modified:
    trunk/client/gui-gtk-3.0/gui_main.c
    trunk/client/gui-gtk-3.0/gui_main.h
    trunk/client/gui-gtk-3.0/pages.c

Modified: trunk/client/gui-gtk-3.0/gui_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/gui_main.c?rev=27179&r1=27178&r2=27179&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/gui_main.c (original)
+++ trunk/client/gui-gtk-3.0/gui_main.c Thu Dec  4 21:04:56 2014
@@ -2139,3 +2139,31 @@
                GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION,
                gtk_get_major_version(), gtk_get_minor_version(), 
gtk_get_micro_version());
 }
+
+/**************************************************************************
+  Return width of the default screen
+**************************************************************************/
+int screen_width(void)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  if (screen == NULL) {
+    return 0;
+  }
+
+  return gdk_screen_get_width(screen);
+}
+
+/**************************************************************************
+  Return height of the default screen
+**************************************************************************/
+int screen_height(void)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  if (screen == NULL) {
+    return 0;
+  }
+
+  return gdk_screen_get_height(screen);
+}

Modified: trunk/client/gui-gtk-3.0/gui_main.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/gui_main.h?rev=27179&r1=27178&r2=27179&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/gui_main.h (original)
+++ trunk/client/gui-gtk-3.0/gui_main.h Thu Dec  4 21:04:56 2014
@@ -75,4 +75,7 @@
 void quit_gtk_main(void);
 void refresh_chat_buttons(void);
 
+int screen_width(void);
+int screen_height(void);
+
 #endif  /* FC__GUI_MAIN_H */

Modified: trunk/client/gui-gtk-3.0/pages.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/pages.c?rev=27179&r1=27178&r2=27179&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/pages.c    (original)
+++ trunk/client/gui-gtk-3.0/pages.c    Thu Dec  4 21:04:56 2014
@@ -156,12 +156,16 @@
 /**************************************************************************
   This is called whenever the intro graphic needs a graphics refresh.
 **************************************************************************/
-static gboolean intro_expose(GtkWidget *w, cairo_t *cr)
+static gboolean intro_expose(GtkWidget *w, cairo_t *cr, gpointer *data)
 {
   static PangoLayout *layout;
   static int width, height;
   static bool left = FALSE;
   GtkAllocation allocation;
+  struct sprite *intro = (struct sprite *)data;
+
+  cairo_set_source_surface(cr, intro->surface, 0, 0);
+  cairo_paint(cr);
 
   if (!layout) {
     char msgbuf[128];
@@ -196,7 +200,7 @@
     pango_layout_get_pixel_size(layout, &width, &height);
   }
   gtk_widget_get_allocation(w, &allocation);
- 
+
   cairo_set_source_rgb(cr, 0, 0, 0);
   cairo_move_to(cr, left ? 4 : allocation.width - width - 3,
                 allocation.height - height - 3);
@@ -215,8 +219,12 @@
 **************************************************************************/
 GtkWidget *create_main_page(void)
 {
-  GtkWidget *widget, *vbox, *frame, *image, *button, *table;
+  GtkWidget *widget, *vbox, *frame, *darea, *button, *table;
   GtkSizeGroup *size;
+  struct sprite *intro_in, *intro;
+  int width, height;
+  int sh;
+  int space_needed;
 
   size = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
 
@@ -231,10 +239,37 @@
   gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_OUT);
   gtk_container_add(GTK_CONTAINER(vbox), frame);
 
-  image = gtk_image_new_from_file(tileset_main_intro_filename(tileset));
-  g_signal_connect_after(image, "draw",
-                         G_CALLBACK(intro_expose), NULL);
-  gtk_container_add(GTK_CONTAINER(frame), image);
+  intro_in = load_gfxfile(tileset_main_intro_filename(tileset));
+  get_sprite_dimensions(intro_in, &width, &height);
+  sh = screen_height();
+
+  space_needed = 250;
+#if IS_BETA_VERSION
+  /* Beta notice takes extra space */
+  space_needed += 50;
+#endif
+
+  if (sh - height < space_needed) {
+    float scale;
+
+    if (sh < (space_needed + 0.2 * height)) {
+      /* Screen is simply too small, use minimum scale */
+      scale = 0.2;
+    } else  {
+      scale = (double)(sh - space_needed) / height;
+    }
+    height *= scale;
+    width *= scale;
+    intro = sprite_scale(intro_in, width, height);
+    free_sprite(intro_in);
+  } else {
+    intro = intro_in;
+  }
+  darea = gtk_drawing_area_new();
+  gtk_widget_set_size_request(darea, width, height);
+  g_signal_connect(darea, "draw",
+                   G_CALLBACK(intro_expose), intro);
+  gtk_container_add(GTK_CONTAINER(frame), darea);
 
 #if IS_BETA_VERSION
   {


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to