void TrillSegment::symbolLine(SymId start, SymId fill, SymId end) { qreal x1 = 0; qreal x2 = pos2().x(); qreal w = x2 - x1; qreal mag = magS(); ScoreFont* f = score()->scoreFont(); _symbols.clear(); _symbols.append(f->toString(start)); _symbols.append(f->toString(end)); qreal w1 = f->bbox(start, mag).width(); qreal w2 = f->width(fill, mag); qreal w3 = f->width(end, mag); int n = lrint((w - w1 - w3) / w2); for (int i = 0; i < n; ++i) _symbols.insert(1, f->toString(fill)); QRectF r(f->bbox(_symbols, mag)); setbbox(r); }
void VibratoSegment::symbolLine(SymId start, SymId fill, SymId end) { qreal x1 = 0; qreal x2 = pos2().x(); qreal w = x2 - x1; qreal mag = magS(); ScoreFont* f = score()->scoreFont(); _symbols.clear(); _symbols.push_back(start); qreal w1 = f->bbox(start, mag).width(); qreal w2 = f->width(fill, mag); qreal w3 = f->width(end, mag); int n = lrint((w - w1 - w3) / w2); for (int i = 0; i < n; ++i) _symbols.push_back(fill); _symbols.push_back(end); QRectF r(f->bbox(_symbols, mag)); setbbox(r); }
void Arpeggio::symbolLine(SymId end, SymId fill) { qreal y1 = -_userLen1; qreal y2 = _height + _userLen2; qreal w = y2 - y1; qreal mag = magS(); ScoreFont* f = score()->scoreFont(); const QString& fillString = f->toString(fill); symbols.clear(); symbols.append(f->toString(end)); qreal w1 = f->bbox(end, mag).width(); qreal w2 = f->width(fill, mag); int n = lrint((w - w1) / w2); for (int i = 0; i < n; ++i) symbols.prepend(fillString); }