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

📄 gtktogglebutton.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
      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, "togglebuttondefault",                         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) ||	  toggle_button->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, "togglebutton",		       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, "togglebutton",			   x, y, width - 1, height - 1);	}    }}static voidgtk_toggle_button_size_allocate (GtkWidget     *widget,				 GtkAllocation *allocation){  if (!GTK_WIDGET_NO_WINDOW (widget) &&      GTK_WIDGET_CLASS (parent_class)->size_allocate)    GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);}static gintgtk_toggle_button_expose (GtkWidget      *widget,			  GdkEventExpose *event){  if (!GTK_WIDGET_NO_WINDOW (widget) &&      GTK_WIDGET_CLASS (parent_class)->expose_event)    return GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);  else    return FALSE;}static voidgtk_toggle_button_draw (GtkWidget    *widget,			GdkRectangle *area){  GdkRectangle child_area;  GdkRectangle tmp_area;  GtkBin *bin;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));  g_return_if_fail (area != NULL);  bin = GTK_BIN (widget);  if (GTK_WIDGET_DRAWABLE (widget) && !GTK_WIDGET_NO_WINDOW (widget))    {      tmp_area = *area;      tmp_area.x -= GTK_CONTAINER (widget)->border_width;      tmp_area.y -= GTK_CONTAINER (widget)->border_width;      gtk_toggle_button_paint (widget, &tmp_area);      if (bin->child && gtk_widget_intersect (bin->child, &tmp_area, &child_area))	gtk_widget_draw (bin->child, &child_area);    }}static voidgtk_toggle_button_pressed (GtkButton *button){  GtkToggleButton *toggle_button;  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));  toggle_button = GTK_TOGGLE_BUTTON (button);  button->button_down = TRUE;  if (toggle_button->active)    new_state = (button->in_button ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE);  else    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);}static voidgtk_toggle_button_released (GtkButton *button){  GtkToggleButton *toggle_button;  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));  if (button->button_down)    {      toggle_button = GTK_TOGGLE_BUTTON (button);      button->button_down = FALSE;      if (button->in_button)	{	  gtk_button_clicked (button);	}      else	{	  if (toggle_button->active)	    new_state = (button->in_button ? GTK_STATE_PRELIGHT : GTK_STATE_ACTIVE);	  else	    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);	}    }}static voidgtk_toggle_button_clicked (GtkButton *button){  GtkToggleButton *toggle_button;  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));  toggle_button = GTK_TOGGLE_BUTTON (button);  toggle_button->active = !toggle_button->active;  gtk_toggle_button_toggled (toggle_button);  if (toggle_button->active)    new_state = (button->in_button ? GTK_STATE_PRELIGHT : GTK_STATE_ACTIVE);  else    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);  else    gtk_widget_queue_draw (GTK_WIDGET (button));}static voidgtk_toggle_button_enter (GtkButton *button){  GtkToggleButton *toggle_button;  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));  toggle_button = GTK_TOGGLE_BUTTON (button);  if (toggle_button->active)    new_state = (button->button_down ? GTK_STATE_NORMAL : GTK_STATE_PRELIGHT);  else    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);}static voidgtk_toggle_button_leave (GtkButton *button){  GtkToggleButton *toggle_button;  GtkStateType new_state;  g_return_if_fail (button != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));  toggle_button = GTK_TOGGLE_BUTTON (button);  new_state = (toggle_button->active ? GTK_STATE_ACTIVE : GTK_STATE_NORMAL);  if (GTK_WIDGET_STATE (button) != new_state)    gtk_widget_set_state (GTK_WIDGET (button), new_state);}static voidgtk_toggle_button_realize (GtkWidget *widget){  GtkToggleButton *toggle_button;  GdkWindowAttr attributes;  gint attributes_mask;  gint border_width;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));    toggle_button = GTK_TOGGLE_BUTTON (widget);  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);    border_width = GTK_CONTAINER (widget)->border_width;    attributes.window_type = GDK_WINDOW_CHILD;  attributes.x = widget->allocation.x + border_width;  attributes.y = widget->allocation.y + border_width;  attributes.width = widget->allocation.width - border_width * 2;  attributes.height = widget->allocation.height - border_width * 2;  attributes.event_mask = gtk_widget_get_events (widget);  attributes.event_mask |= (GDK_EXPOSURE_MASK |			    GDK_BUTTON_PRESS_MASK |			    GDK_BUTTON_RELEASE_MASK |			    GDK_ENTER_NOTIFY_MASK |			    GDK_LEAVE_NOTIFY_MASK);  if (GTK_WIDGET_NO_WINDOW (widget))    {      attributes.wclass = GDK_INPUT_ONLY;      attributes_mask = GDK_WA_X | GDK_WA_Y;      widget->window = gtk_widget_get_parent_window (widget);      gdk_window_ref (widget->window);            toggle_button->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),						    &attributes, attributes_mask);      gdk_window_set_user_data (toggle_button->event_window, toggle_button);    }  else    {      attributes.wclass = GDK_INPUT_OUTPUT;      attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;      attributes.visual = gtk_widget_get_visual (widget);      attributes.colormap = gtk_widget_get_colormap (widget);      widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),				       &attributes, attributes_mask);      gdk_window_set_user_data (widget->window, toggle_button);    }  widget->style = gtk_style_attach (widget->style, widget->window);  if (!GTK_WIDGET_NO_WINDOW (widget))    gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);}  static voidgtk_toggle_button_unrealize (GtkWidget *widget){  GtkToggleButton *toggle_button;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));  toggle_button = GTK_TOGGLE_BUTTON (widget);    if (GTK_WIDGET_NO_WINDOW (widget))    {      gdk_window_set_user_data (toggle_button->event_window, NULL);      gdk_window_destroy (toggle_button->event_window);      toggle_button->event_window = NULL;    }  if (GTK_WIDGET_CLASS (parent_class)->unrealize)    (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);}static voidgtk_toggle_button_map (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));  if (GTK_WIDGET_NO_WINDOW (widget))    gdk_window_show (GTK_TOGGLE_BUTTON (widget)->event_window);  GTK_WIDGET_CLASS (parent_class)->map (widget);}static voidgtk_toggle_button_unmap (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));  if (GTK_WIDGET_NO_WINDOW (widget))    gdk_window_hide (GTK_TOGGLE_BUTTON (widget)->event_window);  GTK_WIDGET_CLASS (parent_class)->unmap (widget);}

⌨️ 快捷键说明

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