summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2005-12-06 16:21:06 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2005-12-06 16:21:06 +0000
commitdd455c894aed80a4aa73e4fa186d0b8419c105c8 (patch)
treea7bf0d965f53c921026a8b682b3aa43a5cf592b3
parentf04aa5e49a1633f6cf39b8bb1872725332370b52 (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.cc77
-rw-r--r--gtk2_ardour/mixer_strip.h7
-rw-r--r--gtk2_ardour/route_ui.cc5
-rw-r--r--libs/gtkmm2ext/bindable_button.cc18
-rw-r--r--libs/gtkmm2ext/fastmeter.cc93
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/bindable_button.h5
-rw-r--r--libs/gtkmm2ext/popup.cc1
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);