📄 gtkscrolledwindow.c
字号:
if (old_adjustment == hadjustment) return; gtk_signal_disconnect_by_func (GTK_OBJECT (old_adjustment), GTK_SIGNAL_FUNC (gtk_scrolled_window_adjustment_changed), scrolled_window); gtk_range_set_adjustment (GTK_RANGE (scrolled_window->hscrollbar), hadjustment); } hadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)); gtk_signal_connect (GTK_OBJECT (hadjustment), "changed", GTK_SIGNAL_FUNC (gtk_scrolled_window_adjustment_changed), scrolled_window); gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window); if (bin->child) gtk_widget_set_scroll_adjustments (bin->child, gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)), gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)));}voidgtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window, GtkAdjustment *vadjustment){ GtkBin *bin; g_return_if_fail (scrolled_window != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window)); if (vadjustment) g_return_if_fail (GTK_IS_ADJUSTMENT (vadjustment)); else vadjustment = (GtkAdjustment*) gtk_object_new (GTK_TYPE_ADJUSTMENT, NULL); bin = GTK_BIN (scrolled_window); if (!scrolled_window->vscrollbar) { gtk_widget_push_composite_child (); scrolled_window->vscrollbar = gtk_vscrollbar_new (vadjustment); gtk_widget_set_composite_name (scrolled_window->vscrollbar, "vscrollbar"); gtk_widget_pop_composite_child (); gtk_widget_set_parent (scrolled_window->vscrollbar, GTK_WIDGET (scrolled_window)); gtk_widget_ref (scrolled_window->vscrollbar); gtk_widget_show (scrolled_window->vscrollbar); } else { GtkAdjustment *old_adjustment; old_adjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)); if (old_adjustment == vadjustment) return; gtk_signal_disconnect_by_func (GTK_OBJECT (old_adjustment), GTK_SIGNAL_FUNC (gtk_scrolled_window_adjustment_changed), scrolled_window); gtk_range_set_adjustment (GTK_RANGE (scrolled_window->vscrollbar), vadjustment); } vadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)); gtk_signal_connect (GTK_OBJECT (vadjustment), "changed", GTK_SIGNAL_FUNC (gtk_scrolled_window_adjustment_changed), scrolled_window); gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window); if (bin->child) gtk_widget_set_scroll_adjustments (bin->child, gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)), gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)));}GtkAdjustment*gtk_scrolled_window_get_hadjustment (GtkScrolledWindow *scrolled_window){ g_return_val_if_fail (scrolled_window != NULL, NULL); g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), NULL); return (scrolled_window->hscrollbar ? gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)) : NULL);}GtkAdjustment*gtk_scrolled_window_get_vadjustment (GtkScrolledWindow *scrolled_window){ g_return_val_if_fail (scrolled_window != NULL, NULL); g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), NULL); return (scrolled_window->vscrollbar ? gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)) : NULL);}voidgtk_scrolled_window_set_policy (GtkScrolledWindow *scrolled_window, GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy){ g_return_if_fail (scrolled_window != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window)); if ((scrolled_window->hscrollbar_policy != hscrollbar_policy) || (scrolled_window->vscrollbar_policy != vscrollbar_policy)) { scrolled_window->hscrollbar_policy = hscrollbar_policy; scrolled_window->vscrollbar_policy = vscrollbar_policy; gtk_widget_queue_resize (GTK_WIDGET (scrolled_window)); }}voidgtk_scrolled_window_set_placement (GtkScrolledWindow *scrolled_window, GtkCornerType window_placement){ g_return_if_fail (scrolled_window != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window)); if (scrolled_window->window_placement != window_placement) { scrolled_window->window_placement = window_placement; gtk_widget_queue_resize (GTK_WIDGET (scrolled_window)); }}static voidgtk_scrolled_window_destroy (GtkObject *object){ GtkScrolledWindow *scrolled_window; g_return_if_fail (object != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (object)); scrolled_window = GTK_SCROLLED_WINDOW (object); gtk_widget_unparent (scrolled_window->hscrollbar); gtk_widget_unparent (scrolled_window->vscrollbar); gtk_widget_destroy (scrolled_window->hscrollbar); gtk_widget_destroy (scrolled_window->vscrollbar); GTK_OBJECT_CLASS (parent_class)->destroy (object);}static voidgtk_scrolled_window_finalize (GtkObject *object){ GtkScrolledWindow *scrolled_window; scrolled_window = GTK_SCROLLED_WINDOW (object); gtk_widget_unref (scrolled_window->hscrollbar); gtk_widget_unref (scrolled_window->vscrollbar); GTK_OBJECT_CLASS (parent_class)->finalize (object);}static voidgtk_scrolled_window_map (GtkWidget *widget){ GtkScrolledWindow *scrolled_window; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); scrolled_window = GTK_SCROLLED_WINDOW (widget); /* chain parent class handler to map self and child */ GTK_WIDGET_CLASS (parent_class)->map (widget); if (GTK_WIDGET_VISIBLE (scrolled_window->hscrollbar) && !GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) gtk_widget_map (scrolled_window->hscrollbar); if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar) && !GTK_WIDGET_MAPPED (scrolled_window->vscrollbar)) gtk_widget_map (scrolled_window->vscrollbar);}static voidgtk_scrolled_window_unmap (GtkWidget *widget){ GtkScrolledWindow *scrolled_window; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); scrolled_window = GTK_SCROLLED_WINDOW (widget); /* chain parent class handler to unmap self and child */ GTK_WIDGET_CLASS (parent_class)->unmap (widget); if (GTK_WIDGET_MAPPED (scrolled_window->hscrollbar)) gtk_widget_unmap (scrolled_window->hscrollbar); if (GTK_WIDGET_MAPPED (scrolled_window->vscrollbar)) gtk_widget_unmap (scrolled_window->vscrollbar);}static voidgtk_scrolled_window_draw (GtkWidget *widget, GdkRectangle *area){ GtkScrolledWindow *scrolled_window; GtkBin *bin; GdkRectangle child_area; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); g_return_if_fail (area != NULL); scrolled_window = GTK_SCROLLED_WINDOW (widget); bin = GTK_BIN (widget); if (bin->child && GTK_WIDGET_VISIBLE (bin->child) && gtk_widget_intersect (bin->child, area, &child_area)) gtk_widget_draw (bin->child, &child_area); if (GTK_WIDGET_VISIBLE (scrolled_window->hscrollbar) && gtk_widget_intersect (scrolled_window->hscrollbar, area, &child_area)) gtk_widget_draw (scrolled_window->hscrollbar, &child_area); if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar) && gtk_widget_intersect (scrolled_window->vscrollbar, area, &child_area)) gtk_widget_draw (scrolled_window->vscrollbar, &child_area);}static voidgtk_scrolled_window_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data){ g_return_if_fail (container != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container)); g_return_if_fail (callback != NULL); GTK_CONTAINER_CLASS (parent_class)->forall (container, include_internals, callback, callback_data); if (include_internals) { GtkScrolledWindow *scrolled_window; scrolled_window = GTK_SCROLLED_WINDOW (container); if (scrolled_window->vscrollbar) callback (scrolled_window->vscrollbar, callback_data); if (scrolled_window->hscrollbar) callback (scrolled_window->hscrollbar, callback_data); }}static voidgtk_scrolled_window_size_request (GtkWidget *widget, GtkRequisition *requisition){ GtkScrolledWindow *scrolled_window; GtkBin *bin; gint extra_width; gint extra_height; GtkRequisition hscrollbar_requisition; GtkRequisition vscrollbar_requisition; GtkRequisition child_requisition; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); g_return_if_fail (requisition != NULL); scrolled_window = GTK_SCROLLED_WINDOW (widget); bin = GTK_BIN (scrolled_window); extra_width = 0; extra_height = 0; requisition->width = 0; requisition->height = 0; gtk_widget_size_request (scrolled_window->hscrollbar, &hscrollbar_requisition); gtk_widget_size_request (scrolled_window->vscrollbar, &vscrollbar_requisition); if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) { static guint quark_aux_info = 0; if (!quark_aux_info) quark_aux_info = g_quark_from_static_string ("gtk-aux-info"); gtk_widget_size_request (bin->child, &child_requisition); if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER) requisition->width += child_requisition.width; else { GtkWidgetAuxInfo *aux_info; aux_info = gtk_object_get_data_by_id (GTK_OBJECT (bin->child), quark_aux_info); if (aux_info && aux_info->width > 0) { requisition->width += aux_info->width; extra_width = -1; } else requisition->width += vscrollbar_requisition.width; } if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER) requisition->height += child_requisition.height; else { GtkWidgetAuxInfo *aux_info; aux_info = gtk_object_get_data_by_id (GTK_OBJECT (bin->child), quark_aux_info); if (aux_info && aux_info->height > 0) { requisition->height += aux_info->height; extra_height = -1; } else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -