mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
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
4 changed files with 29 additions and 9 deletions
|
|
@ -55,19 +55,19 @@ GridLines::hide ()
|
||||||
void
|
void
|
||||||
GridLines::draw (std::vector<Ruler::Mark> const & marks)
|
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 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 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");
|
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);
|
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);
|
lines.add_coord (PublicEditor::instance().sample_to_pixel_unrounded (s), 1.0, minor_color);
|
||||||
} else {
|
} else {
|
||||||
lines.add_coord (PublicEditor::instance().sample_to_pixel_unrounded (s), 1.0, micro_color);
|
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;
|
double prev_y = .5;
|
||||||
uint32_t color;
|
uint32_t color;
|
||||||
|
|
||||||
_note_lines->clear();
|
ArdourCanvas::LineSet::ResetRAII lr (*_note_lines);
|
||||||
|
|
||||||
if (child_height() < 140 || note_height() < 3) {
|
if (child_height() < 140 || note_height() < 3) {
|
||||||
/* track is too small for note lines, or there are too many */
|
/* track is too small for note lines, or there are too many */
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,15 @@ public:
|
||||||
void set_extent (Distance);
|
void set_extent (Distance);
|
||||||
Distance extent() const { return _extent; }
|
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 add_coord (Coord, Distance, Gtkmm2ext::Color);
|
||||||
void clear ();
|
void clear ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,12 +131,23 @@ LineSet::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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 ();
|
begin_change ();
|
||||||
|
}
|
||||||
|
|
||||||
_lines.push_back (Line (y, width, color));
|
void
|
||||||
sort (_lines.begin(), _lines.end(), LineSorter());
|
LineSet::end_add ()
|
||||||
|
{
|
||||||
|
if (!_lines.empty()) {
|
||||||
|
sort (_lines.begin(), _lines.end(), LineSorter());
|
||||||
|
}
|
||||||
|
|
||||||
set_bbox_dirty ();
|
set_bbox_dirty ();
|
||||||
end_change ();
|
end_change ();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue