📄 gtklistitem.c
字号:
gtk_list_item_new_with_label (const gchar *label){ GtkWidget *list_item; GtkWidget *label_widget; list_item = gtk_list_item_new (); label_widget = gtk_label_new (label); gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); gtk_container_add (GTK_CONTAINER (list_item), label_widget); gtk_widget_show (label_widget); return list_item;}voidgtk_list_item_select (GtkListItem *list_item){ gtk_item_select (GTK_ITEM (list_item));}voidgtk_list_item_deselect (GtkListItem *list_item){ gtk_item_deselect (GTK_ITEM (list_item));}static voidgtk_list_item_realize (GtkWidget *widget){ GdkWindowAttr attributes; gint attributes_mask; /*if (GTK_WIDGET_CLASS (parent_class)->realize) (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);*/ g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (widget)); GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (widget->window, widget); widget->style = gtk_style_attach (widget->style, widget->window); gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]);}static voidgtk_list_item_size_request (GtkWidget *widget, GtkRequisition *requisition){ GtkBin *bin; GtkRequisition child_requisition; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (widget)); g_return_if_fail (requisition != NULL); bin = GTK_BIN (widget); requisition->width = (GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness) * 2; requisition->height = GTK_CONTAINER (widget)->border_width * 2; if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) { gtk_widget_size_request (bin->child, &child_requisition); requisition->width += child_requisition.width; requisition->height += child_requisition.height; }}static voidgtk_list_item_size_allocate (GtkWidget *widget, GtkAllocation *allocation){ GtkBin *bin; GtkAllocation child_allocation; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (widget)); g_return_if_fail (allocation != NULL); widget->allocation = *allocation; if (GTK_WIDGET_REALIZED (widget)) gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height); bin = GTK_BIN (widget); if (bin->child) { child_allocation.x = (GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness); child_allocation.y = GTK_CONTAINER (widget)->border_width; child_allocation.width = allocation->width - child_allocation.x * 2; child_allocation.height = allocation->height - child_allocation.y * 2; gtk_widget_size_allocate (bin->child, &child_allocation); }}static void gtk_list_item_style_set (GtkWidget *widget, GtkStyle *previous_style){ g_return_if_fail (widget != NULL); if (previous_style && GTK_WIDGET_REALIZED (widget)) gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);}static voidgtk_list_item_draw (GtkWidget *widget, GdkRectangle *area){ GtkBin *bin; GdkRectangle child_area; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (widget)); g_return_if_fail (area != NULL); if (GTK_WIDGET_DRAWABLE (widget)) { bin = GTK_BIN (widget); if (widget->state == GTK_STATE_NORMAL) { gdk_window_set_back_pixmap (widget->window, NULL, TRUE); gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height); } else { gtk_paint_flat_box(widget->style, widget->window, widget->state, GTK_SHADOW_ETCHED_OUT, area, widget, "listitem", 0, 0, -1, -1); } if (bin->child && gtk_widget_intersect (bin->child, area, &child_area)) gtk_widget_draw (bin->child, &child_area); if (GTK_WIDGET_HAS_FOCUS (widget)) { if (GTK_IS_LIST (widget->parent) && GTK_LIST (widget->parent)->add_mode) gtk_paint_focus (widget->style, widget->window, NULL, widget, "add-mode", 0, 0, widget->allocation.width - 1, widget->allocation.height - 1); else gtk_paint_focus (widget->style, widget->window, NULL, widget, NULL, 0, 0, widget->allocation.width - 1, widget->allocation.height - 1); } }}static voidgtk_list_item_draw_focus (GtkWidget *widget){ g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (widget)); gtk_widget_draw(widget, NULL);}static gintgtk_list_item_button_press (GtkWidget *widget, GdkEventButton *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_LIST_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (event->type == GDK_BUTTON_PRESS) if (!GTK_WIDGET_HAS_FOCUS (widget)) gtk_widget_grab_focus (widget); return FALSE;}static gintgtk_list_item_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_LIST_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_DRAWABLE (widget)) { bin = GTK_BIN (widget); if (!GTK_WIDGET_IS_SENSITIVE (widget)) gdk_window_set_background (widget->window, &widget->style->bg[GTK_STATE_INSENSITIVE]); else if (widget->state == GTK_STATE_NORMAL) gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]); else gdk_window_set_background (widget->window, &widget->style->bg[widget->state]); gdk_window_clear_area (widget->window, event->area.x, event->area.y, event->area.width, event->area.height); if (bin->child) { child_event = *event; if (GTK_WIDGET_NO_WINDOW (bin->child) && gtk_widget_intersect (bin->child, &event->area, &child_event.area)) gtk_widget_event (bin->child, (GdkEvent*) &child_event); } gtk_widget_draw_focus (widget); } return FALSE;}static gintgtk_list_item_focus_in (GtkWidget *widget, GdkEventFocus *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_LIST_ITEM (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_list_item_focus_out (GtkWidget *widget, GdkEventFocus *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_LIST_ITEM (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_real_list_item_select (GtkItem *item){ g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (item)); switch (GTK_WIDGET (item)->state) { case GTK_STATE_SELECTED: case GTK_STATE_INSENSITIVE: break; default: gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED); break; }}static voidgtk_real_list_item_deselect (GtkItem *item){ g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (item)); if (GTK_WIDGET (item)->state == GTK_STATE_SELECTED) gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_NORMAL);}static voidgtk_real_list_item_toggle (GtkItem *item){ g_return_if_fail (item != NULL); g_return_if_fail (GTK_IS_LIST_ITEM (item)); switch (GTK_WIDGET (item)->state) { case GTK_STATE_SELECTED: gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_NORMAL); break; case GTK_STATE_INSENSITIVE: break; default: gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -