[英]Resize grip in GTK2
我正在编写GTK2应用程序。 我想在窗口的右下角添加大小调整夹点, 但是API没有提供任何功能 ( gtk_window_set_has_resize_grip()
仅限于GTK3)。 但是,我可以看到许多使用GTK2编写的带有调整大小手柄的程序(Pluma,Caja和Geany的较旧版本)。 我尝试查看Pluma的源代码,并在全局范围内搜索“ grip”,“ resize_grip”和“ resize”之类的关键字,但是在任何情况下都没有结果。 我希望能得到一个详细回答如何在GTK2中实现调整大小抓地力的答案。
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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.