📄 gtkpacker.c
字号:
arg->type = GTK_TYPE_INVALID; return; } } switch (arg_id) { case CHILD_ARG_SIDE: GTK_VALUE_ENUM (*arg) = child_info->side; break; case CHILD_ARG_ANCHOR: GTK_VALUE_ENUM (*arg) = child_info->anchor; break; case CHILD_ARG_EXPAND: GTK_VALUE_BOOL (*arg) = (child_info->options & GTK_PACK_EXPAND) != 0; break; case CHILD_ARG_FILL_X: GTK_VALUE_BOOL (*arg) = (child_info->options & GTK_FILL_X) != 0; break; case CHILD_ARG_FILL_Y: GTK_VALUE_BOOL (*arg) = (child_info->options & GTK_FILL_Y) != 0; break; case CHILD_ARG_USE_DEFAULT: GTK_VALUE_BOOL (*arg) = child_info->use_default; break; case CHILD_ARG_BORDER_WIDTH: GTK_VALUE_UINT (*arg) = child_info->border_width; break; case CHILD_ARG_PAD_X: GTK_VALUE_UINT (*arg) = child_info->pad_x; break; case CHILD_ARG_PAD_Y: GTK_VALUE_UINT (*arg) = child_info->pad_y; break; case CHILD_ARG_I_PAD_X: GTK_VALUE_UINT (*arg) = child_info->i_pad_x; break; case CHILD_ARG_I_PAD_Y: GTK_VALUE_UINT (*arg) = child_info->i_pad_y; break; case CHILD_ARG_POSITION: GTK_VALUE_LONG (*arg) = 0; for (list = packer->children; list; list = list->next) { child_info = list->data; if (child_info->widget == child) break; GTK_VALUE_LONG (*arg)++; } if (!list) GTK_VALUE_LONG (*arg) = -1; break; default: arg->type = GTK_TYPE_INVALID; break; }}static voidgtk_packer_init (GtkPacker *packer){ GTK_WIDGET_SET_FLAGS (packer, GTK_NO_WINDOW); packer->children = NULL; packer->spacing = 0;}voidgtk_packer_set_spacing (GtkPacker *packer, guint spacing){ g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); if (spacing != packer->spacing) { packer->spacing = spacing; gtk_widget_queue_resize (GTK_WIDGET (packer)); }}GtkWidget*gtk_packer_new (void){ return GTK_WIDGET (gtk_type_new (GTK_TYPE_PACKER));}static voidredo_defaults_children (GtkPacker *packer){ GList *list; GtkPackerChild *child; list = g_list_first(packer->children); while (list != NULL) { child = list->data; if (child->use_default) { child->border_width = packer->default_border_width; child->pad_x = packer->default_pad_x; child->pad_y = packer->default_pad_y; child->i_pad_x = packer->default_i_pad_x; child->i_pad_y = packer->default_i_pad_y; gtk_widget_queue_resize (GTK_WIDGET (child->widget)); } list = g_list_next(list); }}voidgtk_packer_set_default_border_width (GtkPacker *packer, guint border){ g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); if (packer->default_border_width != border) { packer->default_border_width = border;; redo_defaults_children (packer); }}voidgtk_packer_set_default_pad (GtkPacker *packer, guint pad_x, guint pad_y){ g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); if (packer->default_pad_x != pad_x || packer->default_pad_y != pad_y) { packer->default_pad_x = pad_x; packer->default_pad_y = pad_y; redo_defaults_children (packer); }}voidgtk_packer_set_default_ipad (GtkPacker *packer, guint i_pad_x, guint i_pad_y){ g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); if (packer->default_i_pad_x != i_pad_x || packer->default_i_pad_y != i_pad_y) { packer->default_i_pad_x = i_pad_x; packer->default_i_pad_y = i_pad_y; redo_defaults_children (packer); }}static void gtk_packer_container_add (GtkContainer *packer, GtkWidget *child){ gtk_packer_add_defaults(GTK_PACKER(packer), child, GTK_SIDE_TOP, GTK_ANCHOR_CENTER, 0);}void gtk_packer_add_defaults (GtkPacker *packer, GtkWidget *child, GtkSideType side, GtkAnchorType anchor, GtkPackerOptions options){ GtkPackerChild *pchild; g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); g_return_if_fail (child != NULL); g_return_if_fail (GTK_IS_WIDGET (child)); pchild = (GtkPackerChild*) g_malloc(sizeof(GtkPackerChild)); pchild->widget = child; pchild->side = side; pchild->options = options; pchild->anchor = anchor; pchild->use_default = 1; pchild->border_width = packer->default_border_width; pchild->pad_x = packer->default_pad_x; pchild->pad_y = packer->default_pad_y; pchild->i_pad_x = packer->default_i_pad_x; pchild->i_pad_y = packer->default_i_pad_y; packer->children = g_list_append(packer->children, (gpointer) pchild); gtk_widget_set_parent (child, GTK_WIDGET (packer)); 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); }}void gtk_packer_add (GtkPacker *packer, GtkWidget *child, GtkSideType side, GtkAnchorType anchor, GtkPackerOptions options, guint border_width, guint pad_x, guint pad_y, guint i_pad_x, guint i_pad_y){ GtkPackerChild *pchild; g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); g_return_if_fail (child != NULL); g_return_if_fail (GTK_IS_WIDGET (child)); pchild = (GtkPackerChild*) g_malloc(sizeof(GtkPackerChild)); pchild->widget = child; pchild->side = side; pchild->options = options; pchild->anchor = anchor; pchild->use_default = 0; pchild->border_width = border_width; pchild->pad_x = pad_x; pchild->pad_y = pad_y; pchild->i_pad_x = i_pad_x; pchild->i_pad_y = i_pad_y; packer->children = g_list_append(packer->children, (gpointer) pchild); gtk_widget_set_parent (child, GTK_WIDGET (packer)); 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_packer_set_child_packing (GtkPacker *packer, GtkWidget *child, GtkSideType side, GtkAnchorType anchor, GtkPackerOptions options, guint border_width, guint pad_x, guint pad_y, guint i_pad_x, guint i_pad_y){ GList *list; GtkPackerChild *pchild; g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); g_return_if_fail (child != NULL); list = g_list_first(packer->children); while (list != NULL) { pchild = (GtkPackerChild*) list->data; if (pchild->widget == child) { pchild->side = side; pchild->anchor = anchor; pchild->options = options; pchild->use_default = 0; pchild->border_width = border_width; pchild->pad_x = pad_x; pchild->pad_y = pad_y; pchild->i_pad_x = i_pad_x; pchild->i_pad_y = i_pad_y; if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (packer)) gtk_widget_queue_resize (child); return; } list = g_list_next(list); } g_warning ("couldn't find child `%s' amongst the packer's children", gtk_type_name (GTK_OBJECT_TYPE (child)));}voidgtk_packer_reorder_child (GtkPacker *packer, GtkWidget *child, gint position){ GList *list; g_return_if_fail (packer != NULL); g_return_if_fail (GTK_IS_PACKER (packer)); g_return_if_fail (child != NULL); list = packer->children; while (list) { GtkPackerChild *child_info; child_info = list->data; if (child_info->widget == child) break; list = list->next; } if (list && packer->children->next) { GList *tmp_list; if (list->next) list->next->prev = list->prev; if (list->prev) list->prev->next = list->next; else packer->children = list->next; tmp_list = packer->children; while (position && tmp_list->next) { position--; tmp_list = tmp_list->next; } if (position) { tmp_list->next = list; list->prev = tmp_list; list->next = NULL; } else { if (tmp_list->prev) tmp_list->prev->next = list; else packer->children = list; list->prev = tmp_list->prev; tmp_list->prev = list; list->next = tmp_list; } if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (packer)) gtk_widget_queue_resize (child); }}static void gtk_packer_remove (GtkContainer *container, GtkWidget *widget) { GtkPacker *packer; GtkPackerChild *child; GList *children; gint visible; g_return_if_fail (container != NULL); g_return_if_fail (widget != NULL); packer = GTK_PACKER (container); children = g_list_first(packer->children); while (children) { child = children->data; if (child->widget == widget) { visible = GTK_WIDGET_VISIBLE (widget); gtk_widget_unparent (widget); packer->children = g_list_remove_link (packer->children, children); g_list_free (children); g_free (child); if (visible && GTK_WIDGET_VISIBLE (container)) gtk_widget_queue_resize (GTK_WIDGET (container)); break; } children = g_list_next(children); }}static void gtk_packer_map (GtkWidget *widget){ GtkPacker *packer; GtkPackerChild *child; GList *children; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_PACKER (widget)); packer = GTK_PACKER (widget); GTK_WIDGET_SET_FLAGS (packer, GTK_MAPPED); children = g_list_first(packer->children); while (children != NULL) { child = children->data; children = g_list_next(children); if (GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget)) gtk_widget_map (child->widget); }}static void gtk_packer_unmap (GtkWidget *widget){ GtkPacker *packer; GtkPackerChild *child; GList *children;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -