Prompt the user for confirmation before removing an export format.
[ardour.git] / libs / gtkmm2ext / barcontroller.cc
index b499b993423df512c9cff0af02c539e3fc3b3b22..50c21e57e7016ca5de2c786d304ff54cdb8d9b7c 100644 (file)
@@ -79,13 +79,20 @@ BarController::BarController (Gtk::Adjustment& adj,
        spinner.signal_focus_out_event().connect (mem_fun (*this, &BarController::entry_focus_out));
        spinner.signal_input().connect (mem_fun (*this, &BarController::entry_input));
        spinner.signal_output().connect (mem_fun (*this, &BarController::entry_output));
-       spinner.set_digits (3);
+       spinner.set_digits (9);
        spinner.set_numeric (true);
-
+       
        add (darea);
+
        show_all ();
 }
 
+BarController::~BarController ()
+{
+//     delete pattern;
+//     delete shine_pattern;
+}
+
 void
 BarController::drop_grab ()
 {
@@ -263,17 +270,53 @@ BarController::mouse_control (double x, GdkWindow* window, double scaling)
        return TRUE;
 }
 
+void
+BarController::create_patterns ()
+{
+       Glib::RefPtr<Gdk::Window> win (darea.get_window());
+    Cairo::RefPtr<Cairo::Context> context = win->create_cairo_context();
+
+       Gdk::Color c = get_style()->get_fg (get_state());
+    float r, g, b;
+       r = c.get_red_p ();
+       g = c.get_green_p ();
+       b = c.get_blue_p ();
+
+       float rheight = darea.get_height()-2;
+
+       cairo_pattern_t* pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, rheight);
+       cairo_pattern_add_color_stop_rgba (pat, 0, r*0.8,g*0.8,b*0.8, 1.0);
+       cairo_pattern_add_color_stop_rgba (pat, 1, r*0.6,g*0.6,b*0.6, 1.0);
+       Cairo::RefPtr<Cairo::Pattern> p (new Cairo::Pattern (pat, false));
+       pattern = p;
+       cairo_pattern_destroy(pat);
+
+       pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, rheight);
+       cairo_pattern_add_color_stop_rgba (pat, 0, 1,1,1,0.0);
+       cairo_pattern_add_color_stop_rgba (pat, 0.2, 1,1,1,0.3);
+       cairo_pattern_add_color_stop_rgba (pat, 0.5, 1,1,1,0.0);
+       cairo_pattern_add_color_stop_rgba (pat, 1, 1,1,1,0.0);
+       Cairo::RefPtr<Cairo::Pattern> p2 (new Cairo::Pattern (pat, false));
+       shine_pattern = p2;
+       cairo_pattern_destroy(pat);
+
+}
+
 bool
 BarController::expose (GdkEventExpose* /*event*/)
 {
        Glib::RefPtr<Gdk::Window> win (darea.get_window());
-        Cairo::RefPtr<Cairo::Context> context = win->create_cairo_context();
-        Gdk::Color c;
+       Cairo::RefPtr<Cairo::Context> context = win->create_cairo_context();
+
+       if( !pattern )
+               create_patterns();
+
+       Gdk::Color c;
        Widget* parent;
-       gint x1=0, x2=0, y1=0, y2=0;
+       gint x1=0, x2=0, y2=0;
        gint w, h;
-       double fract;
-        float r, g, b;
+       double fract, radius;
+    float r, g, b;
 
        fract = ((adjustment.get_value() - adjustment.get_lower()) /
                 (adjustment.get_upper() - adjustment.get_lower()));
@@ -284,7 +327,6 @@ BarController::expose (GdkEventExpose* /*event*/)
                h = darea.get_height();
                x1 = (gint) floor (w * fract);
                x2 = x1;
-               y1 = 0;
                y2 = h - 1;
 
                if (use_parent) {
@@ -396,41 +438,26 @@ BarController::expose (GdkEventExpose* /*event*/)
                w = darea.get_width() - 2;
                h = darea.get_height() - 2;
 
-               x1 = 0;
                x2 = (gint) floor (w * fract);
-               y1 = 0;
                y2 = h;
+               radius = 4;
+               if (x2 < 8) x2 = 8;
 
-                /* bounding box */
+               /* border */
 
-                c = get_style()->get_bg (get_state());
-                r = c.get_red_p ();
-                g = c.get_green_p ();
-                b = c.get_blue_p ();
-                context->set_source_rgb (r, g, b);
-                rounded_rectangle (context, 0, 0, darea.get_width(), darea.get_height());
-                context->stroke ();
+               context->set_source_rgb (0,0,0);
+               cairo_rectangle (context->cobj(), 0, 0, darea.get_width(), darea.get_height());
+               context->fill ();
 
                /* draw active box */
 
-                c = get_style()->get_fg (get_state());
-                r = c.get_red_p ();
-                g = c.get_green_p ();
-                b = c.get_blue_p ();
-                context->set_source_rgb (r, g, b);
-                rounded_rectangle (context, 1 + x1, 1 + y1, x2, y2);
-                context->fill ();
-
-               /* draw inactive box */
-
-                c = get_style()->get_fg (STATE_INSENSITIVE);
-                r = c.get_red_p ();
-                g = c.get_green_p ();
-                b = c.get_blue_p ();
-                context->set_source_rgb (r, g, b);
-                rounded_rectangle (context, 1 + x2, 1 + y1, w - x2, y2);
-                context->fill ();
+               context->set_source (pattern);
+               rounded_rectangle (context, 1, 1, x2, y2, radius-1.5);
+               context->fill ();
 
+//             context->set_source (shine_pattern);
+//             rounded_rectangle (context, 2, 3, x2-2, y2-8, radius-2);
+//             context->fill ();
                break;
 
        case RightToLeft: