un-triple-buffer fastmeter (not finished), fix mixer strip name button, comment edito...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 6 Dec 2005 16:21:06 +0000 (16:21 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 6 Dec 2005 16:21:06 +0000 (16:21 +0000)
git-svn-id: svn://localhost/trunk/ardour2@175 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/mixer_strip.cc
gtk2_ardour/mixer_strip.h
gtk2_ardour/route_ui.cc
libs/gtkmm2ext/bindable_button.cc
libs/gtkmm2ext/fastmeter.cc
libs/gtkmm2ext/gtkmm2ext/bindable_button.h
libs/gtkmm2ext/popup.cc

index 0329c6e80007ae3894afbb2c72cbf779e8c873d4..a005d3637ec85965825769eb1c6a60e3ec3729fa 100644 (file)
@@ -144,6 +144,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, Route& rt, bool in_mixer)
        ignore_toggle = false;
        ignore_speed_adjustment = false;
        comment_window = 0;
+       comment_area = 0;
 
        width_button.add (*(manage (new Gtk::Image (Gdk::Pixbuf::create_from_xpm_data(lr_xpm)))));
        hide_button.add (*(manage (new Gtk::Image (Gdk::Pixbuf::create_from_xpm_data(small_x_xpm)))));
@@ -1113,32 +1114,48 @@ MixerStrip::comment_button_clicked ()
 
        if (comment_window->is_visible()) {
                comment_window->hide ();
-       } else {
-               comment_window->set_position (Gtk::WIN_POS_MOUSE);
-               comment_window->show_all ();
+               return;
+       } 
+
+       comment_window->set_position (Gtk::WIN_POS_MOUSE);
+       comment_window->show_all ();
+       comment_window->present();
+       
+       ResponseType response = (ResponseType) comment_window->run();
+       comment_window->hide ();
+
+       switch (response) {
+       case RESPONSE_ACCEPT:
+               break;
+       default:
+               return;
        }
+
+       string str =  comment_area->get_buffer()->get_text();
+       _route.set_comment (str, this);
+       ARDOUR_UI::instance()->tooltips().set_tip (comment_button, 
+                                                  str.empty() ? _("click to add/edit comments") : str);
 }
 
 void
 MixerStrip::setup_comment_editor ()
 {
-       comment_window = new Window (WINDOW_TOPLEVEL);
+       string title;
+       title = _route.name();
+       title += _(": comment editor");
 
-       string str;
-       str = _route.name();
-       str += _(": comment editor");
-       comment_window->set_title (str);
+       comment_window = new ArdourDialog (title, false);
+       comment_area = manage (new TextView());
 
-       comment_area.set_name ("MixerTrackCommentArea");
-       comment_area.set_editable (true);
-       // GTK2FIX
-       // comment_area.changed.connect (mem_fun(*this, &MixerStrip::comment_edited));
-       // GTK2FIX
-       // comment_area.signal_button_release_event().connect_after (ptr_fun (do_not_propagate));
-       comment_area.show ();
+       comment_area->set_name ("MixerTrackCommentArea");
+       comment_area->set_editable (true);
+       comment_area->get_buffer()->set_text (_route.comment());
+       comment_area->set_size_request (200,100);
+       comment_area->show ();
 
-       comment_window->add (comment_area);
-       comment_window->signal_delete_event().connect (bind (ptr_fun (just_hide_it), comment_window));
+       comment_window->get_vbox()->pack_start (*comment_area);
+       comment_window->add_button (Stock::CANCEL, RESPONSE_CANCEL);
+       comment_window->add_button (Stock::OK, RESPONSE_ACCEPT);
 }
 
 void
@@ -1148,28 +1165,13 @@ MixerStrip::comment_changed (void *src)
        
        if (src != this) {
                ignore_comment_edit = true;
-               // comment_area.freeze ();
-               //comment_area.get_buffer()->delete_text (0, -1);
-               //comment_area.set_point (0);
-               comment_area.get_buffer()->set_text (_route.comment());
-               // comment_area.thaw ();
+               if (comment_area) {
+                       comment_area->get_buffer()->set_text (_route.comment());
+               }
                ignore_comment_edit = false;
        }
 }
 
-void
-MixerStrip::comment_edited ()
-{
-       ENSURE_GUI_THREAD(mem_fun(*this, &MixerStrip::comment_edited));
-       
-       if (!ignore_comment_edit) {
-               string str =  comment_area.get_buffer()->get_text();
-               _route.set_comment (str, this);
-               ARDOUR_UI::instance()->tooltips().set_tip (comment_button, 
-                                                          str.empty() ? _("click to add/edit comments") : str);
-       }
-}
-
 void
 MixerStrip::set_mix_group (RouteGroup *rg)
 
@@ -1251,13 +1253,10 @@ MixerStrip::route_gui_changed (string what_changed, void* ignored)
 void
 MixerStrip::show_route_color ()
 {
-       Glib::RefPtr<Gtk::Style> style;
-
        name_button.ensure_style ();
-       style = name_button.get_style()->copy();
+       Glib::RefPtr<Gtk::Style> style = name_button.get_style()->copy();
        style->set_bg (Gtk::STATE_NORMAL, color());
        name_button.set_style (style);
-       style->unreference();
 
        route_active_changed ();
 }
index e5ea5b6cf3fdb536c384d63d8307f72845938b53..8b69e26379488b8cf13b3718f9b7c828e0c8abdc 100644 (file)
@@ -55,6 +55,7 @@
 #include "panner_ui.h"
 #include "enums.h"
 #include "redirect_box.h"
+#include "ardour_dialog.h"
 
 class MotionController;
 
@@ -152,9 +153,9 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
        
        Gtk::Button   name_button;
 
-       Gtk::Window*  comment_window;
-       Gtk::TextView comment_area;
-       Gtk::Button   comment_button;
+       ArdourDialog*  comment_window;
+       Gtk::TextView* comment_area;
+       Gtk::Button    comment_button;
 
        void setup_comment_editor ();
        void comment_button_clicked ();
index 68f6622e35d19a672e13753047aef05e110b41ba..daf5fcba69b6e180b9ebff08331b380e52e3c2b7 100644 (file)
@@ -157,7 +157,7 @@ RouteUI::mute_press(GdkEventButton* ev)
 
        }
 
-       return stop_signal (*mute_button, "button-press-event");
+       return true;
 }
 
 gint
@@ -169,10 +169,9 @@ RouteUI::mute_release(GdkEventButton* ev)
                        // undo the last op
                        // because the press was the last undoable thing we did
                        _session.undo (1U);
-                       stop_signal (*mute_button, "button-release-event");
                }
        }
-       return TRUE;
+       return true;
 }
 
 gint
index c2516a9219b1ca8fc6c8aab8e3c4f70123f89c92..fcc6093361e954ab47f6e41a75049ea493dfe96c 100644 (file)
@@ -56,8 +56,6 @@ BindableToggleButton::BindableToggleButton(MIDI::Controllable *mc, const string
 void
 BindableToggleButton::init_events ()
 {
-       signal_button_press_event().connect (mem_fun (*this, &BindableToggleButton::button_press));
-
        prompter.signal_unmap_event().connect (mem_fun (*this, &BindableToggleButton::prompter_hiding));
        
        prompting = false;
@@ -92,20 +90,18 @@ BindableToggleButton::midi_learn()
        }
 }
 
-
-gint
-BindableToggleButton::button_press (GdkEventButton *ev)
+bool
+BindableToggleButton::on_button_press_event (GdkEventButton *ev)
 {
-       
        if ((ev->state & bind_statemask) && ev->button == bind_button) { 
                midi_learn ();
-               return TRUE;
+               return true;
        }
-
-       return FALSE;
+       
+       return false;
 }
 
-gint
+bool
 BindableToggleButton::prompter_hiding (GdkEventAny *ev)
 {
        if (unprompting) {
@@ -115,7 +111,7 @@ BindableToggleButton::prompter_hiding (GdkEventAny *ev)
                unprompting = false;
        }
        
-       return FALSE;
+       return false;
 }
 
 
index 86310a94732c48c78b4f87d69f0797ae33c1d56b..240ed5f0dbcbd05f330cae9b2ae03ad31542433f 100644 (file)
@@ -49,7 +49,7 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o)
        current_user_level = -100.0f;
        
        set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
-       
+
        pixrect.set_x(0);
        pixrect.set_y(0);
 
@@ -137,20 +137,6 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
        bool intersecting = false;
 
        top_of_meter = (gint) floor (v_pixheight * current_level);
-       pixrect.set_height(v_pixheight - top_of_meter); /* bottom of background */
-
-       if (backing == 0) {
-               backing = Gdk::Pixmap::create (get_window(), get_width(), get_height());
-       }
-
-       intersect = pixrect.intersect(Glib::wrap(&ev->area), intersecting);
-       if (intersecting) {     
-
-               /* paint the background (black). */
-               backing->draw_rectangle(get_style()->get_black_gc(), true, intersect.get_x(), intersect.get_y(), intersect.get_width(), intersect.get_height()); 
-               blit = true;
-       }
-       
        pixrect.set_height(top_of_meter);
 
         intersect = pixrect.intersect(Glib::wrap(&ev->area), intersecting);
@@ -158,10 +144,11 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
                /* draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom)
                 */
 
-               backing->draw_drawable(get_style()->get_fg_gc(get_state()), v_pixmap, 
-                                      intersect.get_x(), v_pixheight - top_of_meter,
-                                      intersect.get_x(), v_pixheight - top_of_meter,
-                                      intersect.get_width(), intersect.get_height());
+               Glib::RefPtr<Gdk::Window> win(get_window());
+               win->draw_drawable(get_style()->get_fg_gc(get_state()), v_pixmap, 
+                                  intersect.get_x(), v_pixheight - top_of_meter,
+                                  intersect.get_x(), v_pixheight - top_of_meter,
+                                  intersect.get_width(), intersect.get_height());
                
                blit = true;
        }
@@ -169,20 +156,11 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
        /* draw peak bar */
                
        if (hold_state) {
-               backing->draw_drawable(get_style()->get_fg_gc(get_state()), v_pixmap,
-                                      intersect.get_x(), v_pixheight - (gint) floor (v_pixheight * current_peak),
-                                      intersect.get_x(), v_pixheight - (gint) floor (v_pixheight * current_peak),
-                                      intersect.get_width(), 3);
-       }
-
-       /* bilt to on-screen drawable */
-
-       if (blit) {
-               Glib::RefPtr<Gdk::Window> win (get_window());
-               win->draw_drawable(get_style()->get_fg_gc(get_state()), backing,
-                                  ev->area.x, ev->area.y,
-                                  ev->area.x, ev->area.y,
-                                  ev->area.width, ev->area.height);
+               Glib::RefPtr<Gdk::Window> win(get_window());
+               win->draw_drawable(get_style()->get_fg_gc(get_state()), v_pixmap,
+                                  intersect.get_x(), v_pixheight - (gint) floor (v_pixheight * current_peak),
+                                  intersect.get_x(), v_pixheight - (gint) floor (v_pixheight * current_peak),
+                                  intersect.get_width(), 3);
        }
 
        return true;
@@ -194,29 +172,8 @@ FastMeter::horizontal_expose (GdkEventExpose* ev)
        Gdk::Rectangle intersect;
        bool intersecting = false;
        gint right_of_meter;
-       bool blit = false;
 
        right_of_meter = (gint) floor (h_pixwidth * current_level);
-
-       pixrect.set_x(right_of_meter);
-       pixrect.set_y(0);
-       pixrect.set_width(h_pixwidth - right_of_meter); 
-       
-       if (backing == 0) {
-               backing = Gdk::Pixmap::create(get_window(), get_width(), get_height());
-       }
-
-       intersect = pixrect.intersect(Glib::wrap(&ev->area), intersecting);
-       if (intersecting) {
-               /* paint the background (black). */
-               
-               backing->draw_rectangle(get_style()->get_black_gc(), true,
-                                       intersect.get_x(), intersect.get_y(),
-                                       intersect.get_width(), intersect.get_height());
-               blit = true;
-       }
-       
-       pixrect.set_x(0);
        pixrect.set_width(right_of_meter);
 
        intersect = pixrect.intersect(Glib::wrap(&ev->area), intersecting);
@@ -224,31 +181,21 @@ FastMeter::horizontal_expose (GdkEventExpose* ev)
                /* draw the part of the meter image that we need. 
                 */
 
-               backing->draw_drawable(get_style()->get_fg_gc(get_state()), h_pixmap,
-                                      intersect.get_x(), intersect.get_y(),
-                                      intersect.get_x(), intersect.get_y(),
-                                      intersect.get_width(), intersect.get_height());
-               
-               blit = true;
+               Glib::RefPtr<Gdk::Window> win(get_window());
+               win->draw_drawable(get_style()->get_fg_gc(get_state()), h_pixmap,
+                                  intersect.get_x(), intersect.get_y(),
+                                  intersect.get_x(), intersect.get_y(),
+                                  intersect.get_width(), intersect.get_height());
        }
 
        /* draw peak bar */
                
        if (hold_state) {
-               backing->draw_drawable(get_style()->get_fg_gc(get_state()), h_pixmap,
-                                      right_of_meter, intersect.get_y(),
-                                      right_of_meter, intersect.get_y(),
-                                      3, intersect.get_height());
-       }
-
-       /* bilt to on-screen drawable */
-
-       if (blit) {
                Glib::RefPtr<Gdk::Window> win(get_window());
-               win->draw_drawable(get_style()->get_fg_gc(get_state()), backing,
-                               ev->area.x, ev->area.y,
-                               ev->area.x, ev->area.y,
-                               ev->area.width, ev->area.height);
+               win->draw_drawable(get_style()->get_fg_gc(get_state()), h_pixmap,
+                             right_of_meter, intersect.get_y(),
+                             right_of_meter, intersect.get_y(),
+                             3, intersect.get_height());
        }
 
        return true;
index 1e460b3790d17164a22b17772a4fec2cb0db0b27..11f5ab45e7c70d8250059db33968001e585a001a 100644 (file)
@@ -64,12 +64,11 @@ class BindableToggleButton : public Gtk::ToggleButton
        bool prompting, unprompting;
        
        void init_events ();
-       gint button_press (GdkEventButton *);
-       gint prompter_hiding (GdkEventAny *);
+       bool prompter_hiding (GdkEventAny *);
        void midicontrol_prompt ();
        void midicontrol_unprompt ();
        
-
+       bool on_button_press_event (GdkEventButton *);
 };
 
 };
index 2c93d39e0dcff5c622526c64372449021e7bbf0c..0a48ebfc594ce551cb85e1b84b3ed6aeb05549ba 100644 (file)
@@ -30,7 +30,6 @@ using namespace Gtkmm2ext;
 PopUp::PopUp (Gtk::WindowPosition pos, unsigned int showfor_msecs, bool doh)
        : Window (WINDOW_POPUP)
 {
-
        add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
        signal_button_press_event().connect(mem_fun(*this,&PopUp::button_click));
        set_border_width (12);