From b5d979a4d54f8dfd32bc21f596c78c8c5ebf1296 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 3 Jul 2022 06:50:09 +0300 Subject: [PATCH 50/50] gtk4: Make citizen icons to show up in citydlg See osdn #44984 Signed-off-by: Marko Lindqvist --- client/gui-gtk-4.0/citydlg.c | 30 ++++++++++++++++-------------- client/gui-gtk-4.0/happiness.c | 33 +++++++++++++++++---------------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/client/gui-gtk-4.0/citydlg.c b/client/gui-gtk-4.0/citydlg.c index 44b5fe20c7..8ab878debf 100644 --- a/client/gui-gtk-4.0/citydlg.c +++ b/client/gui-gtk-4.0/citydlg.c @@ -146,7 +146,7 @@ struct city_dialog { #ifdef MENUS_GTK3 GtkWidget *popup_menu; #endif - GtkWidget *citizen_images; + GtkWidget *citizen_pics; cairo_surface_t *citizen_surface; struct { @@ -1623,21 +1623,22 @@ static struct city_dialog *create_city_dialog(struct city *pcity) citizen_bar_height = tileset_small_sprite_height(tileset); pdialog->citizen_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - citizen_bar_width, citizen_bar_height); - pdialog->citizen_images = gtk_image_new(); - - gtk_widget_set_margin_start(pdialog->citizen_images, 2); - gtk_widget_set_margin_end(pdialog->citizen_images, 2); - gtk_widget_set_margin_top(pdialog->citizen_images, 2); - gtk_widget_set_margin_bottom(pdialog->citizen_images, 2); - gtk_widget_set_halign(pdialog->citizen_images, GTK_ALIGN_START); - gtk_widget_set_valign(pdialog->citizen_images, GTK_ALIGN_CENTER); - gtk_grid_attach(GTK_GRID(cbox), pdialog->citizen_images, ccol++, 0, 1, 1); + citizen_bar_width, + citizen_bar_height); + pdialog->citizen_pics = gtk_picture_new(); + + gtk_widget_set_margin_start(pdialog->citizen_pics, 2); + gtk_widget_set_margin_end(pdialog->citizen_pics, 2); + gtk_widget_set_margin_top(pdialog->citizen_pics, 2); + gtk_widget_set_margin_bottom(pdialog->citizen_pics, 2); + gtk_widget_set_halign(pdialog->citizen_pics, GTK_ALIGN_START); + gtk_widget_set_valign(pdialog->citizen_pics, GTK_ALIGN_CENTER); + gtk_grid_attach(GTK_GRID(cbox), pdialog->citizen_pics, ccol++, 0, 1, 1); controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new()); g_signal_connect(controller, "pressed", G_CALLBACK(citizens_callback), pdialog); - gtk_widget_add_controller(pdialog->citizen_images, controller); + gtk_widget_add_controller(pdialog->citizen_pics, controller); /**** City name label here ****/ pdialog->name_label = gtk_label_new(NULL); @@ -1830,9 +1831,10 @@ static void city_dialog_update_citizens(struct city_dialog *pdialog) cairo_destroy(cr); - image_set_from_surface(GTK_IMAGE(pdialog->citizen_images), pdialog->citizen_surface); + picture_set_from_surface(GTK_PICTURE(pdialog->citizen_pics), + pdialog->citizen_surface); - gtk_widget_queue_draw(pdialog->citizen_images); + gtk_widget_queue_draw(pdialog->citizen_pics); } /***********************************************************************//** diff --git a/client/gui-gtk-4.0/happiness.c b/client/gui-gtk-4.0/happiness.c index 3713e4b247..08d1678bd8 100644 --- a/client/gui-gtk-4.0/happiness.c +++ b/client/gui-gtk-4.0/happiness.c @@ -54,7 +54,7 @@ struct happiness_dialog { GtkWidget *win; GtkWidget *shell; GtkWidget *cityname_label; - GtkWidget *feeling_images[NUM_HAPPINESS_MODIFIERS]; + GtkWidget *feeling_pics[NUM_HAPPINESS_MODIFIERS]; cairo_surface_t *feeling_surfaces[NUM_HAPPINESS_MODIFIERS]; GtkWidget *happiness_label[NUM_HAPPINESS_MODIFIERS]; GtkWidget *close; @@ -214,11 +214,11 @@ static struct happiness_dialog *create_happiness_dialog(struct city *pcity, gtk_frame_set_child(GTK_FRAME(pdialog->cityname_label), table); for (i = 0; i < NUM_HAPPINESS_MODIFIERS; i++) { - GtkWidget *img; + GtkWidget *pic; - /* set spacing between lines of citizens*/ + /* Set spacing between lines of citizens*/ - /* happiness labels */ + /* Happiness labels */ label = gtk_label_new(happiness_label_str[i]); pdialog->happiness_label[i] = label; gtk_widget_set_name(label, "city_label"); @@ -229,17 +229,18 @@ static struct happiness_dialog *create_happiness_dialog(struct city *pcity, /* list of citizens */ pdialog->feeling_surfaces[i] = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - FEELING_WIDTH, FEELING_HEIGHT); - img = gtk_image_new(); - pdialog->feeling_images[i] = img; - gtk_widget_set_margin_start(img, 5); - g_object_set_data(G_OBJECT(img), "pdialog", pdialog); - g_signal_connect(img, "button_press_event", + FEELING_WIDTH, + FEELING_HEIGHT); + pic = gtk_picture_new(); + pdialog->feeling_pics[i] = pic; + gtk_widget_set_margin_start(pic, 5); + g_object_set_data(G_OBJECT(pic), "pdialog", pdialog); + g_signal_connect(pic, "button_press_event", G_CALLBACK(show_happiness_popup), GUINT_TO_POINTER(i)); - gtk_widget_set_halign(img, GTK_ALIGN_START); - gtk_widget_set_valign(img, GTK_ALIGN_START); + gtk_widget_set_halign(pic, GTK_ALIGN_START); + gtk_widget_set_valign(pic, GTK_ALIGN_START); - gtk_grid_attach(GTK_GRID(table), img, 1, i, 1, 1); + gtk_grid_attach(GTK_GRID(table), pic, 1, i, 1, 1); } /* TRANS: the width of this text defines the width of the city dialog. @@ -265,7 +266,7 @@ static struct happiness_dialog *create_happiness_dialog(struct city *pcity, /**********************************************************************//** Refresh citizens surface **************************************************************************/ -static void refresh_feeling_surface(GtkWidget *image, +static void refresh_feeling_surface(GtkWidget *pic, cairo_surface_t *dst, struct city *pcity, enum citizen_feeling index) { @@ -285,7 +286,7 @@ static void refresh_feeling_surface(GtkWidget *image, cairo_fill(cr); } - image_set_from_surface(GTK_IMAGE(image), dst); + picture_set_from_surface(GTK_PICTURE(pic), dst); cairo_destroy(cr); } @@ -299,7 +300,7 @@ void refresh_happiness_dialog(struct city *pcity) struct happiness_dialog *pdialog = get_happiness_dialog(pcity); for (i = 0; i < FEELING_LAST; i++) { - refresh_feeling_surface(pdialog->feeling_images[i], + refresh_feeling_surface(pdialog->feeling_pics[i], pdialog->feeling_surfaces[i], pdialog->pcity, i); } } -- 2.35.1