diff --git a/recipes-games/freeciv/freeciv/IntroScreenDimensionsGtk3-2.patch b/recipes-games/freeciv/freeciv/IntroScreenDimensionsGtk3-2.patch new file mode 100644 index 0000000..ffcd753 --- /dev/null +++ b/recipes-games/freeciv/freeciv/IntroScreenDimensionsGtk3-2.patch @@ -0,0 +1,132 @@ +diff -Nurd -X.diff_ignore freeciv/client/gui-gtk-3.0/gui_main.c freeciv/client/gui-gtk-3.0/gui_main.c +--- freeciv/client/gui-gtk-3.0/gui_main.c 2014-09-16 23:53:39.830014392 +0300 ++++ freeciv/client/gui-gtk-3.0/gui_main.c 2014-11-23 01:32:49.707591376 +0200 +@@ -2218,3 +2218,31 @@ + { + gui_gtk3_allied_chat_only = gtk_toggle_button_get_active(button); + } ++ ++/************************************************************************** ++ 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); ++} +diff -Nurd -X.diff_ignore freeciv/client/gui-gtk-3.0/gui_main.h freeciv/client/gui-gtk-3.0/gui_main.h +--- freeciv/client/gui-gtk-3.0/gui_main.h 2014-03-22 13:45:17.773688733 +0200 ++++ freeciv/client/gui-gtk-3.0/gui_main.h 2014-11-23 01:32:49.719591376 +0200 +@@ -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 */ +diff -Nurd -X.diff_ignore freeciv/client/gui-gtk-3.0/pages.c freeciv/client/gui-gtk-3.0/pages.c +--- freeciv/client/gui-gtk-3.0/pages.c 2014-08-28 20:47:59.041650258 +0300 ++++ freeciv/client/gui-gtk-3.0/pages.c 2014-11-23 02:28:43.771583967 +0200 +@@ -153,12 +153,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]; +@@ -193,7 +197,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); +@@ -223,8 +227,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); + +@@ -239,10 +247,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 + { diff --git a/recipes-games/freeciv/freeciv_2.5.0-beta2.bb b/recipes-games/freeciv/freeciv_2.5.0-beta2.bb index 693f18d..fc72cb9 100644 --- a/recipes-games/freeciv/freeciv_2.5.0-beta2.bb +++ b/recipes-games/freeciv/freeciv_2.5.0-beta2.bb @@ -11,6 +11,10 @@ EXTRA_OECONF += "--disable-mapimg" SRC_URI[md5sum] = "ab652fd019b9ab8081a92016388fe0d0" SRC_URI[sha256sum] = "9fa7d78ada7ff675ac249ab347a888dad62e49dbe4e2fc02b40c65a5169900e2" +SRC_URI += "\ +file://IntroScreenDimensionsGtk3-2.patch \ +" + PACKAGES += "${PN}-gtk3" RDEPENDS_${PN}-gtk3 = "freeciv-common freeciv-client-common"