static void anjuta_tabber_draw_tab (AnjutaTabber* tabber, cairo_t* cr, GList* child, gboolean current) { GtkWidget* tab = GTK_WIDGET (child->data); gint nth = g_list_index (tabber->priv->children, child->data) + 1; gboolean last = (child->next == NULL); anjuta_tabber_render_tab (GTK_WIDGET (tabber), tab, cr, current, anjuta_tabber_get_region_flags (nth, last)); }
static GtkWidgetPath* anjuta_tabber_get_path_for_child (GtkContainer* container, GtkWidget* widget) { AnjutaTabber* tabber = ANJUTA_TABBER (container); GtkWidgetPath* path; gint page_num;; gint tabber_pos; path = GTK_CONTAINER_CLASS (anjuta_tabber_parent_class)->get_path_for_child (container, widget); page_num = g_list_index (tabber->priv->children, widget); if (page_num == -1) return path; tabber_pos = gtk_widget_path_length (path) - 2; gtk_widget_path_iter_add_region (path, tabber_pos, GTK_STYLE_REGION_TAB, anjuta_tabber_get_region_flags (tabber, page_num)); return path; }
static void anjuta_tabber_setup_style_context (AnjutaTabber* tabber, GtkStyleContext* context, GList* child, GtkStateFlags* state_flags, GtkRegionFlags* region_flags) { gint page_num; gboolean current; GtkRegionFlags region; GtkStateFlags state; page_num = g_list_position (tabber->priv->children, child); current = page_num == tabber->priv->active_page; region = anjuta_tabber_get_region_flags (tabber, page_num); gtk_style_context_add_region (context, GTK_STYLE_REGION_TAB, region); if (gtk_widget_get_direction (GTK_WIDGET (tabber)) == GTK_TEXT_DIR_LTR) gtk_style_context_set_junction_sides (context, GTK_JUNCTION_CORNER_TOPLEFT); else gtk_style_context_set_junction_sides (context, GTK_JUNCTION_CORNER_TOPRIGHT); state = gtk_style_context_get_state (context); if (current) state |= GTK_STATE_FLAG_ACTIVE; else state &= ~GTK_STATE_FLAG_ACTIVE; gtk_style_context_set_state (context, state); if (state_flags) *state_flags = state; if (region_flags) *region_flags = region; }