small change to region creation for make-mono-regions; add untested short_path(); fix double-redraws when canvas zoom/position changes
git-svn-id: svn://localhost/ardour2/trunk@1396 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
433f2cfb43
commit
9e8082aad6
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
dir=`dirname "$0"`
|
||||
. $dir/ardev_common.sh
|
||||
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
|
||||
exec gdb $EXECUTABLE $*
|
||||
|
@ -1,3 +1,4 @@
|
||||
#!/bin/sh
|
||||
. `dirname "$0"`/ardev_common.sh
|
||||
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
|
||||
exec $EXECUTABLE $*
|
||||
|
@ -1071,7 +1071,7 @@ Editor::connect_to_session (Session *t)
|
||||
|
||||
session_connections.push_back (session->SMPTEOffsetChanged.connect (mem_fun(*this, &Editor::update_just_smpte)));
|
||||
|
||||
session_connections.push_back (session->tempo_map().StateChanged.connect (mem_fun(*this, &Editor::tempo_map_changed)));
|
||||
session_connections.push_back (session->tempo_map().StateChanged.connect (bind (mem_fun(*this, &Editor::tempo_map_changed), false)));
|
||||
|
||||
edit_groups_changed ();
|
||||
|
||||
@ -3625,7 +3625,8 @@ Editor::canvas_horizontally_scrolled ()
|
||||
{
|
||||
/* this is the core function that controls horizontal scrolling of the canvas. it is called
|
||||
whenever the horizontal_adjustment emits its "value_changed" signal. it executes in an
|
||||
idle handler.
|
||||
idle handler, which is important because tempo_map_changed() should issue redraws immediately
|
||||
and not defer them to an idle handler.
|
||||
*/
|
||||
|
||||
leftmost_frame = (nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
@ -3637,7 +3638,7 @@ Editor::canvas_horizontally_scrolled ()
|
||||
}
|
||||
|
||||
update_fixed_rulers ();
|
||||
tempo_map_changed (Change (0));
|
||||
tempo_map_changed (Change (0), true);
|
||||
}
|
||||
|
||||
void
|
||||
@ -3686,7 +3687,7 @@ Editor::idle_visual_changer ()
|
||||
/* the signal handler will do the rest */
|
||||
} else {
|
||||
update_fixed_rulers();
|
||||
tempo_map_changed (Change (0));
|
||||
tempo_map_changed (Change (0), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1174,7 +1174,7 @@ class Editor : public PublicEditor
|
||||
Gtk::Allocation canvas_allocation;
|
||||
bool canvas_idle_queued;
|
||||
void track_canvas_allocate (Gtk::Allocation alloc);
|
||||
bool track_canvas_idle ();
|
||||
bool track_canvas_size_allocated ();
|
||||
|
||||
void set_edit_cursor (GdkEvent* event);
|
||||
void set_playhead_cursor (GdkEvent* event);
|
||||
@ -1275,7 +1275,7 @@ class Editor : public PublicEditor
|
||||
void remove_metric_marks ();
|
||||
void draw_metric_marks (const ARDOUR::Metrics& metrics);
|
||||
|
||||
void tempo_map_changed (ARDOUR::Change);
|
||||
void tempo_map_changed (ARDOUR::Change, bool immediate_redraw);
|
||||
void redisplay_tempo ();
|
||||
|
||||
void snap_to (nframes_t& first, int32_t direction = 0, bool for_mark = false);
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "sfdb_ui.h"
|
||||
#include "editing.h"
|
||||
#include "audio_time_axis.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
@ -315,7 +316,8 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
|
||||
choices.push_back (_("Embed all without questions"));
|
||||
|
||||
Gtkmm2ext::Choice rate_choice (
|
||||
string_compose (_("%1\nThis audiofile's sample rate doesn't match the session sample rate!"), path),
|
||||
string_compose (_("%1\nThis audiofile's sample rate doesn't match the session sample rate!"),
|
||||
short_path (path, 40)),
|
||||
choices, false);
|
||||
|
||||
int resx = rate_choice.run ();
|
||||
|
@ -280,7 +280,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
||||
if (!initial_ruler_update_required) {
|
||||
if (!canvas_idle_queued) {
|
||||
/* call this first so that we do stuff before any pending redraw */
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_idle), false);
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_size_allocated), false);
|
||||
canvas_idle_queued = true;
|
||||
}
|
||||
return;
|
||||
@ -288,11 +288,11 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
||||
|
||||
initial_ruler_update_required = false;
|
||||
|
||||
track_canvas_idle ();
|
||||
track_canvas_size_allocated ();
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_idle ()
|
||||
Editor::track_canvas_size_allocated ()
|
||||
{
|
||||
if (canvas_idle_queued) {
|
||||
canvas_idle_queued = false;
|
||||
@ -321,7 +321,6 @@ Editor::track_canvas_idle ()
|
||||
full_canvas_height = height;
|
||||
}
|
||||
|
||||
|
||||
zoom_range_clock.set ((nframes_t) floor ((canvas_width * frames_per_unit)));
|
||||
edit_cursor->set_position (edit_cursor->current_frame);
|
||||
playhead_cursor->set_position (playhead_cursor->current_frame);
|
||||
@ -363,7 +362,7 @@ Editor::track_canvas_idle ()
|
||||
}
|
||||
|
||||
update_fixed_rulers();
|
||||
tempo_map_changed (Change (0));
|
||||
tempo_map_changed (Change (0), true);
|
||||
|
||||
Resized (); /* EMIT_SIGNAL */
|
||||
|
||||
|
@ -705,7 +705,7 @@ Editor::update_ruler_visibility ()
|
||||
|
||||
update_fixed_rulers();
|
||||
//update_tempo_based_rulers();
|
||||
tempo_map_changed(Change (0));
|
||||
tempo_map_changed(Change (0), false);
|
||||
|
||||
time_canvas_event_box.show_all();
|
||||
time_button_event_box.show_all();
|
||||
|
@ -94,13 +94,13 @@ Editor::draw_metric_marks (const Metrics& metrics)
|
||||
}
|
||||
|
||||
void
|
||||
Editor::tempo_map_changed (Change ignored)
|
||||
Editor::tempo_map_changed (Change ignored, bool immediate_redraw)
|
||||
{
|
||||
if (!session) {
|
||||
return;
|
||||
}
|
||||
|
||||
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::tempo_map_changed), ignored));
|
||||
ENSURE_GUI_THREAD(bind (mem_fun (*this, &Editor::tempo_map_changed), ignored, immediate_redraw));
|
||||
|
||||
BBT_Time previous_beat, next_beat; // the beats previous to the leftmost frame and after the rightmost frame
|
||||
|
||||
@ -135,18 +135,27 @@ Editor::tempo_map_changed (Change ignored)
|
||||
current_bbt_points = 0;
|
||||
}
|
||||
|
||||
redisplay_tempo ();
|
||||
if (immediate_redraw) {
|
||||
|
||||
hide_measures ();
|
||||
|
||||
if (session && current_bbt_points) {
|
||||
draw_measures ();
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (session && current_bbt_points) {
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::lazy_hide_and_draw_measures));
|
||||
} else {
|
||||
hide_measures ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::redisplay_tempo ()
|
||||
{
|
||||
|
||||
if (session && current_bbt_points) {
|
||||
Glib::signal_idle().connect (mem_fun (*this, &Editor::lazy_hide_and_draw_measures));
|
||||
} else {
|
||||
hide_measures ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -547,3 +547,35 @@ key_is_legal_for_numeric_entry (guint keyval)
|
||||
return false;
|
||||
}
|
||||
|
||||
ustring
|
||||
short_path (ustring path, uint32_t target_characters)
|
||||
{
|
||||
ustring::size_type slash;
|
||||
ustring::size_type len = path.length();
|
||||
|
||||
if (len <= target_characters) {
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
slash = path.find_last_of ('/');
|
||||
|
||||
if (len - slash > target_characters) {
|
||||
/* even the filename itself is too long, so just return it - its
|
||||
the best we can do
|
||||
*/
|
||||
return path.substr (slash);
|
||||
}
|
||||
|
||||
uint32_t so_far = (len - slash) + 4; // allow for .../
|
||||
uint32_t space_for = target_characters - so_far;
|
||||
|
||||
if (slash < target_characters) {
|
||||
return path;
|
||||
}
|
||||
|
||||
string res = ".../";
|
||||
res += path.substr (slash - space_for);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -81,5 +81,6 @@ static std::map<std::string, Glib::RefPtr<Gdk::Pixbuf> > xpm_map;
|
||||
const char* const *get_xpm_data (std::string path);
|
||||
std::string longest (std::vector<std::string>&);
|
||||
bool key_is_legal_for_numeric_entry (guint keyval);
|
||||
Glib::ustring short_path (Glib::ustring, uint32_t target_characters);
|
||||
|
||||
#endif /* __ardour_gtk_utils_h__ */
|
||||
|
@ -1051,10 +1051,15 @@ AudioRegion::separate_by_channel (Session& session, vector<boost::shared_ptr<Aud
|
||||
new_name += ('0' + n + 1);
|
||||
}
|
||||
|
||||
/* create a copy with just one source */
|
||||
/* create a copy with just one source. prevent if from being thought of as "whole file" even if
|
||||
it covers the entire source file(s).
|
||||
*/
|
||||
|
||||
boost::shared_ptr<Region> r = RegionFactory::create (srcs, _start, _length, new_name, _layer, _flags);
|
||||
Flag f = Flag (_flags & ~WholeFile);
|
||||
|
||||
boost::shared_ptr<Region> r = RegionFactory::create (srcs, _start, _length, new_name, _layer, f);
|
||||
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (r);
|
||||
cerr << "new region name is " << ar->name() << endl;
|
||||
|
||||
v.push_back (ar);
|
||||
|
||||
|
@ -50,8 +50,6 @@ SndFileSource::SndFileSource (Session& s, const XMLNode& node)
|
||||
{
|
||||
init ();
|
||||
|
||||
cerr << "SndFileSource @ " << _path << " channel = " << channel << endl;
|
||||
|
||||
if (open()) {
|
||||
throw failed_constructor ();
|
||||
}
|
||||
|
@ -39,4 +39,10 @@ PBD::stacktrace (std::ostream& out, int levels)
|
||||
out << "stack tracing is not enabled on this platform" << std::endl;
|
||||
}
|
||||
|
||||
void
|
||||
c_stacktrace ()
|
||||
{
|
||||
PBD::stacktrace (cout);
|
||||
}
|
||||
|
||||
#endif /* HAVE_EXECINFO */
|
||||
|
Loading…
Reference in New Issue
Block a user