Make GtkSeparator use GtkStyleContext

This commit is contained in:
Carlos Garnacho 2010-12-24 19:33:14 +01:00
parent 7c35994bda
commit 92102c3bf4

View File

@ -161,12 +161,17 @@ gtk_separator_get_preferred_size (GtkWidget *widget,
{ {
GtkSeparator *separator = GTK_SEPARATOR (widget); GtkSeparator *separator = GTK_SEPARATOR (widget);
GtkSeparatorPrivate *private = separator->priv; GtkSeparatorPrivate *private = separator->priv;
GtkStyle *style; GtkStyleContext *context;
GtkStateFlags state;
GtkBorder border;
gboolean wide_sep; gboolean wide_sep;
gint sep_width; gint sep_width;
gint sep_height; gint sep_height;
style = gtk_widget_get_style (widget); context = gtk_widget_get_style_context (widget);
state = gtk_widget_get_state_flags (widget);
gtk_style_context_get_border (context, state, &border);
gtk_widget_style_get (widget, gtk_widget_style_get (widget,
"wide-separators", &wide_sep, "wide-separators", &wide_sep,
"separator-width", &sep_width, "separator-width", &sep_width,
@ -179,11 +184,11 @@ gtk_separator_get_preferred_size (GtkWidget *widget,
} }
else if (orientation == GTK_ORIENTATION_VERTICAL) else if (orientation == GTK_ORIENTATION_VERTICAL)
{ {
*minimum = *natural = wide_sep ? sep_height : style->ythickness; *minimum = *natural = wide_sep ? sep_height : border.top;
} }
else else
{ {
*minimum = *natural = wide_sep ? sep_width : style->xthickness; *minimum = *natural = wide_sep ? sep_width : border.left;
} }
} }
@ -209,15 +214,16 @@ gtk_separator_draw (GtkWidget *widget,
{ {
GtkSeparator *separator = GTK_SEPARATOR (widget); GtkSeparator *separator = GTK_SEPARATOR (widget);
GtkSeparatorPrivate *private = separator->priv; GtkSeparatorPrivate *private = separator->priv;
GtkStateType state; GtkStateFlags state;
GtkStyle *style; GtkStyleContext *context;
GtkBorder padding;
GdkWindow *window; GdkWindow *window;
gboolean wide_separators; gboolean wide_separators;
gint separator_width; gint separator_width;
gint separator_height; gint separator_height;
int width, height; int width, height;
style = gtk_widget_get_style (widget); context = gtk_widget_get_style_context (widget);
gtk_widget_style_get (widget, gtk_widget_style_get (widget,
"wide-separators", &wide_separators, "wide-separators", &wide_separators,
"separator-width", &separator_width, "separator-width", &separator_width,
@ -225,39 +231,36 @@ gtk_separator_draw (GtkWidget *widget,
NULL); NULL);
window = gtk_widget_get_window (widget); window = gtk_widget_get_window (widget);
state = gtk_widget_get_state (widget); state = gtk_widget_get_state_flags (widget);
width = gtk_widget_get_allocated_width (widget); width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget); height = gtk_widget_get_allocated_height (widget);
gtk_style_context_get_padding (context, state, &padding);
gtk_style_context_save (context);
gtk_style_context_set_state (context, state);
if (private->orientation == GTK_ORIENTATION_HORIZONTAL) if (private->orientation == GTK_ORIENTATION_HORIZONTAL)
{ {
if (wide_separators) if (wide_separators)
gtk_paint_box (style, cr, gtk_render_frame (context, cr,
gtk_widget_get_state (widget), GTK_SHADOW_ETCHED_OUT, 0, (height - separator_height) / 2,
widget, "hseparator", width, separator_height);
0, (height - separator_height) / 2,
width, separator_height);
else else
gtk_paint_hline (style, cr, gtk_render_line (context, cr,
gtk_widget_get_state (widget), 0, (height - padding.top) / 2,
widget, "hseparator", width - 1, (height - padding.top) / 2);
0, width - 1,
(height - style->ythickness) / 2);
} }
else else
{ {
if (wide_separators) if (wide_separators)
gtk_paint_box (style, cr, gtk_render_frame (context, cr,
gtk_widget_get_state (widget), GTK_SHADOW_ETCHED_OUT, (width - separator_width) / 2, 0,
widget, "vseparator", separator_width, height);
(width - separator_width) / 2, 0,
separator_width, height);
else else
gtk_paint_vline (style, cr, gtk_render_line (context, cr,
gtk_widget_get_state (widget), (width - padding.left) / 2, 0,
widget, "vseparator", (width - padding.left) / 2, height - 1);
0, height - 1,
(width - style->xthickness) / 2);
} }
return FALSE; return FALSE;