Beispiel #1
0
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;
}