diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2005-12-06 16:21:06 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2005-12-06 16:21:06 +0000 |
commit | dd455c894aed80a4aa73e4fa186d0b8419c105c8 (patch) | |
tree | a7bf0d965f53c921026a8b682b3aa43a5cf592b3 | |
parent | f04aa5e49a1633f6cf39b8bb1872725332370b52 (diff) |
un-triple-buffer fastmeter (not finished), fix mixer strip name button, comment editor, +++
git-svn-id: svn://localhost/trunk/ardour2@175 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 77 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.h | 7 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 5 | ||||
-rw-r--r-- | libs/gtkmm2ext/bindable_button.cc | 18 | ||||
-rw-r--r-- | libs/gtkmm2ext/fastmeter.cc | 93 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/bindable_button.h | 5 | ||||
-rw-r--r-- | libs/gtkmm2ext/popup.cc | 1 |
7 files changed, 73 insertions, 133 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 0329c6e800..a005d3637e 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -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,29 +1165,14 @@ 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 (); } diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index e5ea5b6cf3..8b69e26379 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -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 (); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 68f6622e35..daf5fcba69 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -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 diff --git a/libs/gtkmm2ext/bindable_button.cc b/libs/gtkmm2ext/bindable_button.cc index c2516a9219..fcc6093361 100644 --- a/libs/gtkmm2ext/bindable_button.cc +++ b/libs/gtkmm2ext/bindable_button.cc @@ -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; } diff --git a/libs/gtkmm2ext/fastmeter.cc b/libs/gtkmm2ext/fastmeter.cc index 86310a9473..240ed5f0db 100644 --- a/libs/gtkmm2ext/fastmeter.cc +++ b/libs/gtkmm2ext/fastmeter.cc @@ -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; diff --git a/libs/gtkmm2ext/gtkmm2ext/bindable_button.h b/libs/gtkmm2ext/gtkmm2ext/bindable_button.h index 1e460b3790..11f5ab45e7 100644 --- a/libs/gtkmm2ext/gtkmm2ext/bindable_button.h +++ b/libs/gtkmm2ext/gtkmm2ext/bindable_button.h @@ -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 *); }; }; diff --git a/libs/gtkmm2ext/popup.cc b/libs/gtkmm2ext/popup.cc index 2c93d39e0d..0a48ebfc59 100644 --- a/libs/gtkmm2ext/popup.cc +++ b/libs/gtkmm2ext/popup.cc @@ -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); |