do not sort lineset every time a coord is added; use RAII to create scope and sort at end
This commit is contained in:
parent
d4bca18108
commit
4f87506e5c
|
@ -55,19 +55,19 @@ GridLines::hide ()
|
|||
void
|
||||
GridLines::draw (std::vector<Ruler::Mark> const & marks)
|
||||
{
|
||||
lines.clear();
|
||||
LineSet::ResetRAII lr (lines);
|
||||
|
||||
const uint32_t major_color = UIConfiguration::instance().color_mod("grid line major", "grid line");
|
||||
const uint32_t minor_color = UIConfiguration::instance().color_mod("grid line minor", "grid line");
|
||||
const uint32_t micro_color = UIConfiguration::instance().color_mod("grid line micro", "grid line");
|
||||
|
||||
for (vector<Ruler::Mark>::const_iterator m = marks.begin(); m != marks.end(); ++m) {
|
||||
for (auto const & m : marks) {
|
||||
|
||||
samplepos_t s = m->position;
|
||||
samplepos_t s = m.position;
|
||||
|
||||
if ((*m).style == ArdourCanvas::Ruler::Mark::Major) {
|
||||
if (m.style == ArdourCanvas::Ruler::Mark::Major) {
|
||||
lines.add_coord (PublicEditor::instance().sample_to_pixel_unrounded (s), 1.0, major_color);
|
||||
} else if ((*m).style == ArdourCanvas::Ruler::Mark::Minor) {
|
||||
} else if (m.style == ArdourCanvas::Ruler::Mark::Minor) {
|
||||
lines.add_coord (PublicEditor::instance().sample_to_pixel_unrounded (s), 1.0, minor_color);
|
||||
} else {
|
||||
lines.add_coord (PublicEditor::instance().sample_to_pixel_unrounded (s), 1.0, micro_color);
|
||||
|
|
|
@ -339,7 +339,7 @@ MidiStreamView::draw_note_lines()
|
|||
double prev_y = .5;
|
||||
uint32_t color;
|
||||
|
||||
_note_lines->clear();
|
||||
ArdourCanvas::LineSet::ResetRAII lr (*_note_lines);
|
||||
|
||||
if (child_height() < 140 || note_height() < 3) {
|
||||
/* track is too small for note lines, or there are too many */
|
||||
|
|
|
@ -47,6 +47,15 @@ public:
|
|||
void set_extent (Distance);
|
||||
Distance extent() const { return _extent; }
|
||||
|
||||
void begin_add ();
|
||||
void end_add ();
|
||||
|
||||
struct ResetRAII {
|
||||
ResetRAII (LineSet& l) : lines (l) { lines.clear(); lines.begin_add(); }
|
||||
~ResetRAII () { lines.end_add (); }
|
||||
LineSet& lines;
|
||||
};
|
||||
|
||||
void add_coord (Coord, Distance, Gtkmm2ext::Color);
|
||||
void clear ();
|
||||
|
||||
|
|
|
@ -131,12 +131,23 @@ LineSet::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
|
|||
}
|
||||
|
||||
void
|
||||
LineSet::add_coord (Coord y, Distance width, Gtkmm2ext::Color color)
|
||||
LineSet::add_coord (Coord pos, Distance width, Gtkmm2ext::Color color)
|
||||
{
|
||||
_lines.push_back (Line (pos, width, color));
|
||||
}
|
||||
|
||||
void
|
||||
LineSet::begin_add ()
|
||||
{
|
||||
begin_change ();
|
||||
}
|
||||
|
||||
_lines.push_back (Line (y, width, color));
|
||||
sort (_lines.begin(), _lines.end(), LineSorter());
|
||||
void
|
||||
LineSet::end_add ()
|
||||
{
|
||||
if (!_lines.empty()) {
|
||||
sort (_lines.begin(), _lines.end(), LineSorter());
|
||||
}
|
||||
|
||||
set_bbox_dirty ();
|
||||
end_change ();
|
||||
|
|
Loading…
Reference in New Issue