Gtk3: GtkImage阻止用户收缩窗口



Gtk3在C:我试图创建一个窗口,从png/jpeg文件加载图片。我希望用户能够调整窗口的大小,并自动缩放图片以适合窗口。

我是这样做的:

app = gtk_application_new("foo", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
status = g_application_run(G_APPLICATION(app), argc, argv);

activate方法执行:

GtkWidget *window;
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "foo");
gtk_window_set_default_size(GTK_WINDOW(window), 600, 600);
GError *err = NULL;
// Note: original and image are global variables, because I can't
// get user_data for callbacks working. Will sort this out later.
original = gdk_pixbuf_new_from_file("myfile.png", &err);
if (err != NULL) {
fatalf(scope, "Unable to read file: %sn", err->message);
exit(1);
}
image = gtk_image_new();
gtk_container_add(GTK_CONTAINER(window), image);
gtk_widget_show_all(window);
g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(resize_picture), NULL);

resize_picture:

gint w, h;
gtk_window_get_size(window, &w, &h);
GdkPixbuf *resized = gdk_pixbuf_scale_simple(original, w, h, GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(image, resized);

现在的问题是GtkImage似乎对窗口施加了最小尺寸。我可以放大窗口,使图片放大,但我不能缩小它。我可以在GtkWindowGtkImage上设置一些属性来允许我这样做吗?或者我需要使用GtkImage以外的东西吗?

解决方案是切换到GTK4并使用GtkPicture代替GtkImage

GtkPicture具有can_shrink属性,解决了这个问题。

最新更新