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

📄 gtkbutton.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
      requisition->width += child_requisition.width;      requisition->height += child_requisition.height;    }}static voidgtk_button_size_allocate (GtkWidget     *widget,			  GtkAllocation *allocation){  GtkButton *button;  GtkAllocation child_allocation;  gint border_width;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_BUTTON (widget));  g_return_if_fail (allocation != NULL);  widget->allocation = *allocation;  border_width = GTK_CONTAINER (widget)->border_width;  if (GTK_WIDGET_REALIZED (widget))    gdk_window_move_resize (widget->window,			    widget->allocation.x + border_width,			    widget->allocation.y + border_width,			    widget->allocation.width - border_width * 2,			    widget->allocation.height - border_width * 2);  button = GTK_BUTTON (widget);  if (GTK_BIN (button)->child && GTK_WIDGET_VISIBLE (GTK_BIN (button)->child))    {      child_allocation.x = (CHILD_SPACING + GTK_WIDGET (widget)->style->klass->xthickness);      child_allocation.y = (CHILD_SPACING + GTK_WIDGET (widget)->style->klass->ythickness);      child_allocation.width = MAX (1, (gint)widget->allocation.width - child_allocation.x * 2 -	                         border_width * 2);      child_allocation.height = MAX (1, (gint)widget->allocation.height - child_allocation.y * 2 -	                          border_width * 2);      if (GTK_WIDGET_CAN_DEFAULT (button))	{	  child_allocation.x += (GTK_WIDGET (widget)->style->klass->xthickness +				 DEFAULT_LEFT_POS);	  child_allocation.y += (GTK_WIDGET (widget)->style->klass->ythickness +				 DEFAULT_TOP_POS);	  child_allocation.width =  MAX (1, (gint)child_allocation.width -					 (gint)(GTK_WIDGET (widget)->style->klass->xthickness * 2 + DEFAULT_SPACING));	  child_allocation.height = MAX (1, (gint)child_allocation.height -					 (gint)(GTK_WIDGET (widget)->style->klass->xthickness * 2 + DEFAULT_SPACING));	}      gtk_widget_size_allocate (GTK_BIN (button)->child, &child_allocation);    }}/* * +------------------------------------------------+ * |                   BORDER                       | * |  +------------------------------------------+  | * |  |\\\\\\\\\\\\\\\\DEFAULT\\\\\\\\\\\\\\\\\  |  | * |  |\\+------------------------------------+  |  | * |  |\\| |           SPACING       3      | |  |  | * |  |\\| +--------------------------------+ |  |  | * |  |\\| |########## FOCUS ###############| |  |  | * |  |\\| |#+----------------------------+#| |  |  | * |  |\\| |#|         RELIEF            \|#| |  |  | * |  |\\| |#|  +-----------------------+\|#| |  |  | * |  |\\|1|#|  +     THE TEXT          +\|#|2|  |  | * |  |\\| |#|  +-----------------------+\|#| |  |  | * |  |\\| |#| \\\\\ ythickness \\\\\\\\\\|#| |  |  | * |  |\\| |#+----------------------------+#| |  |  | * |  |\\| |########### 1 ##################| |  |  | * |  |\\| +--------------------------------+ |  |  | * |  |\\| |        default spacing   4     | |  |  | * |  |\\+------------------------------------+  |  | * |  |\            ythickness                   |  | * |  +------------------------------------------+  | * |                border_width                    | * +------------------------------------------------+ */static voidgtk_button_paint (GtkWidget    *widget,		  GdkRectangle *area){  GtkButton *button;  GtkShadowType shadow_type;  gint width, height;  gint x, y;     if (GTK_WIDGET_DRAWABLE (widget))    {      button = GTK_BUTTON (widget);	      x = 0;      y = 0;      width = widget->allocation.width - GTK_CONTAINER (widget)->border_width * 2;      height = widget->allocation.height - GTK_CONTAINER (widget)->border_width * 2;      gdk_window_set_back_pixmap (widget->window, NULL, TRUE);      gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height);      if (GTK_WIDGET_HAS_DEFAULT (widget) &&	  GTK_BUTTON (widget)->relief == GTK_RELIEF_NORMAL)	{	  gtk_paint_box (widget->style, widget->window,			 GTK_STATE_NORMAL, GTK_SHADOW_IN,			 area, widget, "buttondefault",			 x, y, width, height);	}      if (GTK_WIDGET_CAN_DEFAULT (widget))	{	  x += widget->style->klass->xthickness;	  y += widget->style->klass->ythickness;	  width -= 2 * x + DEFAULT_SPACING;	  height -= 2 * y + DEFAULT_SPACING;	  x += DEFAULT_LEFT_POS;	  y += DEFAULT_TOP_POS;	}             if (GTK_WIDGET_HAS_FOCUS (widget))	{	  x += 1;	  y += 1;	  width -= 2;	  height -= 2;	}	      if (GTK_WIDGET_STATE (widget) == GTK_STATE_ACTIVE)	shadow_type = GTK_SHADOW_IN;      else	shadow_type = GTK_SHADOW_OUT;      if ((button->relief != GTK_RELIEF_NONE) ||	  ((GTK_WIDGET_STATE(widget) != GTK_STATE_NORMAL) &&	   (GTK_WIDGET_STATE(widget) != GTK_STATE_INSENSITIVE)))	gtk_paint_box (widget->style, widget->window,		       GTK_WIDGET_STATE (widget),		       shadow_type, area, widget, "button",		       x, y, width, height);             if (GTK_WIDGET_HAS_FOCUS (widget))	{	  x -= 1;	  y -= 1;	  width += 2;	  height += 2;	     	  gtk_paint_focus (widget->style, widget->window,			   area, widget, "button",			   x, y, width - 1, height - 1);	}    }}static voidgtk_button_draw (GtkWidget    *widget,		 GdkRectangle *area){  GtkButton *button;  GdkRectangle child_area;  GdkRectangle tmp_area;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_BUTTON (widget));  g_return_if_fail (area != NULL);  if (GTK_WIDGET_DRAWABLE (widget))    {      button = GTK_BUTTON (widget);      tmp_area = *area;      tmp_area.x -= GTK_CONTAINER (button)->border_width;      tmp_area.y -= GTK_CONTAINER (button)->border_width;      gtk_button_paint (widget, &tmp_area);      if (GTK_BIN (button)->child && gtk_widget_intersect (GTK_BIN (button)->child, &tmp_area, &child_area))	gtk_widget_draw (GTK_BIN (button)->child, &child_area);    }}static voidgtk_button_draw_focus (GtkWidget *widget){  gtk_widget_draw (widget, NULL);}static voidgtk_button_draw_default (GtkWidget *widget){  gtk_widget_draw (widget, NULL);}static gintgtk_button_expose (GtkWidget      *widget,		   GdkEventExpose *event){  GtkBin *bin;  GdkEventExpose child_event;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  if (GTK_WIDGET_DRAWABLE (widget))    {      bin = GTK_BIN (widget);            gtk_button_paint (widget, &event->area);      child_event = *event;      if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) &&	  gtk_widget_intersect (bin->child, &event->area, &child_event.area))	gtk_widget_event (bin->child, (GdkEvent*) &child_event);    }  return FALSE;}static gintgtk_button_button_press (GtkWidget      *widget,			 GdkEventButton *event){  GtkButton *button;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  if (event->type == GDK_BUTTON_PRESS)    {      button = GTK_BUTTON (widget);      if (!GTK_WIDGET_HAS_FOCUS (widget))	gtk_widget_grab_focus (widget);      if (event->button == 1)	{	  gtk_grab_add (GTK_WIDGET (button));	  gtk_button_pressed (button);	}    }  return TRUE;}static gintgtk_button_button_release (GtkWidget      *widget,			   GdkEventButton *event){  GtkButton *button;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  if (event->button == 1)    {      button = GTK_BUTTON (widget);      gtk_grab_remove (GTK_WIDGET (button));      gtk_button_released (button);    }  return TRUE;}static gintgtk_button_enter_notify (GtkWidget        *widget,			 GdkEventCrossing *event){  GtkButton *button;  GtkWidget *event_widget;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  button = GTK_BUTTON (widget);  event_widget = gtk_get_event_widget ((GdkEvent*) event);  if ((event_widget == widget) &&      (event->detail != GDK_NOTIFY_INFERIOR))    {      button->in_button = TRUE;      gtk_button_enter (button);    }  return FALSE;}static gintgtk_button_leave_notify (GtkWidget        *widget,			 GdkEventCrossing *event){  GtkButton *button;  GtkWidget *event_widget;  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  button = GTK_BUTTON (widget);  event_widget = gtk_get_event_widget ((GdkEvent*) event);  if ((event_widget == widget) &&      (event->detail != GDK_NOTIFY_INFERIOR))    {      button->in_button = FALSE;      gtk_button_leave (button);    }  return FALSE;}static gintgtk_button_focus_in (GtkWidget     *widget,		     GdkEventFocus *event){  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);  gtk_widget_draw_focus (widget);  return FALSE;}static gintgtk_button_focus_out (GtkWidget     *widget,		      GdkEventFocus *event){  g_return_val_if_fail (widget != NULL, FALSE);  g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);  g_return_val_if_fail (event != NULL, FALSE);  GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);  gtk_widget_draw_focus (widget);  return FALSE;}static voidgtk_button_add (GtkContainer *container,		GtkWidget    *widget){  g_return_if_fail (container != NULL);  g_return_if_fail (widget != NULL);  if (GTK_CONTAINER_CLASS (parent_class)->add)    GTK_CONTAINER_CLASS (parent_class)->add (container, widget);  GTK_BUTTON (container)->child = GTK_BIN (container)->child;}static voidgtk_button_remove (GtkContainer *container,		   GtkWidget    *widget){  g_return_if_fail (container != NULL);  g_return_if_fail (widget != NULL);  if (GTK_CONTAINER_CLASS (parent_class)->remove)    GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);  GTK_BUTTON (container)->child = GTK_BIN (container)->child;}static voidgtk_real_button_pressed (GtkButton *button){  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_BUTTON (button));  button->button_down = TRUE;  new_state = (button->in_button ? GTK_STATE_ACTIVE : GTK_STATE_NORMAL);  if (GTK_WIDGET_STATE (button) != new_state)    {      gtk_widget_set_state (GTK_WIDGET (button), new_state);      gtk_widget_queue_draw (GTK_WIDGET (button));    }}static voidgtk_real_button_released (GtkButton *button){  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_BUTTON (button));  if (button->button_down)    {      button->button_down = FALSE;      if (button->in_button)	gtk_button_clicked (button);      new_state = (button->in_button ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL);      if (GTK_WIDGET_STATE (button) != new_state)	{	  gtk_widget_set_state (GTK_WIDGET (button), new_state);	  /* We _draw () instead of queue_draw so that if the operation	   * blocks, the label doesn't vanish.	   */	  gtk_widget_draw (GTK_WIDGET (button), NULL);	}    }}static voidgtk_real_button_enter (GtkButton *button){  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_BUTTON (button));  new_state = (button->button_down ? GTK_STATE_ACTIVE : GTK_STATE_PRELIGHT);  if (GTK_WIDGET_STATE (button) != new_state)    {      gtk_widget_set_state (GTK_WIDGET (button), new_state);      gtk_widget_queue_draw (GTK_WIDGET (button));    }}static voidgtk_real_button_leave (GtkButton *button){  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_BUTTON (button));  if (GTK_WIDGET_STATE (button) != GTK_STATE_NORMAL)    {      gtk_widget_set_state (GTK_WIDGET (button), GTK_STATE_NORMAL);      gtk_widget_queue_draw (GTK_WIDGET (button));    }}

⌨️ 快捷键说明

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