📄 gtkpaned.c
字号:
}static gintgtk_paned_expose (GtkWidget *widget, GdkEventExpose *event){ GtkPaned *paned; GdkEventExpose child_event; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_PANED (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_DRAWABLE (widget)) { paned = GTK_PANED (widget); /* An expose event for the handle */ if (event->window == paned->handle) { gtk_paint_box (widget->style, paned->handle, GTK_WIDGET_STATE(widget), GTK_SHADOW_OUT, &event->area, widget, "paned", 0, 0, paned->handle_size, paned->handle_size); } else { child_event = *event; if (paned->child1 && GTK_WIDGET_NO_WINDOW (paned->child1) && gtk_widget_intersect (paned->child1, &event->area, &child_event.area)) gtk_widget_event (paned->child1, (GdkEvent*) &child_event); if (paned->child2 && GTK_WIDGET_NO_WINDOW (paned->child2) && gtk_widget_intersect (paned->child2, &event->area, &child_event.area)) gtk_widget_event (paned->child2, (GdkEvent*) &child_event); /* redraw the groove if necessary */ if (gdk_rectangle_intersect (&paned->groove_rectangle, &event->area, &child_event.area)) gtk_widget_draw (widget, &child_event.area); } } return FALSE;}voidgtk_paned_add1 (GtkPaned *paned, GtkWidget *widget){ gtk_paned_pack1 (paned, widget, FALSE, TRUE);}voidgtk_paned_add2 (GtkPaned *paned, GtkWidget *widget){ gtk_paned_pack2 (paned, widget, TRUE, TRUE);}voidgtk_paned_pack1 (GtkPaned *paned, GtkWidget *child, gboolean resize, gboolean shrink){ g_return_if_fail (paned != NULL); g_return_if_fail (GTK_IS_PANED (paned)); g_return_if_fail (GTK_IS_WIDGET (child)); if (!paned->child1) { paned->child1 = child; paned->child1_resize = resize; paned->child1_shrink = shrink; gtk_widget_set_parent (child, GTK_WIDGET (paned)); if (GTK_WIDGET_REALIZED (child->parent)) gtk_widget_realize (child); if (GTK_WIDGET_VISIBLE (child->parent) && GTK_WIDGET_VISIBLE (child)) { if (GTK_WIDGET_MAPPED (child->parent)) gtk_widget_map (child); gtk_widget_queue_resize (child); } }}voidgtk_paned_pack2 (GtkPaned *paned, GtkWidget *child, gboolean resize, gboolean shrink){ g_return_if_fail (paned != NULL); g_return_if_fail (GTK_IS_PANED (paned)); g_return_if_fail (GTK_IS_WIDGET (child)); if (!paned->child2) { paned->child2 = child; paned->child2_resize = resize; paned->child2_shrink = shrink; gtk_widget_set_parent (child, GTK_WIDGET (paned)); if (GTK_WIDGET_REALIZED (child->parent)) gtk_widget_realize (child); if (GTK_WIDGET_VISIBLE (child->parent) && GTK_WIDGET_VISIBLE (child)) { if (GTK_WIDGET_MAPPED (child->parent)) gtk_widget_map (child); gtk_widget_queue_resize (child); } }}static voidgtk_paned_add (GtkContainer *container, GtkWidget *widget){ GtkPaned *paned; g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_PANED (container)); g_return_if_fail (widget != NULL); paned = GTK_PANED (container); if (!paned->child1) gtk_paned_add1 (GTK_PANED (container),widget); else if (!paned->child2) gtk_paned_add2 (GTK_PANED (container),widget);}static voidgtk_paned_remove (GtkContainer *container, GtkWidget *widget){ GtkPaned *paned; gboolean was_visible; g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_PANED (container)); g_return_if_fail (widget != NULL); paned = GTK_PANED (container); was_visible = GTK_WIDGET_VISIBLE (widget); if (paned->child1 == widget) { gtk_widget_unparent (widget); paned->child1 = NULL; if (was_visible && GTK_WIDGET_VISIBLE (container)) gtk_widget_queue_resize (GTK_WIDGET (container)); } else if (paned->child2 == widget) { gtk_widget_unparent (widget); paned->child2 = NULL; if (was_visible && GTK_WIDGET_VISIBLE (container)) gtk_widget_queue_resize (GTK_WIDGET (container)); }}static voidgtk_paned_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data){ GtkPaned *paned; g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_PANED (container)); g_return_if_fail (callback != NULL); paned = GTK_PANED (container); if (paned->child1) (* callback) (paned->child1, callback_data); if (paned->child2) (* callback) (paned->child2, callback_data);}voidgtk_paned_set_position (GtkPaned *paned, gint position){ g_return_if_fail (paned != NULL); g_return_if_fail (GTK_IS_PANED (paned)); if (position >= 0) { /* We don't clamp here - the assumption is that * if the total allocation changes at the same time * as the position, the position set is with reference * to the new total size. If only the position changes, * then clamping will occur in gtk_paned_compute_position() */ paned->child1_size = position; paned->position_set = TRUE; } else paned->position_set = FALSE; gtk_widget_queue_resize (GTK_WIDGET (paned));}voidgtk_paned_set_handle_size (GtkPaned *paned, guint16 size){ gint x,y; g_return_if_fail (paned != NULL); g_return_if_fail (GTK_IS_PANED (paned)); if (paned->handle) { gdk_window_get_geometry (paned->handle, &x, &y, NULL, NULL, NULL); gdk_window_move_resize (paned->handle, x + paned->handle_size / 2 - size / 2, y + paned->handle_size / 2 - size / 2, size, size); } paned->handle_size = size;}voidgtk_paned_set_gutter_size (GtkPaned *paned, guint16 size){ g_return_if_fail (paned != NULL); g_return_if_fail (GTK_IS_PANED (paned)); paned->gutter_size = size; if (GTK_WIDGET_VISIBLE (GTK_WIDGET (paned))) gtk_widget_queue_resize (GTK_WIDGET (paned));}voidgtk_paned_compute_position (GtkPaned *paned, gint allocation, gint child1_req, gint child2_req){ g_return_if_fail (paned != NULL); g_return_if_fail (GTK_IS_PANED (paned)); paned->min_position = paned->child1_shrink ? 0 : child1_req; paned->max_position = allocation; if (!paned->child2_shrink) paned->max_position -= child2_req; if (!paned->position_set) { if (paned->child1_resize && !paned->child2_resize) paned->child1_size = allocation - child2_req; else if (!paned->child1_resize && paned->child2_resize) paned->child1_size = child1_req; else paned->child1_size = allocation * ((gdouble)child1_req / (child1_req + child2_req)); } else { /* If the position was set before the initial allocation. * (paned->last_allocation < 0) just clamp it and leave it. */ if (paned->last_allocation >= 0) { if (paned->child1_resize && !paned->child2_resize) paned->child1_size += (allocation - paned->last_allocation); else if (!(!paned->child1_resize && paned->child2_resize)) paned->child1_size = allocation * ((gdouble)paned->child1_size / (paned->last_allocation)); } } paned->child1_size = CLAMP (paned->child1_size, paned->min_position, paned->max_position); paned->last_allocation = allocation; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -