⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkbox.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
/* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. *//* * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS * file for a list of people on the GTK+ Team.  See the ChangeLog * files for a list of changes.  These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/.  */#include "gtkbox.h"enum {  ARG_0,  ARG_SPACING,  ARG_HOMOGENEOUS};enum {  CHILD_ARG_0,  CHILD_ARG_EXPAND,  CHILD_ARG_FILL,  CHILD_ARG_PADDING,  CHILD_ARG_PACK_TYPE,  CHILD_ARG_POSITION};static void gtk_box_class_init (GtkBoxClass    *klass);static void gtk_box_init       (GtkBox         *box);static void gtk_box_get_arg    (GtkObject      *object,				GtkArg         *arg,				guint           arg_id);static void gtk_box_set_arg    (GtkObject      *object,				GtkArg         *arg,				guint           arg_id);static void gtk_box_map        (GtkWidget      *widget);static void gtk_box_unmap      (GtkWidget      *widget);static void gtk_box_draw       (GtkWidget      *widget,			        GdkRectangle   *area);static gint gtk_box_expose     (GtkWidget      *widget,			        GdkEventExpose *event);static void gtk_box_add        (GtkContainer   *container,			        GtkWidget      *widget);static void gtk_box_remove     (GtkContainer   *container,			        GtkWidget      *widget);static void gtk_box_forall     (GtkContainer   *container,				gboolean	include_internals,			        GtkCallback     callback,			        gpointer        callback_data);static void gtk_box_set_child_arg (GtkContainer   *container,				   GtkWidget      *child,				   GtkArg         *arg,				   guint           arg_id);static void gtk_box_get_child_arg (GtkContainer   *container,				   GtkWidget      *child,				   GtkArg         *arg,				   guint           arg_id);static GtkType gtk_box_child_type (GtkContainer   *container);     static GtkContainerClass *parent_class = NULL;GtkTypegtk_box_get_type (void){  static GtkType box_type = 0;  if (!box_type)    {      static const GtkTypeInfo box_info =      {	"GtkBox",	sizeof (GtkBox),	sizeof (GtkBoxClass),	(GtkClassInitFunc) gtk_box_class_init,	(GtkObjectInitFunc) gtk_box_init,        /* reserved_1 */ NULL,	/* reserved_2 */ NULL,	(GtkClassInitFunc) NULL,      };      box_type = gtk_type_unique (GTK_TYPE_CONTAINER, &box_info);    }  return box_type;}static voidgtk_box_class_init (GtkBoxClass *class){  GtkObjectClass *object_class;  GtkWidgetClass *widget_class;  GtkContainerClass *container_class;  object_class = (GtkObjectClass*) class;  widget_class = (GtkWidgetClass*) class;  container_class = (GtkContainerClass*) class;  parent_class = gtk_type_class (GTK_TYPE_CONTAINER);  gtk_object_add_arg_type ("GtkBox::spacing", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_SPACING);  gtk_object_add_arg_type ("GtkBox::homogeneous", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_HOMOGENEOUS);  gtk_container_add_child_arg_type ("GtkBox::expand", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_EXPAND);  gtk_container_add_child_arg_type ("GtkBox::fill", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_FILL);  gtk_container_add_child_arg_type ("GtkBox::padding", GTK_TYPE_ULONG, GTK_ARG_READWRITE, CHILD_ARG_PADDING);  gtk_container_add_child_arg_type ("GtkBox::pack_type", GTK_TYPE_PACK_TYPE, GTK_ARG_READWRITE, CHILD_ARG_PACK_TYPE);  gtk_container_add_child_arg_type ("GtkBox::position", GTK_TYPE_LONG, GTK_ARG_READWRITE, CHILD_ARG_POSITION);  object_class->set_arg = gtk_box_set_arg;  object_class->get_arg = gtk_box_get_arg;  widget_class->map = gtk_box_map;  widget_class->unmap = gtk_box_unmap;  widget_class->draw = gtk_box_draw;  widget_class->expose_event = gtk_box_expose;  container_class->add = gtk_box_add;  container_class->remove = gtk_box_remove;  container_class->forall = gtk_box_forall;  container_class->child_type = gtk_box_child_type;  container_class->set_child_arg = gtk_box_set_child_arg;  container_class->get_child_arg = gtk_box_get_child_arg;}static voidgtk_box_init (GtkBox *box){  GTK_WIDGET_SET_FLAGS (box, GTK_NO_WINDOW);  box->children = NULL;  box->spacing = 0;  box->homogeneous = FALSE;}static voidgtk_box_set_arg (GtkObject    *object,		 GtkArg       *arg,		 guint         arg_id){  GtkBox *box;  box = GTK_BOX (object);  switch (arg_id)    {    case ARG_SPACING:      gtk_box_set_spacing (box, GTK_VALUE_INT (*arg));      break;    case ARG_HOMOGENEOUS:      gtk_box_set_homogeneous (box, GTK_VALUE_BOOL (*arg));      break;    default:      break;    }}static voidgtk_box_get_arg (GtkObject    *object,		 GtkArg       *arg,		 guint         arg_id){  GtkBox *box;  box = GTK_BOX (object);  switch (arg_id)    {    case ARG_SPACING:      GTK_VALUE_INT (*arg) = box->spacing;      break;    case ARG_HOMOGENEOUS:      GTK_VALUE_BOOL (*arg) = box->homogeneous;      break;    default:      arg->type = GTK_TYPE_INVALID;      break;    }}static GtkTypegtk_box_child_type	(GtkContainer   *container){  return GTK_TYPE_WIDGET;}static voidgtk_box_set_child_arg (GtkContainer   *container,		       GtkWidget      *child,		       GtkArg         *arg,		       guint           arg_id){  gboolean expand = 0;  gboolean fill = 0;  guint padding = 0;  GtkPackType pack_type = 0;  if (arg_id != CHILD_ARG_POSITION)    gtk_box_query_child_packing (GTK_BOX (container),				 child,				 &expand,				 &fill,				 &padding,				 &pack_type);    switch (arg_id)    {    case CHILD_ARG_EXPAND:      gtk_box_set_child_packing (GTK_BOX (container),				 child,				 GTK_VALUE_BOOL (*arg),				 fill,				 padding,				 pack_type);      break;    case CHILD_ARG_FILL:      gtk_box_set_child_packing (GTK_BOX (container),				 child,				 expand,				 GTK_VALUE_BOOL (*arg),				 padding,				 pack_type);      break;    case CHILD_ARG_PADDING:      gtk_box_set_child_packing (GTK_BOX (container),				 child,				 expand,				 fill,				 GTK_VALUE_ULONG (*arg),				 pack_type);      break;    case CHILD_ARG_PACK_TYPE:      gtk_box_set_child_packing (GTK_BOX (container),				 child,				 expand,				 fill,				 padding,				 GTK_VALUE_ENUM (*arg));      break;    case CHILD_ARG_POSITION:      gtk_box_reorder_child (GTK_BOX (container),			     child,			     GTK_VALUE_LONG (*arg));      break;    default:      break;    }}static voidgtk_box_get_child_arg (GtkContainer   *container,		       GtkWidget      *child,		       GtkArg         *arg,		       guint           arg_id){  gboolean expand = 0;  gboolean fill = 0;  guint padding = 0;  GtkPackType pack_type = 0;  GList *list;  if (arg_id != CHILD_ARG_POSITION)    gtk_box_query_child_packing (GTK_BOX (container),				 child,				 &expand,				 &fill,				 &padding,				 &pack_type);    switch (arg_id)    {    case CHILD_ARG_EXPAND:      GTK_VALUE_BOOL (*arg) = expand;      break;    case CHILD_ARG_FILL:      GTK_VALUE_BOOL (*arg) = fill;      break;    case CHILD_ARG_PADDING:      GTK_VALUE_ULONG (*arg) = padding;      break;    case CHILD_ARG_PACK_TYPE:      GTK_VALUE_ENUM (*arg) = pack_type;      break;    case CHILD_ARG_POSITION:      GTK_VALUE_LONG (*arg) = 0;      for (list = GTK_BOX (container)->children; list; list = list->next)	{	  GtkBoxChild *child_entry;	  child_entry = list->data;	  if (child_entry->widget == child)	    break;	  GTK_VALUE_LONG (*arg)++;	}      if (!list)	GTK_VALUE_LONG (*arg) = -1;      break;    default:      arg->type = GTK_TYPE_INVALID;      break;    }}voidgtk_box_pack_start (GtkBox    *box,		    GtkWidget *child,		    gboolean   expand,		    gboolean   fill,		    guint      padding){  GtkBoxChild *child_info;  g_return_if_fail (box != NULL);  g_return_if_fail (GTK_IS_BOX (box));  g_return_if_fail (child != NULL);  g_return_if_fail (child->parent == NULL);  child_info = g_new (GtkBoxChild, 1);  child_info->widget = child;  child_info->padding = padding;  child_info->expand = expand ? TRUE : FALSE;  child_info->fill = fill ? TRUE : FALSE;  child_info->pack = GTK_PACK_START;  box->children = g_list_append (box->children, child_info);  gtk_widget_set_parent (child, GTK_WIDGET (box));    if (GTK_WIDGET_REALIZED (box))    gtk_widget_realize (child);  if (GTK_WIDGET_VISIBLE (box) && GTK_WIDGET_VISIBLE (child))    {      if (GTK_WIDGET_MAPPED (box))	gtk_widget_map (child);      gtk_widget_queue_resize (child);    }}voidgtk_box_pack_end (GtkBox    *box,		  GtkWidget *child,		  gboolean   expand,		  gboolean   fill,		  guint      padding){  GtkBoxChild *child_info;  g_return_if_fail (box != NULL);  g_return_if_fail (GTK_IS_BOX (box));  g_return_if_fail (child != NULL);  g_return_if_fail (child->parent == NULL);  child_info = g_new (GtkBoxChild, 1);  child_info->widget = child;  child_info->padding = padding;  child_info->expand = expand ? TRUE : FALSE;  child_info->fill = fill ? TRUE : FALSE;  child_info->pack = GTK_PACK_END;  box->children = g_list_append (box->children, child_info);  gtk_widget_set_parent (child, GTK_WIDGET (box));  if (GTK_WIDGET_REALIZED (box))    gtk_widget_realize (child);  if (GTK_WIDGET_VISIBLE (box) && GTK_WIDGET_VISIBLE (child))    {      if (GTK_WIDGET_MAPPED (box))	gtk_widget_map (child);      gtk_widget_queue_resize (child);    }}voidgtk_box_pack_start_defaults (GtkBox    *box,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -