我正在编写一个GTK2应用程序。我想在窗口的右下角添加调整大小夹点,but the API does not provide any functions to do so (gtk_window_set_has_resize_grip()仅限于GTK3)。但是,我可以看到许多使用GTK2编写的带有调整大小夹点的程序(旧版本的Pluma、Caja和Geany等)。我试着查看了Pluma的源代码,并在全球范围内搜索"grip“、"resize_grip”和"resize“等关键字,但这两种情况都没有结果。我希望能有一个详细的关于如何在GTK2中实现调整大小夹点的答案。
发布于 2018-09-15 06:59:33
static gboolean resize_expose(GtkWidget *area, GdkEventExpose *ev, GdkWindowEdge edge) {
gint size = MIN(area->allocation.width, area->allocation.height);
gtk_paint_resize_grip(area->style, area->window,
gtk_widget_get_state(area),
&ev->area, area, "grip", edge,
area->allocation.width - size, area->allocation.height - size,
size, size);
return TRUE;
}
static gboolean resize_button(GtkWidget *area, GdkEventButton *ev, GdkWindowEdge edge) {
if (ev->type != GDK_BUTTON_PRESS)
return TRUE;
switch (ev->button) {
case 1:
gtk_window_begin_resize_drag(GTK_WINDOW(gtk_widget_get_toplevel(area)), edge,
ev->button, ev->x_root, ev->y_root, ev->time);
break;
case 2:
gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(area)),
ev->button, ev->x_root, ev->y_root, ev->time);
break;
}
return TRUE;
}
void create_grip(GtkWidget *parent_or_window) {
GtkWidget *area = gtk_drawing_area_new();
gtk_widget_set_size_request(area, 18, 18);
gtk_widget_add_events(area, GDK_BUTTON_PRESS_MASK);
gtk_box_pack_end(GTK_BOX(parent_or_window), area, FALSE, FALSE, 0);
g_signal_connect(area, "expose_event", G_CALLBACK(grip_expose),
GINT_TO_POINTER(GDK_WINDOW_EDGE_SOUTH_EAST));
g_signal_connect(area, "button_press_event", G_CALLBACK(grip_button),
GINT_TO_POINTER(GDK_WINDOW_EDGE_SOUTH_EAST));
}https://stackoverflow.com/questions/41874973
复制相似问题