[murrine] arrowstyle = 2 to draw fat filled arrows. handlestyle = 2 for three near simple lines with inset. st



commit b5c373f450de1b3857d9360ea795c947dac71a3d
Author: Andrea Cimitan <andrea cimitan gmail com>
Date:   Wed Aug 4 19:16:26 2010 +0100

    arrowstyle = 2 to draw fat filled arrows.
    handlestyle = 2 for three near simple lines with inset.
    stepperstyle = 3 for rounded steppers inside the trough.
    trough_border_shades = { 1.0, 1.0 } to draw a gradient on the border of the trough of GtkScrollbar and GtkProgressBar.

 NEWS                     |    5 +-
 schema/murrine.xml.in.in |    3 +
 src/cairo-support.c      |  124 +++++++++++++++++++++++-----
 src/cairo-support.h      |   27 ++++++
 src/murrine_draw.c       |  205 +++++++++++++++++++++++++++++++++++++++++++---
 src/murrine_draw_rgba.c  |  167 +++++++++++++++++++++++++++++++++++++-
 src/murrine_rc_style.c   |   15 +++-
 src/murrine_rc_style.h   |    4 +-
 src/murrine_style.c      |   88 ++++++++++++++------
 src/murrine_style.h      |    1 +
 src/murrine_types.h      |    8 ++
 11 files changed, 584 insertions(+), 63 deletions(-)
---
diff --git a/NEWS b/NEWS
index 46280ac..e6e8eaa 100644
--- a/NEWS
+++ b/NEWS
@@ -27,6 +27,7 @@ Changes in this release:
               gradient_colors = FALSE to disable.
 - New option: handlestyle = 0 for three simple lines.
               handlestyle = 1 for three simple lines with inset.
+              handlestyle = 2 for three near simple lines with inset.
 - New option: prelight_shade = 1.0 to select the shade level used in the
               scrollbar's slider, GtkComboBox with comboboxstyle = 1 and
               in the prelight state with gradient_colors.
@@ -39,10 +40,12 @@ Changes in this release:
               textstyle = 3 for a shadow at the bottom right of the text.
               textstyle = 4 for a shadow at the top left of the text.
 - New option: text_shade = 1.0 to specify the shade effect of the text's shadow.
+- New option: trough_border_shades = { 1.0, 1.0 } to draw a gradient on
+              the border of the trough of GtkScrollbar and GtkProgressBar.
 - New option: trough_shades = { 1.0, 1.0 } to draw a gradient on
               the trough of GtkScrollbar and GtkProgressBar.
 - Changed option: listviewstyle = 2 for a solid line.
-- Changed option: reliefstyle = 3 for a gradient on shadow,
+- Changed option: reliefstyle = 3 for a gradient on shadow.
                   reliefstyle = 4 for a stronger shadow.
 - Changed option: stepperstyle = 2 for squared steppers with a rounded slider.
 - Deprecated option: gradients, please unset the other options instead.
diff --git a/schema/murrine.xml.in.in b/schema/murrine.xml.in.in
index fe52091..9b829f1 100644
--- a/schema/murrine.xml.in.in
+++ b/schema/murrine.xml.in.in
@@ -168,6 +168,9 @@
 		<enumeration value="1">
 			<label>Small lines with inset</label>
 		</enumeration>
+		<enumeration value="2">
+			<label>Small near lines with inset</label>
+		</enumeration>
 	</option>
 
 
diff --git a/src/cairo-support.c b/src/cairo-support.c
index 6c92c60..0d5def9 100644
--- a/src/cairo-support.c
+++ b/src/cairo-support.c
@@ -466,6 +466,43 @@ clearlooks_rounded_rectangle (cairo_t *cr,
 }
 
 void
+murrine_rounded_rectangle_inverted (cairo_t *cr,
+                                    double x, double y, double w, double h,
+                                    int radius, uint8 corners)
+{
+	radius = MIN (radius, MIN (w/2.0, h/2.0));
+
+	cairo_translate(cr, x, y);
+
+	if (corners & MRN_CORNER_TOPLEFT)
+		cairo_move_to(cr, 0, -radius);
+	else
+		cairo_move_to(cr, 0, 0);
+
+	if (corners & MRN_CORNER_BOTTOMLEFT)
+		cairo_arc(cr, radius, h + radius, radius, M_PI * 1.0, M_PI * 1.5);
+	else
+		cairo_line_to(cr, 0, h);
+
+	if (corners & MRN_CORNER_BOTTOMRIGHT)
+		cairo_arc(cr, w - radius, h + radius, radius, M_PI * 1.5, M_PI * 2.0);
+	else
+		cairo_line_to(cr, w, h);
+
+	if (corners & MRN_CORNER_TOPRIGHT)
+		cairo_arc(cr, w - radius, -radius, radius, M_PI * 0.0, M_PI * 0.5);
+	else
+		cairo_line_to(cr, w, 0);
+
+	if (corners & MRN_CORNER_TOPLEFT)
+		cairo_arc(cr, radius, -radius, radius, M_PI * 0.5, M_PI * 1.0);
+	else
+		cairo_line_to(cr, 0, 0);
+
+	cairo_translate(cr, -x, -y);
+}
+
+void
 murrine_rounded_rectangle (cairo_t *cr,
                            double x, double y, double w, double h,
                            int radius, uint8 corners)
@@ -882,11 +919,10 @@ murrine_set_gradient (cairo_t *cr,
 }
 
 void
-murrine_draw_border (cairo_t *cr,
-                     const MurrineRGB  *color,
-                     double x, double y, double width, double height,
-                     int roundness, uint8 corners,
-                     MurrineGradients mrn_gradient, double alpha)
+murrine_draw_border_from_path (cairo_t *cr,
+                               const MurrineRGB  *color,
+                               double x, double y, double width, double height,
+                               MurrineGradients mrn_gradient, double alpha)
 {
 	if (mrn_gradient.has_border_colors)
 	{
@@ -922,18 +958,27 @@ murrine_draw_border (cairo_t *cr,
 	else
 		murrine_set_color_rgba (cr, color, alpha);
 
-	murrine_rounded_rectangle (cr, x, y, width, height, roundness, corners);
 	cairo_stroke (cr);
 }
 
 void
-murrine_draw_shadow (cairo_t *cr,
+murrine_draw_border (cairo_t *cr,
                      const MurrineRGB  *color,
                      double x, double y, double width, double height,
                      int roundness, uint8 corners,
-                     int reliefstyle,
                      MurrineGradients mrn_gradient, double alpha)
 {
+	murrine_rounded_rectangle (cr, x, y, width, height, roundness, corners);
+	murrine_draw_border_from_path (cr, color, x, y, width, height, mrn_gradient, alpha);
+}
+
+void
+murrine_draw_shadow_from_path (cairo_t *cr,
+                               const MurrineRGB  *color,
+                               double x, double y, double width, double height,
+                               int reliefstyle,
+                               MurrineGradients mrn_gradient, double alpha)
+{
 	if (mrn_gradient.shadow_shades[0] != 1.0 ||
 	    mrn_gradient.shadow_shades[1] != 1.0 ||
 	    reliefstyle > 2) // improve
@@ -954,17 +999,27 @@ murrine_draw_shadow (cairo_t *cr,
 	else
 		murrine_set_color_rgba (cr, color, alpha);
 
-	murrine_rounded_rectangle (cr, x, y, width, height, roundness, corners);
 	cairo_stroke (cr);
 }
 
 void
-murrine_draw_trough (cairo_t *cr,
+murrine_draw_shadow (cairo_t *cr,
                      const MurrineRGB  *color,
                      double x, double y, double width, double height,
                      int roundness, uint8 corners,
-                     MurrineGradients mrn_gradient, double alpha,
-                     boolean horizontal)
+                     int reliefstyle,
+                     MurrineGradients mrn_gradient, double alpha)
+{
+	murrine_rounded_rectangle (cr, x, y, width, height, roundness, corners);
+	murrine_draw_shadow_from_path (cr, color, x, y, width, height, reliefstyle, mrn_gradient, alpha);
+}
+
+void
+murrine_draw_trough_from_path (cairo_t *cr,
+                               const MurrineRGB  *color,
+                               double x, double y, double width, double height,
+                               MurrineGradients mrn_gradient, double alpha,
+                               boolean horizontal)
 {
 	if (mrn_gradient.trough_shades[0] != 1.0 ||
 	    mrn_gradient.trough_shades[1] != 1.0) // improve
@@ -985,26 +1040,38 @@ murrine_draw_trough (cairo_t *cr,
 	else
 		murrine_set_color_rgba (cr, color, alpha);
 
-	murrine_rounded_rectangle_closed (cr, x, y, width, height, roundness, corners);
 	cairo_fill (cr);
 }
 
 void
-murrine_draw_trough_border (cairo_t *cr,
-                            const MurrineRGB  *color,
-                            double x, double y, double width, double height,
-                            int roundness, uint8 corners,
-                            MurrineGradients mrn_gradient, double alpha,
-                            boolean horizontal)
+murrine_draw_trough (cairo_t *cr,
+                     const MurrineRGB  *color,
+                     double x, double y, double width, double height,
+                     int roundness, uint8 corners,
+                     MurrineGradients mrn_gradient, double alpha,
+                     boolean horizontal)
 {
-	if (mrn_gradient.trough_shades[0] != 1.0 ||
+	murrine_rounded_rectangle_closed (cr, x, y, width, height, roundness, corners);
+	murrine_draw_trough_from_path (cr, color, x, y, width, height, mrn_gradient, alpha, horizontal);
+}
+
+void
+murrine_draw_trough_border_from_path (cairo_t *cr,
+                                      const MurrineRGB  *color,
+                                      double x, double y, double width, double height,
+                                      MurrineGradients mrn_gradient, double alpha,
+                                      boolean horizontal)
+{
+	if (mrn_gradient.trough_border_shades[0] != 1.0 ||
+	    mrn_gradient.trough_border_shades[1] != 1.0 ||
+	    mrn_gradient.trough_shades[0] != 1.0 ||
 	    mrn_gradient.trough_shades[1] != 1.0) // improve
 	{
 		cairo_pattern_t *pat;
 		MurrineRGB shade1, shade2;
 
-		murrine_shade (color, mrn_gradient.trough_shades[0], &shade1);
-		murrine_shade (color, mrn_gradient.trough_shades[1], &shade2);
+		murrine_shade (color, mrn_gradient.trough_shades[0]*mrn_gradient.trough_border_shades[0], &shade1);
+		murrine_shade (color, mrn_gradient.trough_shades[1]*mrn_gradient.trough_border_shades[1], &shade2);
 
 		pat = cairo_pattern_create_linear (x, y, horizontal ? x : width+x, horizontal ? height+y : y);
 		murrine_pattern_add_color_stop_rgba (pat, 0.00, &shade1, alpha);
@@ -1016,11 +1083,22 @@ murrine_draw_trough_border (cairo_t *cr,
 	else
 		murrine_set_color_rgba (cr, color, alpha);
 
-	murrine_rounded_rectangle (cr, x, y, width, height, roundness, corners);
 	cairo_stroke (cr);
 }
 
 void
+murrine_draw_trough_border (cairo_t *cr,
+                            const MurrineRGB  *color,
+                            double x, double y, double width, double height,
+                            int roundness, uint8 corners,
+                            MurrineGradients mrn_gradient, double alpha,
+                            boolean horizontal)
+{
+	murrine_rounded_rectangle (cr, x, y, width, height, roundness, corners);
+	murrine_draw_trough_border_from_path (cr, color, x, y, width, height, mrn_gradient, alpha, horizontal);
+}
+
+void
 rotate_mirror_translate (cairo_t *cr,
                          double radius, double x, double y,
                          boolean mirror_horizontally, boolean mirror_vertically)
diff --git a/src/cairo-support.h b/src/cairo-support.h
index c121a19..cb9082f 100644
--- a/src/cairo-support.h
+++ b/src/cairo-support.h
@@ -82,6 +82,10 @@ G_GNUC_INTERNAL void clearlooks_rounded_rectangle (cairo_t *cr,
                                                    double x, double y, double w, double h,
                                                    int radius, uint8 corners);
 
+G_GNUC_INTERNAL void murrine_rounded_rectangle_inverted (cairo_t *cr,
+                                                         double x, double y, double w, double h,
+                                                         int radius, uint8 corners);
+
 G_GNUC_INTERNAL void murrine_rounded_rectangle (cairo_t *cr,
                                                 double x, double y, double w, double h,
                                                 int radius, uint8 corners);
@@ -106,6 +110,11 @@ G_GNUC_INTERNAL void murrine_draw_border (cairo_t *cr,
                                           int roundness, uint8 corners,
                                           MurrineGradients mrn_gradient, double alpha);
 
+G_GNUC_INTERNAL void murrine_draw_border_from_path (cairo_t *cr,
+                                                    const MurrineRGB  *color,
+                                                    double x, double y, double width, double height,
+                                                    MurrineGradients mrn_gradient, double alpha);
+
 G_GNUC_INTERNAL void murrine_draw_shadow (cairo_t *cr,
                                           const MurrineRGB  *color,
                                           double x, double y, double width, double height,
@@ -113,6 +122,12 @@ G_GNUC_INTERNAL void murrine_draw_shadow (cairo_t *cr,
                                           int reliefstyle,
                                           MurrineGradients mrn_gradient, double alpha);
 
+G_GNUC_INTERNAL void murrine_draw_shadow_from_path (cairo_t *cr,
+                                                    const MurrineRGB  *color,
+                                                    double x, double y, double width, double height,
+                                                    int reliefstyle,
+                                                    MurrineGradients mrn_gradient, double alpha);
+
 G_GNUC_INTERNAL void murrine_draw_trough (cairo_t *cr,
                                           const MurrineRGB  *color,
                                           double x, double y, double width, double height,
@@ -120,6 +135,12 @@ G_GNUC_INTERNAL void murrine_draw_trough (cairo_t *cr,
                                           MurrineGradients mrn_gradient, double alpha,
                                           boolean horizontal);
 
+G_GNUC_INTERNAL void murrine_draw_trough_from_path (cairo_t *cr,
+                                                    const MurrineRGB  *color,
+                                                    double x, double y, double width, double height,
+                                                    MurrineGradients mrn_gradient, double alpha,
+                                                    boolean horizontal);
+
 G_GNUC_INTERNAL void murrine_draw_trough_border (cairo_t *cr,
                                                  const MurrineRGB  *color,
                                                  double x, double y, double width, double height,
@@ -127,6 +148,12 @@ G_GNUC_INTERNAL void murrine_draw_trough_border (cairo_t *cr,
                                                  MurrineGradients mrn_gradient, double alpha,
                                                  boolean horizontal);
 
+G_GNUC_INTERNAL void murrine_draw_trough_border_from_path (cairo_t *cr,
+                                                           const MurrineRGB  *color,
+                                                           double x, double y, double width, double height,
+                                                           MurrineGradients mrn_gradient, double alpha,
+                                                           boolean horizontal);
+
 G_GNUC_INTERNAL void murrine_draw_glaze (cairo_t *cr,
                                          const MurrineRGB *fill,
                                          double glow_shade,
diff --git a/src/murrine_draw.c b/src/murrine_draw.c
index 4c76185..7c377f9 100644
--- a/src/murrine_draw.c
+++ b/src/murrine_draw.c
@@ -599,6 +599,94 @@ murrine_draw_scale_trough (cairo_t *cr,
 }
 
 static void
+murrine_draw_slider_path (cairo_t *cr,
+                          int x, int y, int width, int height,
+                          int roundness)
+{
+	int radius = MIN (roundness, MIN (width/2.0, height/2.0));
+
+	cairo_move_to (cr, x+radius, y);
+	cairo_arc (cr, x+width-radius, y+radius, radius, M_PI*1.5, M_PI*2);
+	cairo_line_to (cr, x+width, y+height-width/2.0);
+	cairo_line_to (cr, x+width/2.0, y+height);
+	cairo_line_to (cr, x, y+height-width/2.0);
+	cairo_arc (cr, x+radius, y+radius, radius, M_PI, M_PI*1.5);
+}
+
+static void
+murrine_draw_slider (cairo_t *cr,
+                     const MurrineColors    *colors,
+                     const WidgetParameters *widget,
+                     const SliderParameters *slider,
+                     int x, int y, int width, int height)
+{
+	int os = (widget->xthickness > 2 && widget->ythickness > 2) ? 1 : 0;
+	double glow_shade_new = widget->glow_shade;
+	double highlight_shade_new = widget->highlight_shade;
+	double lightborder_shade_new = widget->lightborder_shade;
+	MurrineGradients mrn_gradient_new = widget->mrn_gradient;
+	MurrineRGB border = colors->shade[!widget->disabled ? 6 : 5];
+	MurrineRGB fill = colors->bg[widget->state_type];
+
+	murrine_get_fill_color (&fill, &mrn_gradient_new);
+
+	if (widget->disabled)
+	{
+		mrn_gradient_new = murrine_get_decreased_gradient_shades (widget->mrn_gradient, 3.0);
+		mrn_gradient_new.border_shades[0] = murrine_get_decreased_shade (widget->mrn_gradient.border_shades[0], 2.0);
+		mrn_gradient_new.border_shades[1] = murrine_get_decreased_shade (widget->mrn_gradient.border_shades[1], 2.0);
+		glow_shade_new = murrine_get_decreased_shade (widget->glow_shade, 2.0);
+		highlight_shade_new = murrine_get_decreased_shade (widget->highlight_shade, 2.0);
+		lightborder_shade_new = murrine_get_decreased_shade (widget->lightborder_shade, 2.0);
+	}
+	else
+		murrine_shade (&colors->shade[6], 0.95, &border);
+
+	if (!slider->horizontal)
+		murrine_exchange_axis (cr, &x, &y, &width, &height);
+
+	cairo_save (cr);
+	
+	cairo_translate (cr, x+0.5, y+0.5);
+
+	if (!widget->active && !widget->disabled && widget->reliefstyle > 1 && os > 0)
+	{
+		murrine_draw_slider_path (cr, os-1, os, width-(os*2)+2, height-(os*2)+1, widget->roundness+1);
+		murrine_draw_shadow_from_path (cr, &border,
+		                               os-1, os, width-(os*2)+2, height-(os*2)+1,
+		                               widget->reliefstyle,
+		                               mrn_gradient_new, 0.08);
+	}
+
+	murrine_mix_color (&border, &fill, 0.2, &border);
+
+	cairo_save (cr);
+
+	murrine_draw_slider_path (cr, os, os+1, width-(os*2), height-(os*2)-1, widget->roundness);
+	cairo_clip_preserve (cr);
+
+	murrine_draw_glaze (cr, &fill,
+	                    glow_shade_new, highlight_shade_new, !widget->active ? lightborder_shade_new : 1.0,
+	                    mrn_gradient_new, widget,
+	                    os, os+1, width-(os*2), height-(os*2)-1,
+	                    widget->roundness, widget->corners, TRUE);
+
+	cairo_restore (cr);
+	
+	murrine_draw_slider_path (cr, os, os+1, width-(os*2), height-(os*2)-1, widget->roundness);
+
+	murrine_draw_border_from_path (cr, &border,
+	                     os, os+1, width-(os*2), height-(os*2)-1,
+	                     mrn_gradient_new, 1.0);
+
+	cairo_restore (cr);
+	 
+	if (!slider->horizontal)
+		murrine_exchange_axis (cr, &x, &y, &width, &height);
+}
+
+
+static void
 murrine_draw_slider_handle (cairo_t *cr,
                             const MurrineColors    *colors,
                             const WidgetParameters *widget,
@@ -631,8 +719,8 @@ murrine_draw_slider_handle (cairo_t *cr,
 		{
 			for (i=0; i<num_handles; i++)
 			{
-				cairo_move_to (cr, bar_x, 3.5);
-				cairo_line_to (cr, bar_x, height-4.5);
+				cairo_move_to (cr, bar_x, 4.5);
+				cairo_line_to (cr, bar_x, height-5.5);
 				murrine_set_color_rgb (cr, &color);
 				cairo_stroke (cr);
 
@@ -646,20 +734,42 @@ murrine_draw_slider_handle (cairo_t *cr,
 
 			for (i=0; i<num_handles; i++)
 			{
-				cairo_move_to (cr, bar_x, 3.5);
-				cairo_line_to (cr, bar_x, height-4.5);
+				cairo_move_to (cr, bar_x, 4.5);
+				cairo_line_to (cr, bar_x, height-5.5);
 				murrine_set_color_rgb (cr, &color);
 				cairo_stroke (cr);
 
-				cairo_move_to (cr, bar_x+1, 3.5);
-				cairo_line_to (cr, bar_x+1, height-4.5);
+				cairo_move_to (cr, bar_x+1, 4.5);
+				cairo_line_to (cr, bar_x+1, height-5.5);
 				murrine_set_color_rgb (cr, &inset);
 				cairo_stroke (cr);
 
 				bar_x += 3;
 			}			
 			break;
-		}		
+		}
+		case 2:
+		{
+			murrine_shade (&colors->bg[widget->state_type], 1.04, &inset);
+
+			bar_x++;
+
+			for (i=0; i<num_handles; i++)
+			{
+				cairo_move_to (cr, bar_x, 4.5);
+				cairo_line_to (cr, bar_x, height-5.5);
+				murrine_set_color_rgb (cr, &color);
+				cairo_stroke (cr);
+
+				cairo_move_to (cr, bar_x+1, 4.5);
+				cairo_line_to (cr, bar_x+1, height-5.5);
+				murrine_set_color_rgb (cr, &inset);
+				cairo_stroke (cr);
+
+				bar_x += 2;
+			}			
+			break;
+		}			
 	}
 }
 
@@ -755,7 +865,7 @@ murrine_draw_progressbar_fill (cairo_t *cr,
 			rotate_mirror_translate (cr, M_PI/2, x, y+width, TRUE, FALSE);
 	}
 
-	roundness = MIN (widget->roundness, (height-2.0)/2.0);
+	roundness = MIN (widget->roundness-widget->xthickness, (height-2.0)/2.0);
 	stroke_width = height*2;
 	x_step = (((float)stroke_width/10)*offset);
 
@@ -1750,9 +1860,9 @@ murrine_draw_scrollbar_trough (cairo_t *cr,
 	MurrineRGB fill;
 
 	murrine_shade (&widget->parentbg,
-	               murrine_get_contrast (scrollbar->stepperstyle < 1 ? 0.86 : 0.8, widget->contrast),
+	               murrine_get_contrast (scrollbar->stepperstyle != 1 ? 0.86 : 0.8, widget->contrast),
 	               &border);
-	murrine_shade (&widget->parentbg, scrollbar->stepperstyle < 1 ? 0.97 : 1.026, &fill);
+	murrine_shade (&widget->parentbg, scrollbar->stepperstyle != 1 ? 0.97 : 1.026, &fill);
 /*
 	murrine_shade (&colors->bg[widget->state_type],
 	               murrine_get_contrast (scrollbar->stepperstyle < 1 ? 0.86 : 0.8, widget->contrast),
@@ -1776,6 +1886,35 @@ murrine_draw_scrollbar_trough (cairo_t *cr,
 	/* Draw fill */
 	murrine_draw_trough (cr, &fill, 0, 0, width, height, widget->roundness, widget->corners, widget->mrn_gradient, 1.0, FALSE);
 
+	if (scrollbar->stepperstyle == 3)
+	{
+		uint8 corners;
+		MurrineRGB fill_stepper;
+		MurrineRGB border_stepper;
+
+		murrine_shade (&widget->parentbg, 1.02, &fill_stepper);
+		murrine_shade (&border, (widget->mrn_gradient.trough_shades[0]+widget->mrn_gradient.trough_shades[1])/2.0, &border_stepper);
+
+		cairo_save (cr);
+
+		murrine_rounded_rectangle_closed (cr, 0.5, 0.5, width-1, height-1, widget->roundness, widget->corners);
+		cairo_clip (cr);
+
+		corners = MRN_CORNER_BOTTOMLEFT | MRN_CORNER_BOTTOMRIGHT;
+		murrine_rounded_rectangle_inverted (cr, 0.5, 0.5, width-1, scrollbar->steppersize, widget->roundness, corners);
+		murrine_set_color_rgb (cr, &fill_stepper);
+		cairo_fill_preserve (cr);
+		murrine_draw_trough_border_from_path (cr, &border,0.5, 0.5, width-1, scrollbar->steppersize, widget->mrn_gradient, 1.0, FALSE);
+
+		corners = MRN_CORNER_TOPLEFT | MRN_CORNER_TOPRIGHT;
+		murrine_rounded_rectangle_inverted (cr, 0.5, height-scrollbar->steppersize-0.5, width-1, scrollbar->steppersize, widget->roundness, corners);
+		murrine_set_color_rgb (cr, &fill_stepper);
+		cairo_fill_preserve (cr);
+		murrine_draw_trough_border_from_path (cr, &border, 0.5, height-scrollbar->steppersize-0.5, width-1, scrollbar->steppersize, widget->mrn_gradient, 1.0, FALSE);
+
+		cairo_restore (cr);
+	}
+
 	/* Draw border */
 	if (!scrollbar->within_bevel)
 		murrine_draw_trough_border (cr, &border, 0.5, 0.5, width-1, height-1, widget->roundness, widget->corners, widget->mrn_gradient, 1.0, FALSE);
@@ -1850,7 +1989,7 @@ murrine_draw_scrollbar_slider (cairo_t *cr,
 
 	murrine_get_fill_color (&fill, &mrn_gradient_new);
 
-	if (scrollbar->stepperstyle != 1)
+	if (scrollbar->stepperstyle != 1 && scrollbar->stepperstyle != 3)
 	{
 		if (scrollbar->junction & MRN_JUNCTION_BEGIN)
 		{
@@ -2030,6 +2169,29 @@ murrine_draw_scrollbar_slider (cairo_t *cr,
 				}
 				break;
 			}
+			case 2:
+			{	
+				MurrineRGB inset;				
+				murrine_shade (&fill, 1.08, &inset);
+			
+				bar_x++;
+
+				for (i=0; i<num_handles; i++)
+				{
+					cairo_move_to (cr, bar_x, 5);
+					cairo_line_to (cr, bar_x, height-5);
+					murrine_set_color_rgb (cr, &border);
+					cairo_stroke (cr);
+
+					cairo_move_to (cr, bar_x+1, 4);
+					cairo_line_to (cr, bar_x+1, height-5);
+					murrine_set_color_rgb (cr, &inset);
+					cairo_stroke (cr);
+
+					bar_x += 2;
+				}			
+				break;
+			}
 		}
 	}
 
@@ -2219,6 +2381,26 @@ murrine_draw_handle (cairo_t *cr,
 			}
 			break;
 		}
+		case 2:
+		{	
+			bar_y++;
+
+			for (i=0; i<num_bars; i++)
+			{
+				cairo_move_to (cr, 0, bar_y);
+				cairo_line_to (cr, bar_width, bar_y);
+				murrine_set_color_rgb (cr, &colors->shade[4]);
+				cairo_stroke (cr);
+
+				cairo_move_to (cr, 0, bar_y+1);
+				cairo_line_to (cr, bar_width, bar_y+1);
+				murrine_set_color_rgb (cr, &colors->shade[0]);
+				cairo_stroke (cr);
+
+				bar_y += 2;
+			}			
+			break;
+		}
 	}
 }
 
@@ -3330,6 +3512,7 @@ murrine_register_style_murrine (MurrineStyleFunctions *functions)
 	functions->draw_entry              = murrine_draw_entry;
 	functions->draw_entry_progress     = murrine_draw_entry_progress;
 	functions->draw_expander           = murrine_draw_expander;
+	functions->draw_slider             = murrine_draw_slider;
 	functions->draw_slider_handle      = murrine_draw_slider_handle;
 	functions->draw_spinbutton         = murrine_draw_spinbutton;
 	functions->draw_spinbutton_down    = murrine_draw_spinbutton_down;
diff --git a/src/murrine_draw_rgba.c b/src/murrine_draw_rgba.c
index 2803c84..15c91a7 100644
--- a/src/murrine_draw_rgba.c
+++ b/src/murrine_draw_rgba.c
@@ -437,6 +437,96 @@ murrine_rgba_draw_scale_trough (cairo_t *cr,
 }
 
 static void
+murrine_draw_slider_path (cairo_t *cr,
+                          int x, int y, int width, int height,
+                          int roundness)
+{
+	int radius = MIN (roundness, MIN (width/2.0, height/2.0));
+
+	cairo_move_to (cr, x+radius, y);
+	cairo_arc (cr, x+width-radius, y+radius, radius, M_PI*1.5, M_PI*2);
+	cairo_line_to (cr, x+width, y+height-width/2.0);
+	cairo_line_to (cr, x+width/2.0, y+height);
+	cairo_line_to (cr, x, y+height-width/2.0);
+	cairo_arc (cr, x+radius, y+radius, radius, M_PI, M_PI*1.5);
+}
+
+static void
+murrine_rgba_draw_slider (cairo_t *cr,
+                          const MurrineColors    *colors,
+                          const WidgetParameters *widget,
+                          const SliderParameters *slider,
+                          int x, int y, int width, int height)
+{
+	int os = (widget->xthickness > 2 && widget->ythickness > 2) ? 1 : 0;
+	double glow_shade_new = widget->glow_shade;
+	double highlight_shade_new = widget->highlight_shade;
+	double lightborder_shade_new = widget->lightborder_shade;
+	MurrineGradients mrn_gradient_new = widget->mrn_gradient;
+	MurrineRGB border = colors->shade[!widget->disabled ? 8 : 6];
+	MurrineRGB fill = colors->bg[widget->state_type];
+
+	murrine_get_fill_color (&fill, &mrn_gradient_new);
+
+	if (widget->disabled)
+	{
+		mrn_gradient_new = murrine_get_decreased_gradient_shades (widget->mrn_gradient, 3.0);
+		mrn_gradient_new.border_shades[0] = murrine_get_decreased_shade (widget->mrn_gradient.border_shades[0], 2.0);
+		mrn_gradient_new.border_shades[1] = murrine_get_decreased_shade (widget->mrn_gradient.border_shades[1], 2.0);
+		glow_shade_new = murrine_get_decreased_shade (widget->glow_shade, 2.0);
+		highlight_shade_new = murrine_get_decreased_shade (widget->highlight_shade, 2.0);
+		lightborder_shade_new = murrine_get_decreased_shade (widget->lightborder_shade, 2.0);
+	}
+	else
+		murrine_shade (&colors->shade[6], 0.95, &border);
+
+	if (!slider->horizontal)
+		murrine_exchange_axis (cr, &x, &y, &width, &height);
+
+	cairo_save (cr);
+	
+	cairo_translate (cr, x+0.5, y+0.5);
+
+	if (!widget->active && !widget->disabled && widget->reliefstyle > 1 && os > 0)
+	{
+		murrine_draw_slider_path (cr, os-1, os, width-(os*2)+2, height-(os*2)+1, widget->roundness+1);
+		murrine_draw_shadow_from_path (cr, &border,
+		                               os-1, os, width-(os*2)+2, height-(os*2)+1,
+		                               widget->reliefstyle,
+		                               mrn_gradient_new, 0.08);
+	}
+
+	murrine_mix_color (&border, &widget->parentbg, 0.2, &border);
+	murrine_mix_color (&border, &fill, 0.25, &border);
+
+	cairo_save (cr);
+
+	cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+
+	murrine_draw_slider_path (cr, os, os+1, width-(os*2), height-(os*2)-1, widget->roundness);
+	cairo_clip_preserve (cr);
+
+	murrine_draw_glaze (cr, &fill,
+	                    glow_shade_new, highlight_shade_new, !widget->active ? lightborder_shade_new : 1.0,
+	                    mrn_gradient_new, widget,
+	                    os, os+1, width-(os*2), height-(os*2)-1,
+	                    widget->roundness, widget->corners, TRUE);
+
+	cairo_restore (cr);
+	
+	murrine_draw_slider_path (cr, os, os+1, width-(os*2), height-(os*2)-1, widget->roundness);
+
+	murrine_draw_border_from_path (cr, &border,
+	                     os, os+1, width-(os*2), height-(os*2)-1,
+	                     mrn_gradient_new, 1.0);
+
+	cairo_restore (cr);
+	 
+	if (!slider->horizontal)
+		murrine_exchange_axis (cr, &x, &y, &width, &height);
+}
+
+static void
 murrine_rgba_draw_spinbutton (cairo_t *cr,
 	                          const MurrineColors    *colors,
 	                          const WidgetParameters *widget,
@@ -602,7 +692,7 @@ murrine_rgba_draw_progressbar_fill (cairo_t *cr,
 			rotate_mirror_translate (cr, M_PI/2, x, y+width, TRUE, FALSE);
 	}
 
-	roundness = MIN (widget->roundness, (height-2.0)/2.0);
+	roundness = MIN (widget->roundness-widget->xthickness, (height-2.0)/2.0);
 	stroke_width = height*2;
 	x_step = (((float)stroke_width/10)*offset);
 
@@ -1356,6 +1446,35 @@ murrine_rgba_draw_scrollbar_trough (cairo_t *cr,
 	/* Draw fill */
 	murrine_draw_trough (cr, &fill, 0, 0, width, height, widget->roundness, widget->corners, widget->mrn_gradient, 0.4, FALSE);
 
+	if (scrollbar->stepperstyle == 3)
+	{
+		uint8 corners;
+		MurrineRGB fill_stepper;
+		MurrineRGB border_stepper;
+
+		murrine_shade (&widget->parentbg, 1.02, &fill_stepper);
+		murrine_shade (&border, (widget->mrn_gradient.trough_shades[0]+widget->mrn_gradient.trough_shades[1])/2.0, &border_stepper);
+
+		cairo_save (cr);
+
+		murrine_rounded_rectangle_closed (cr, 0.5, 0.5, width-1, height-1, widget->roundness, widget->corners);
+		cairo_clip (cr);
+
+		corners = MRN_CORNER_BOTTOMLEFT | MRN_CORNER_BOTTOMRIGHT;
+		murrine_rounded_rectangle_inverted (cr, 0.5, 0.5, width-1, scrollbar->steppersize, widget->roundness, corners);
+		murrine_set_color_rgb (cr, &fill_stepper);
+		cairo_fill_preserve (cr);
+		murrine_draw_trough_border_from_path (cr, &border,0.5, 0.5, width-1, scrollbar->steppersize, widget->mrn_gradient, 1.0, FALSE);
+
+		corners = MRN_CORNER_TOPLEFT | MRN_CORNER_TOPRIGHT;
+		murrine_rounded_rectangle_inverted (cr, 0.5, height-scrollbar->steppersize-0.5, width-1, scrollbar->steppersize, widget->roundness, corners);
+		murrine_set_color_rgb (cr, &fill_stepper);
+		cairo_fill_preserve (cr);
+		murrine_draw_trough_border_from_path (cr, &border, 0.5, height-scrollbar->steppersize-0.5, width-1, scrollbar->steppersize, widget->mrn_gradient, 1.0, FALSE);
+
+		cairo_restore (cr);
+	}
+
 	/* Draw border */
 	if (!scrollbar->within_bevel)
 		murrine_draw_trough_border (cr, &border, 0.5, 0.5, width-1, height-1, widget->roundness, widget->corners, widget->mrn_gradient, 0.82, FALSE);
@@ -1432,7 +1551,7 @@ murrine_rgba_draw_scrollbar_slider (cairo_t *cr,
 
 	murrine_get_fill_color (&fill, &mrn_gradient_new);
 
-	if (scrollbar->stepperstyle != 1)
+	if (scrollbar->stepperstyle != 1 && scrollbar->stepperstyle != 3)
 	{
 		if (scrollbar->junction & MRN_JUNCTION_BEGIN)
 		{
@@ -1616,6 +1735,29 @@ murrine_rgba_draw_scrollbar_slider (cairo_t *cr,
 				}
 				break;
 			}
+			case 1:
+			{
+				MurrineRGB inset;
+				murrine_shade (&fill, 1.04, &inset);
+
+				bar_x++;
+
+				for (i=0; i<3; i++)
+				{
+					cairo_move_to (cr, bar_x, 5);
+					cairo_line_to (cr, bar_x, height-5);
+					murrine_set_color_rgb (cr, &border);
+					cairo_stroke (cr);
+
+					cairo_move_to (cr, bar_x+1, 5);
+					cairo_line_to (cr, bar_x+1, height-5);
+					murrine_set_color_rgb (cr, &inset);
+					cairo_stroke (cr);
+
+					bar_x += 2;
+				}
+				break;
+			}
 		}
 	}
 
@@ -1735,6 +1877,26 @@ murrine_rgba_draw_handle (cairo_t *cr,
 			}
 			break;
 		}
+		case 2:
+		{
+			bar_y++;
+
+			for (i=0; i<num_bars; i++)
+			{
+				cairo_move_to (cr, 0, bar_y);
+				cairo_line_to (cr, bar_width, bar_y);
+				murrine_set_color_rgb (cr, &colors->shade[5]);
+				cairo_stroke (cr);
+
+				cairo_move_to (cr, 0, bar_y+1);
+				cairo_line_to (cr, bar_width, bar_y+1);
+				murrine_set_color_rgb (cr, &colors->shade[0]);
+				cairo_stroke (cr);
+
+				bar_y += 2;
+			}
+			break;
+		}
 	}
 }
 
@@ -2115,6 +2277,7 @@ murrine_register_style_rgba (MurrineStyleFunctions *functions)
 	functions->draw_button             = murrine_rgba_draw_button;
 	functions->draw_entry              = murrine_rgba_draw_entry;
 	functions->draw_scale_trough       = murrine_rgba_draw_scale_trough;
+	functions->draw_slider             = murrine_rgba_draw_slider;
 	functions->draw_spinbutton         = murrine_rgba_draw_spinbutton;
 	functions->draw_progressbar_trough = murrine_rgba_draw_progressbar_trough;
 	functions->draw_progressbar_fill   = murrine_rgba_draw_progressbar_fill;
diff --git a/src/murrine_rc_style.c b/src/murrine_rc_style.c
index a50bdc6..4b491a0 100644
--- a/src/murrine_rc_style.c
+++ b/src/murrine_rc_style.c
@@ -76,7 +76,8 @@ enum
 	TOKEN_TEXTSTYLE,
 	TOKEN_TEXT_SHADE,
 	TOKEN_TOOLBARSTYLE,
-	TOKEN_TROUGH_SHADES,
+	TOKEN_TROUGH_BORDER_SHADES,
+	TOKEN_TROUGH_SHADES,	
 
 	TOKEN_TRUE,
 	TOKEN_FALSE,
@@ -140,6 +141,7 @@ theme_symbols[] =
 	{ "textstyle",           TOKEN_TEXTSTYLE },
 	{ "text_shade",          TOKEN_TEXT_SHADE },
 	{ "toolbarstyle",        TOKEN_TOOLBARSTYLE },
+	{ "trough_border_shades", TOKEN_TROUGH_BORDER_SHADES },
 	{ "trough_shades",       TOKEN_TROUGH_SHADES },
 
 	{ "TRUE",                TOKEN_TRUE },
@@ -214,6 +216,8 @@ murrine_rc_style_init (MurrineRcStyle *murrine_rc)
 	murrine_rc->textstyle = 0;
 	murrine_rc->text_shade = 1.06;
 	murrine_rc->toolbarstyle = 0;
+	murrine_rc->trough_border_shades[0] = 1.0;
+	murrine_rc->trough_border_shades[1] = 1.0;
 	murrine_rc->trough_shades[0] = 1.0;
 	murrine_rc->trough_shades[1] = 1.0;
 }
@@ -785,6 +789,10 @@ murrine_rc_style_parse (GtkRcStyle *rc_style,
 				token = theme_parse_int (settings, scanner, &murrine_style->toolbarstyle);
 				murrine_style->flags |= MRN_FLAG_TOOLBARSTYLE;
 				break;
+			case TOKEN_TROUGH_BORDER_SHADES:
+				token = theme_parse_border (settings, scanner, murrine_style->trough_border_shades);
+				murrine_style->gflags |= MRN_FLAG_TROUGH_BORDER_SHADES;
+				break;
 			case TOKEN_TROUGH_SHADES:
 				token = theme_parse_border (settings, scanner, murrine_style->trough_shades);
 				murrine_style->gflags |= MRN_FLAG_TROUGH_SHADES;
@@ -987,6 +995,11 @@ murrine_rc_style_merge (GtkRcStyle *dest,
 		dest_w->shadow_shades[0] = src_w->shadow_shades[0];
 		dest_w->shadow_shades[1] = src_w->shadow_shades[1];
 	}
+	if (gflags & MRN_FLAG_TROUGH_BORDER_SHADES)
+	{
+		dest_w->trough_border_shades[0] = src_w->trough_border_shades[0];
+		dest_w->trough_border_shades[1] = src_w->trough_border_shades[1];
+	}
 	if (gflags & MRN_FLAG_TROUGH_SHADES)
 	{
 		dest_w->trough_shades[0] = src_w->trough_shades[0];
diff --git a/src/murrine_rc_style.h b/src/murrine_rc_style.h
index ff570d2..8e3d7a8 100644
--- a/src/murrine_rc_style.h
+++ b/src/murrine_rc_style.h
@@ -84,7 +84,8 @@ typedef enum
 	MRN_FLAG_GRADIENT_COLORS = 1 << 3,
 	MRN_FLAG_GRADIENT_SHADES = 1 << 4,
 	MRN_FLAG_SHADOW_SHADES = 1 << 5,
-	MRN_FLAG_TROUGH_SHADES = 1 << 6
+	MRN_FLAG_TROUGH_BORDER_SHADES = 1 << 6,
+	MRN_FLAG_TROUGH_SHADES = 1 << 7
 } MurrineRcGradientFlags;
 
 struct _MurrineRcStyle
@@ -104,6 +105,7 @@ struct _MurrineRcStyle
 	double   prelight_shade;
 	double   shadow_shades[2];
 	double   text_shade;
+	double   trough_border_shades[2];
 	double   trough_shades[2];
 
 	guint8   arrowstyle;
diff --git a/src/murrine_style.c b/src/murrine_style.c
index 578c1b3..fe3f901 100644
--- a/src/murrine_style.c
+++ b/src/murrine_style.c
@@ -197,6 +197,8 @@ murrine_set_widget_parameters (const GtkWidget  *widget,
 
 	mrn_gradient.shadow_shades[0] = murrine_style->shadow_shades[0];
 	mrn_gradient.shadow_shades[1] = murrine_style->shadow_shades[1];
+	mrn_gradient.trough_border_shades[0] = murrine_style->trough_border_shades[0];
+	mrn_gradient.trough_border_shades[1] = murrine_style->trough_border_shades[1];
 	mrn_gradient.trough_shades[0] = murrine_style->trough_shades[0];
 	mrn_gradient.trough_shades[1] = murrine_style->trough_shades[1];
 
@@ -208,6 +210,8 @@ murrine_set_widget_parameters (const GtkWidget  *widget,
 	    murrine_style->gradient_shades[3] != 1.0 ||
 	    murrine_style->shadow_shades[0] != 1.0 ||
 	    murrine_style->shadow_shades[1] != 1.0 ||
+	    murrine_style->trough_border_shades[0] != 1.0 ||
+	    murrine_style->trough_border_shades[1] != 1.0 ||
 	    murrine_style->trough_shades[0] != 1.0 ||
 	    murrine_style->trough_shades[1] != 1.0)
 		mrn_gradient.gradients = TRUE;
@@ -1087,6 +1091,7 @@ murrine_style_draw_box (DRAW_ARGS)
 		scrollbar.steppers     = murrine_scrollbar_visible_steppers (widget);
 		scrollbar.stepperstyle = murrine_style->stepperstyle;
 		scrollbar.within_bevel = within_bevel;
+		gtk_widget_style_get (widget, "stepper-size", &scrollbar.steppersize, NULL);
 
 		murrine_set_widget_parameters (widget, style, state_type, &params);
 
@@ -1096,7 +1101,7 @@ murrine_style_draw_box (DRAW_ARGS)
 		if (MRN_IS_RANGE (widget))
 			scrollbar.horizontal = GTK_RANGE (widget)->orientation == GTK_ORIENTATION_HORIZONTAL;
 
-		if (murrine_style->stepperstyle != 1 && !params.mrn_gradient.use_rgba)
+		if (murrine_style->stepperstyle != 1 && murrine_style->stepperstyle != 3 && !params.mrn_gradient.use_rgba)
 		{
 			if (scrollbar.horizontal)
 			{
@@ -1295,7 +1300,7 @@ murrine_style_draw_box (DRAW_ARGS)
 	else if (DETAIL ("hscale") || DETAIL ("vscale"))
 	{
 		WidgetParameters params;
-		/* SliderParameters slider; */
+		SliderParameters slider; 
 		ButtonParameters button;
 
 		murrine_set_widget_parameters (widget, style, state_type, &params);
@@ -1307,16 +1312,24 @@ murrine_style_draw_box (DRAW_ARGS)
 		 * if (DETAIL ("vscale"))
 		 *	horizontal = FALSE;
 		 */
+
+		slider.horizontal = TRUE;
+		if (DETAIL ("vscale"))
+			slider.horizontal = FALSE;
+
 		if (height > width)
 			horizontal = !horizontal;
 
 		/* Use reliefstyle to remove inset on disabled slider button */
 		if (params.disabled)
 			params.reliefstyle = 0;
+		
+		if (murrine_style->sliderstyle <= 1)
+			STYLE_FUNCTION(draw_button) (cr, &murrine_style->colors, &params, &button, x, y, width, height, horizontal);
+		else
+			STYLE_FUNCTION(draw_slider) (cr, &murrine_style->colors, &params, &slider, x, y, width-1, height-1);
 
-		STYLE_FUNCTION(draw_button) (cr, &murrine_style->colors, &params, &button, x, y, width, height, horizontal);
-
-		if (murrine_style->sliderstyle == 1)
+		if (murrine_style->sliderstyle == 1 || murrine_style->sliderstyle == 3)
 		{
 			HandleParameters handle;
 			handle.style = murrine_style->handlestyle;
@@ -1398,6 +1411,7 @@ murrine_style_draw_box (DRAW_ARGS)
 		scrollbar.style          = murrine_style->scrollbarstyle;
 		scrollbar.stepperstyle   = murrine_style->stepperstyle;
 		scrollbar.prelight_shade = murrine_style->prelight_shade;
+		gtk_widget_style_get (widget, "stepper-size", &scrollbar.steppersize, NULL);
 
 		if (MRN_IS_RANGE (widget))
 			scrollbar.horizontal = GTK_RANGE (widget)->orientation == GTK_ORIENTATION_HORIZONTAL;
@@ -1426,6 +1440,7 @@ murrine_style_draw_box (DRAW_ARGS)
 			if (trough_border > 0 ||
 			    trough_under_steppers == 0 ||
 			    scrollbar.stepperstyle == 2 ||
+			    scrollbar.stepperstyle == 3 ||
 			    murrine_style->roundness == 1)
 				params.corners = MRN_CORNER_ALL;
 			else
@@ -1471,7 +1486,7 @@ murrine_style_draw_box (DRAW_ARGS)
 			if (scrollbar.stepperstyle == 2)
 				params.corners = MRN_CORNER_NONE;
 
-			if (murrine_style->stepperstyle != 1)
+			if (scrollbar.stepperstyle != 1 && scrollbar.stepperstyle != 3)
 				STYLE_FUNCTION(draw_scrollbar_stepper) (cr, colors, &params, &scrollbar, x, y, width, height);
 		}
 	}
@@ -1914,29 +1929,50 @@ murrine_style_draw_arrow (GtkStyle     *style,
 		}
 		else if (DETAIL ("hscrollbar") || DETAIL ("vscrollbar"))
 		{
+			int steppersize;
+			gtk_widget_style_get (widget, "stepper-size", &steppersize, NULL);	
 
-			if (arrow.direction == MRN_DIRECTION_DOWN)
-				y++;
-			else if (arrow.direction == MRN_DIRECTION_RIGHT)
-				x++;
-
-			if (arrow.direction == MRN_DIRECTION_UP || arrow.direction == MRN_DIRECTION_DOWN)
+			switch (arrow.direction)
 			{
-				x = x + width / 2 - 2;
-				y = y + height / 2 - 2;
-				height = 4; width = 5;
-			}
-			else
-			{
-				x = x + width / 2 - 2;
-				y = y + height / 2 - 2;
-				height = 5; width = 4;
+				case MRN_DIRECTION_UP:
+					x += width/2 - 2;
+					y += height/2 - steppersize % 2 == 0 ? 2 : 1;
+					height = 4; width = 5;
+					break;
+				case MRN_DIRECTION_DOWN:
+					x += width/2 - 2;
+					y += height/2 - 1;
+					height = 4; width = 5;
+					break;
+				case MRN_DIRECTION_LEFT:
+					x += width/2 - steppersize % 2 == 0 ? 2 : 1;
+					y += height/2 - 2;
+					height = 5; width = 4;
+					break;
+				case MRN_DIRECTION_RIGHT:
+					x += width/2 - 1;
+					y += height/2 - 2;
+					height = 5; width = 4;
+					break;
 			}
 			
 			if (arrow.style == 2)
-			{
-				x--; y--;
-				height += 2; width += 2;
+			{	
+				switch (arrow.direction)
+				{
+					case MRN_DIRECTION_UP:
+						y+=steppersize % 2 == 0 ? 1 : 2;
+						break;
+					case MRN_DIRECTION_DOWN:
+						y-=2;
+						break;
+					case MRN_DIRECTION_LEFT:
+						x+=steppersize % 2 == 0 ? 1 : 2;;
+						break;
+					case MRN_DIRECTION_RIGHT:
+						x--;
+						break;
+				}
 			}
 		}
 		else if (DETAIL ("spinbutton"))
@@ -2383,6 +2419,8 @@ murrine_style_init_from_rc (GtkStyle   *style,
 	                                                        MURRINE_RC_STYLE (rc_style)->contrast);
 	murrine_style->shadow_shades[0]   = MURRINE_RC_STYLE (rc_style)->shadow_shades[0];
 	murrine_style->shadow_shades[1]   = MURRINE_RC_STYLE (rc_style)->shadow_shades[1];
+	murrine_style->trough_border_shades[0] = MURRINE_RC_STYLE (rc_style)->trough_border_shades[0];
+	murrine_style->trough_border_shades[1] = MURRINE_RC_STYLE (rc_style)->trough_border_shades[1];
 	murrine_style->trough_shades[0]   = MURRINE_RC_STYLE (rc_style)->trough_shades[0];
 	murrine_style->trough_shades[1]   = MURRINE_RC_STYLE (rc_style)->trough_shades[1];
 
@@ -2585,6 +2623,8 @@ murrine_style_copy (GtkStyle *style, GtkStyle *src)
 	mrn_style->textstyle           = mrn_src->textstyle;
 	mrn_style->text_shade          = mrn_src->text_shade;
 	mrn_style->toolbarstyle        = mrn_src->toolbarstyle;
+	mrn_style->trough_border_shades[0] = mrn_src->trough_border_shades[0];
+	mrn_style->trough_border_shades[1] = mrn_src->trough_border_shades[1];
 	mrn_style->trough_shades[0]    = mrn_src->trough_shades[0];
 	mrn_style->trough_shades[1]    = mrn_src->trough_shades[1];
 
diff --git a/src/murrine_style.h b/src/murrine_style.h
index 1fc0752..33ae51c 100644
--- a/src/murrine_style.h
+++ b/src/murrine_style.h
@@ -51,6 +51,7 @@ struct _MurrineStyle
 	double   prelight_shade;
 	double   shadow_shades[2];
 	double   text_shade;
+	double   trough_border_shades[2];
 	double   trough_shades[2];
 
 	guint8   arrowstyle;
diff --git a/src/murrine_types.h b/src/murrine_types.h
index 7661358..9147715 100644
--- a/src/murrine_types.h
+++ b/src/murrine_types.h
@@ -186,6 +186,7 @@ typedef struct
 	double  border_shades[2];
 	double  gradient_shades[4];
 	double  shadow_shades[2];
+	double  trough_border_shades[2];
 	double  trough_shades[2];
 	double  rgba_opacity;
 
@@ -315,6 +316,7 @@ typedef struct
 	boolean         within_bevel;
 	int             handlestyle;
 	int             style;
+	int             steppersize;
 	int             stepperstyle;
 	double          prelight_shade;
 } ScrollBarParameters;
@@ -412,6 +414,12 @@ struct _MurrineStyleFunctions
 	                           const SliderParameters *slider,
 	                           int x, int y, int width, int height);
 
+	void (*draw_slider) (cairo_t *cr,
+	                     const MurrineColors    *colors,
+	                     const WidgetParameters *widget,
+	                     const SliderParameters *slider,
+	                     int x, int y, int width, int height);
+
 	void (*draw_slider_handle) (cairo_t *cr,
 	                            const MurrineColors    *colors,
 	                            const WidgetParameters *widget,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]