mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
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
This commit is contained in:
parent
f04aa5e49a
commit
dd455c894a
7 changed files with 73 additions and 133 deletions
|
|
@ -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 ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
};
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue