【发布时间】:2018-05-14 08:36:40
【问题描述】:
当我调整 GtkWindow 的大小时,我希望 GtkImage 也调整大小,同时保持与以前相同的纵横比。 我找不到任何关于如何使用 GTK3 进行设置的好例子
这是我迄今为止尝试过的:
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
gboolean resize_image(GtkWidget *widget, GdkEvent *event, GtkWidget *window) {
GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(widget));
if (pixbuf == NULL) {
g_printerr("Failed to resize image\n");
return 1;
}
gtk_widget_get_allocation(GTK_WIDGET(widget), allocation);
pixbuf = gdk_pixbuf_scale_simple(pixbuf, widget->allocation.width, widget->allocation.height, GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(GTK_IMAGE(widget), pixbuf);
return FALSE;
}
int main(int argc, char **argv) {
GtkWidget *window = NULL;
GtkWidget *image = NULL;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
image = gtk_image_new_from_file("image.jpg");
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(image, "draw", G_CALLBACK(resize_image), (gpointer)window);
gtk_container_add(GTK_CONTAINER(window), image);
gtk_widget_show_all(GTK_WIDGET(window));
gtk_main();
return 0;
}
此代码应该只是将 Pixbuf 的大小调整为父级的大小,但它不起作用,我收到以下错误:
GdkPixbuf-CRITICAL **: gdk_pixbuf_get_width: 断言 'GDK_IS_PIXBUF (pixbuf)' 失败
GLib-GObject-CRITICAL **: g_object_unref: 断言 'G_IS_OBJECT (对象)'失败
即使这段代码可以工作,我也无法保持相同的纵横比,如何实现这一点?
提前致谢
【问题讨论】:
标签: c user-interface gtk gtk3