void BarLine::layout() { qreal y1, y2; getY(&y1, &y2); qreal _spatium = spatium(); qreal dw = layoutWidth(score(), barLineType(), magS()); QRectF r(0.0, y1, dw, y2-y1); if (score()->styleB(ST_repeatBarTips)) { qreal mags = magS(); int si = score()->symIdx(); switch (barLineType()) { case START_REPEAT: r |= symbols[si][brackettipsRightUp].bbox(mags).translated(0, y1); r |= symbols[si][brackettipsRightDown].bbox(mags).translated(0, y2); break; case END_REPEAT: r |= symbols[si][brackettipsLeftUp].bbox(mags).translated(0, y1); r |= symbols[si][brackettipsLeftDown].bbox(mags).translated(0, y2); break; case END_START_REPEAT: { qreal lw = point(score()->styleS(ST_barWidth)); qreal lw2 = point(score()->styleS(ST_endBarWidth)); qreal d1 = point(score()->styleS(ST_endBarDistance)); const Sym& dotsym = symbols[score()->symIdx()][dotSym]; qreal dotw = dotsym.width(mags); qreal x = dotw + 2 * d1 + lw + lw2 * .5; // thick bar r |= symbols[si][brackettipsRightUp].bbox(mags).translated(x, y1); r |= symbols[si][brackettipsRightDown].bbox(mags).translated(x, y2); r |= symbols[si][brackettipsLeftUp].bbox(mags).translated(x, y1); r |= symbols[si][brackettipsLeftDown].bbox(mags).translated(x, y2); } break; default: break; } } foreach(Element* e, _el) { e->layout(); if (e->type() == ARTICULATION) { Articulation* a = static_cast<Articulation*>(e); MScore::Direction dir = a->direction(); qreal distance = 0.5 * _spatium; qreal x = width() * .5; if (dir == MScore::DOWN) { qreal botY = y2 + distance; a->setPos(QPointF(x, botY)); } else { qreal topY = y1 - distance; a->setPos(QPointF(x, topY)); } } }
void TrillSegment::layout() { QRectF b1(symbols[score()->symIdx()][trillSym].bbox(magS())); QRectF rr(b1.translated(-b1.x(), 0.0)); rr |= QRectF(0.0, rr.y(), pos2().x(), rr.height()); setbbox(rr); }
void TrillSegment::draw(Painter* painter) const { qreal mag = magS(); int idx = score()->symIdx(); qreal w2 = symbols[idx][trillelementSym].width(mag); QRectF b2(symbols[idx][trillelementSym].bbox(mag)); if (spannerSegmentType() == SEGMENT_SINGLE || spannerSegmentType() == SEGMENT_BEGIN) { QRectF b1(symbols[idx][trillSym].bbox(mag)); QRectF b2(symbols[idx][trillelementSym].bbox(mag)); qreal x0 = -b1.x(); qreal x1 = x0 + b1.width(); qreal x2 = pos2().x(); int n = int(floor((x2-x1) / w2)); symbols[idx][trillSym].draw(painter, mag, x0, 0.0); symbols[idx][trillelementSym].draw(painter, mag, x1, b2.y() * .9, n); if (trill()->accidental()) { painter->save(); painter->translate(trill()->accidental()->pagePos()); trill()->accidental()->draw(painter); painter->restore(); } } else { qreal x1 = 0.0; qreal x2 = pos2().x(); int n = int(floor((x2-x1) / w2)); symbols[idx][trillelementSym].draw(painter, mag, x1, b2.y() * .9, n); } }
void BarLine::drawDots(QPainter* painter, qreal x) const { const Sym& dotsym = symbols[score()->symIdx()][dotSym]; qreal mags = magS(); qreal _spatium = spatium(); if (parent() == 0) { // for use in palette dotsym.draw(painter, mags, QPointF(x, 1.5 * _spatium)); dotsym.draw(painter, mags, QPointF(x, 2.5 * _spatium)); } else { System* s = measure()->system(); int _staffIdx = staffIdx(); qreal dy = s->staff(_staffIdx)->y(); for (int i = 0; i < _span; ++i) { Staff* staff = score()->staff(_staffIdx + i); StaffType* st = staff->staffType(); qreal doty1 = st->doty1() * _spatium; qreal doty2 = st->doty2() * _spatium; qreal staffy = s->staff(_staffIdx + i)->y() - dy; dotsym.draw(painter, mags, QPointF(x, staffy + doty1)); dotsym.draw(painter, mags, QPointF(x, staffy + doty2)); } } }
void Accidental::layout() { el.clear(); QRectF r; Note* note = static_cast<Note*>(parent()); if ( note == 0 || !note->staff()->useTablature() ) { //in TAB, accidentals are not shown qreal m = magS(); QPointF pos; if (_hasBracket) { SymElement e(leftparenSym, 0.0); el.append(e); r |= symbols[score()->symIdx()][leftparenSym].bbox(m); pos = symbols[score()->symIdx()][leftparenSym].attach(m); } int s = symbol(); SymElement e(s, pos.x()); el.append(e); r |= symbols[score()->symIdx()][s].bbox(m); pos += symbols[score()->symIdx()][s].attach(m); if (_hasBracket) { qreal x = pos.x(); // symbols[s].width(m) + symbols[s].bbox(m).x(); SymElement e(rightparenSym, x); el.append(e); r |= symbols[score()->symIdx()][rightparenSym].bbox(m).translated(x, 0.0); } } setbbox(r); }
void Symbol::draw(QPainter* p) const { if (type() != NOTEDOT || !staff()->isTabStaff()) { p->setPen(curColor()); symbols[score()->symIdx()][_sym].draw(p, magS()); } }
void BarLine::drawDots(QPainter* painter, qreal x) const { const Sym& dotsym = symbols[score()->symIdx()][dotSym]; qreal mags = magS(); qreal _spatium = spatium(); if (parent() == 0) { // for use in palette dotsym.draw(painter, mags, QPointF(x, 1.5 * _spatium)); dotsym.draw(painter, mags, QPointF(x, 2.5 * _spatium)); } else if (parent()->type() == SEGMENT) { System* s = static_cast<Segment*>(parent())->measure()->system(); int staffIdx1 = staffIdx(); int staffIdx2 = staffIdx1 + _span - 1; int sp = _span; if (staffIdx2 >= score()->nstaves()) { qDebug("BarLine: bad _span %d", _span); staffIdx2 = score()->nstaves() - 1; sp = staffIdx2 - staffIdx1 + 1; } qreal dy = s->staff(staffIdx1)->y(); for (int i = 0; i < sp; ++i) { Staff* staff = score()->staff(staffIdx1 + i); StaffType* st = staff->staffType(); qreal doty1 = st->doty1() * _spatium; qreal doty2 = st->doty2() * _spatium; qreal staffy = s->staff(staffIdx1 + i)->y() - dy; dotsym.draw(painter, mags, QPointF(x, staffy + doty1)); dotsym.draw(painter, mags, QPointF(x, staffy + doty2)); } } }
void Accidental::layout() { el.clear(); QRectF r; if (staff() && staff()->isTabStaff()) { //in TAB, accidentals are not shown setbbox(QRectF()); return; } qreal m = magS(); if (_small) m *= score()->styleD(ST_smallNoteMag); QPointF pos; if (_hasBracket) { SymElement e(leftparenSym, 0.0); el.append(e); r |= symbols[score()->symIdx()][leftparenSym].bbox(m); pos = symbols[score()->symIdx()][leftparenSym].attach(m); } int s = symbol(); SymElement e(s, pos.x()); el.append(e); r |= symbols[score()->symIdx()][s].bbox(m); pos += symbols[score()->symIdx()][s].attach(m); if (_hasBracket) { qreal x = pos.x(); // symbols[s].width(m) + symbols[s].bbox(m).x(); SymElement e(rightparenSym, x); el.append(e); r |= symbols[score()->symIdx()][rightparenSym].bbox(m).translated(x, 0.0); } setbbox(r); }
void NoteDot::draw(QPainter* p) const { if (!staff()->useTablature()) { p->setPen(curColor()); symbols[score()->symIdx()][dotSym].draw(p, magS()); } }
void Accidental::layout() { el.clear(); qreal m = magS(); QRectF r; QPointF pos; if (_hasBracket) { SymElement e(leftparenSym, 0.0); el.append(e); r |= symbols[score()->symIdx()][leftparenSym].bbox(m); pos = symbols[score()->symIdx()][leftparenSym].attach(m); } int s = symbol(); SymElement e(s, pos.x()); el.append(e); r |= symbols[score()->symIdx()][s].bbox(m); pos += symbols[score()->symIdx()][s].attach(m); if (_hasBracket) { qreal x = pos.x(); // symbols[s].width(m) + symbols[s].bbox(m).x(); SymElement e(rightparenSym, x); el.append(e); r |= symbols[score()->symIdx()][rightparenSym].bbox(m).translated(x, 0.0); } setbbox(r); }
void Stem::draw(QPainter* painter) const { bool useTab = false; Staff* st = staff(); if (st && st->isTabStaff()) { // stems used in palette do not have a staff if (st->staffType()->slashStyle()) return; useTab = true; } qreal lw = point(score()->styleS(ST_stemWidth)); painter->setPen(QPen(curColor(), lw, Qt::SolidLine, Qt::RoundCap)); painter->drawLine(line); // NOT THE BEST PLACE FOR THIS? // with tablatures, dots are not drawn near 'notes', but near stems // TODO: adjust bounding rectangle in layout() if (useTab) { int nDots = chord()->dots(); if (nDots > 0) { qreal sp = spatium(); qreal y = stemLen() - ( ((StaffTypeTablature*)st->staffType())->stemsDown() ? (STAFFTYPE_TAB_DEFAULTSTEMLEN_DN - 0.75) * sp : 0.0 ); symbols[score()->symIdx()][dotSym].draw(painter, magS(), QPointF(STAFFTYPE_TAB_DEFAULTDOTDIST_X * sp, y), nDots); } } }
void Symbol::layout() { foreach(Element* e, leafs()) e->layout(); ElementLayout::layout(this); BSymbol::layout(); setbbox(_scoreFont ? _scoreFont->bbox(_sym, magS()) : symBbox(_sym)); }
void Accidental::draw(QPainter* painter) const { if (staff() && staff()->isTabStaff()) //in TAB, accidentals are not shown return; painter->setPen(curColor()); foreach(const SymElement& e, el) score()->scoreFont()->draw(e.sym, painter, magS(), QPointF(e.x, 0.0)); }
void Accidental::draw(Painter* painter) const { qreal m = magS(); if (_small) m *= score()->styleD(ST_smallNoteMag); foreach(const SymElement& e, el) symbols[score()->symIdx()][e.sym].draw(painter, m, e.x, 0.0); }
void TrillSegment::layout() { QRectF b1(symbols[score()->symIdx()][trillSym].bbox(magS())); QRectF rr(b1.translated(-b1.x(), 0.0)); rr |= QRectF(0.0, rr.y(), pos2().x(), rr.height()); setbbox(rr); rypos() += score()->styleS(ST_trillY).val() * spatium(); adjustReadPos(); }
void dynLagrangianCsBound::correct(const tmp<volTensorField>& gradU) { LESModel::correct(gradU); volSymmTensorField S(dev(symm(gradU()))); volScalarField magS(mag(S)); volVectorField Uf(filter_(U())); volSymmTensorField Sf(dev(symm(fvc::grad(Uf)))); volScalarField magSf(mag(Sf)); volSymmTensorField L(dev(filter_(sqr(U())) - (sqr(filter_(U()))))); volSymmTensorField M(2.0*sqr(delta())*(filter_(magS*S) - 4.0*magSf*Sf)); volScalarField invT ( (1.0/(theta_.value()*delta()))*pow(flm_*fmm_, 1.0/8.0) ); volScalarField LM(L && M); fvScalarMatrix flmEqn ( fvm::ddt(flm_) + fvm::div(phi(), flm_) == invT*LM - fvm::Sp(invT, flm_) ); flmEqn.relax(); flmEqn.solve(); bound(flm_, flm0_); volScalarField MM(M && M); fvScalarMatrix fmmEqn ( fvm::ddt(fmm_) + fvm::div(phi(), fmm_) == invT*MM - fvm::Sp(invT, fmm_) ); fmmEqn.relax(); fmmEqn.solve(); bound(fmm_, fmm0_); updateSubGridScaleFields(gradU); }
void Symbol::draw(QPainter* p) const { if (!isNoteDot() || !staff()->isTabStaff(tick())) { p->setPen(curColor()); if (_scoreFont) _scoreFont->draw(_sym, p, magS(), QPointF()); else drawSymbol(_sym, p); } }
void Symbol::draw(QPainter* p) const { if (type() != NOTEDOT || !staff()->isTabStaff()) { p->setPen(curColor()); if (_scoreFont) _scoreFont->draw(_sym, p, magS(), QPointF()); else drawSymbol(_sym, p); } }
void Rest::draw(QPainter* painter) const { if ( (staff() && staff()->isTabStaff() // in tab staff, do not draw rests is rests are off OR if dur. symbols are on && ( !((StaffTypeTablature*)staff()->staffType())->showRests() || ((StaffTypeTablature*)staff()->staffType())->genDurations()) ) || generated()) return; qreal _spatium = spatium(); painter->setPen(curColor()); if (parent() && measure() && measure()->multiMeasure()) { Measure* m = measure(); int n = m->multiMeasure(); qreal pw = _spatium * .7; QPen pen(painter->pen()); pen.setWidthF(pw); painter->setPen(pen); qreal w = _mmWidth; qreal y = _spatium; qreal x1 = 0.0; qreal x2 = w; pw *= .5; painter->drawLine(QLineF(x1 + pw, y, x2 - pw, y)); // draw vertical lines: pen.setWidthF(_spatium * .2); painter->setPen(pen); painter->drawLine(QLineF(x1, y-_spatium, x1, y+_spatium)); painter->drawLine(QLineF(x2, y-_spatium, x2, y+_spatium)); QFont font(fontId2font(0)); painter->setFont(font); QFontMetricsF fm(font); y = -_spatium * .5 - fm.ascent(); painter->drawText(QRectF(center(x1, x2), y, .0, .0), Qt::AlignHCenter|Qt::TextDontClip, QString("%1").arg(n)); } else { qreal mag = magS(); symbols[score()->symIdx()][_sym].draw(painter, mag); int dots = durationType().dots(); if (dots) { qreal y = dotline * _spatium * .5; for (int i = 1; i <= dots; ++i) { qreal x = symbols[score()->symIdx()][_sym].width(mag) + point(score()->styleS(ST_dotNoteDistance)) * i; symbols[score()->symIdx()][dotSym].draw(painter, mag, QPointF(x, y)); } } } }
void Stem::draw(QPainter* painter) const { Staff* st = staff(); bool useTab = st && st->isTabStaff(); if (useTab && st->staffType()->slashStyle()) return; qreal lw = lineWidth(); painter->setPen(QPen(curColor(), lw, Qt::SolidLine, Qt::RoundCap)); painter->drawLine(line); if (!useTab) return; // TODO: adjust bounding rectangle in layout() for dots and for slash StaffTypeTablature* stt = static_cast<StaffTypeTablature*>(st->staffType()); qreal sp = spatium(); // slashed half note stem if (chord() && chord()->durationType().type() == TDuration::V_HALF && stt->minimStyle() == TAB_MINIM_SLASHED) { qreal wdt = sp * STAFFTYPE_TAB_SLASH_WIDTH; qreal sln = sp * STAFFTYPE_TAB_SLASH_SLANTY; qreal thk = sp * STAFFTYPE_TAB_SLASH_THICK; qreal displ = sp * STAFFTYPE_TAB_SLASH_DISPL; QPainterPath path; qreal y = stt->stemsDown() ? _len - STAFFTYPE_TAB_SLASH_2STARTY_DN*sp : -_len + STAFFTYPE_TAB_SLASH_2STARTY_UP*sp; for (int i = 0; i < 2; ++i) { path.moveTo( wdt*0.5-lw, y); // top-right corner path.lineTo( wdt*0.5-lw, y+thk); // bottom-right corner path.lineTo(-wdt*0.5, y+thk+sln);// bottom-left corner path.lineTo(-wdt*0.5, y+sln); // top-left corner path.closeSubpath(); y += displ; } // setbbox(path.boundingRect()); painter->setBrush(QBrush(curColor())); painter->setPen(Qt::NoPen); painter->drawPath(path); } // dots // NOT THE BEST PLACE FOR THIS? // with tablatures, dots are not drawn near 'notes', but near stems int nDots = chord()->dots(); if (nDots > 0) { qreal y = stemLen() - (stt->stemsDown() ? (STAFFTYPE_TAB_DEFAULTSTEMLEN_DN - 0.75) * sp : 0.0 ); symbols[score()->symIdx()][dotSym].draw(painter, magS(), QPointF(STAFFTYPE_TAB_DEFAULTDOTDIST_X * sp, y), nDots); } }
void Accidental::draw(QPainter* painter) const { Note* note = static_cast<Note*>(parent()); if ( note == 0 || !note->staff()->useTablature() ) { //in TAB, accidentals are not shown qreal m = magS(); if (_small) m *= score()->styleD(ST_smallNoteMag); painter->setPen(curColor()); foreach(const SymElement& e, el) symbols[score()->symIdx()][e.sym].draw(painter, m, QPointF(e.x, 0.0)); }
void Accidental::draw(QPainter* painter) const { // don't show accidentals for tab or slash notation if ((staff() && staff()->isTabStaff()) || (note() && note()->fixed())) { return; } painter->setPen(curColor()); foreach(const SymElement& e, el) score()->scoreFont()->draw(e.sym, painter, magS(), QPointF(e.x, 0.0)); }
void TrillSegment::layout() { QRectF b1(symbols[score()->symIdx()][trillSym].bbox(magS())); QRectF rr(b1.translated(-b1.x(), 0.0)); rr |= QRectF(0.0, rr.y(), pos2().x(), rr.height()); if (subtype() == SEGMENT_SINGLE || subtype() == SEGMENT_BEGIN) { if (trill()->accidental()) { rr |= trill()->accidental()->bbox().translated(trill()->accidental()->pos()); } } setbbox(rr); }
void Accidental::draw(QPainter* painter) const { if (staff() && staff()->isTabStaff()) //in TAB, accidentals are not shown return; qreal m = magS(); if (_small) m *= score()->styleD(ST_smallNoteMag); painter->setPen(curColor()); foreach(const SymElement& e, el) symbols[score()->symIdx()][e.sym].draw(painter, m, QPointF(e.x, 0.0)); }
void KeySig::layout() { qreal _spatium = spatium(); setbbox(QRectF()); if (isCustom()) { foreach(KeySym* ks, keySymbols) { ks->pos = ks->spos * _spatium; addbbox(symbols[score()->symIdx()][ks->sym].bbox(magS()).translated(ks->pos)); } return; }
void Symbol::layout() { // qreal m = parent() ? parent()->mag() : 1.0; // if (_small) // m *= score()->styleD(ST_smallNoteMag); // setMag(m); foreach(Element* e, leafs()) e->layout(); ElementLayout::layout(this); BSymbol::layout(); setbbox(symbols[score()->symIdx()][_sym].bbox(magS())); }
void ShadowNote::draw(QPainter* painter) const { if (!visible() || sym == 0) return; QPointF ap(pagePos()); QRect r(abbox().toRect()); painter->translate(ap); qreal lw = point(score()->styleS(ST_ledgerLineWidth)); InputState ps = score()->inputState(); int voice; if (ps.drumNote() != -1 && ps.drumset() && ps.drumset()->isValid(ps.drumNote())) voice = ps.drumset()->voice(ps.drumNote()); else voice = ps.voice(); QPen pen(MScore::selectColor[voice].light(140), lw); painter->setPen(pen); sym->draw(painter, magS()); qreal ms = spatium(); qreal x1 = sym->width(magS())*.5 - (ms * mag()); qreal x2 = x1 + 2 * ms * mag(); ms *= .5; if (_line < 100 && _line > -100 && !ps.rest) { for (int i = -2; i >= _line; i -= 2) { qreal y = ms * mag() * (i - _line); painter->drawLine(QLineF(x1, y, x2, y)); } for (int i = 10; i <= _line; i += 2) { qreal y = ms * mag() * (i - _line); painter->drawLine(QLineF(x1, y, x2, y)); } } painter->translate(-ap); }
void TabDurationSymbol::draw(QPainter* painter) const { if(!_tab) return; qreal mag = magS(); qreal imag = 1.0 / mag; painter->setPen(curColor()); painter->scale(mag, mag); painter->setFont(_tab->durationFont()); painter->drawText(QPointF(0.0, _tab->durationFontYOffset()), _text); painter->scale(imag, imag); }
void Box::copyValues(Box* origin) { _boxHeight = origin->boxHeight(); _boxWidth = origin->boxWidth(); qreal factor = magS() / origin->magS(); _bottomGap = origin->bottomGap() * factor; _topGap = origin->topGap() * factor; _bottomMargin = origin->bottomMargin() * factor; _topMargin = origin->topMargin() * factor; _leftMargin = origin->leftMargin() * factor; _rightMargin = origin->rightMargin() * factor; }
void GlissandoSegment::draw(QPainter* painter) const { painter->save(); qreal _spatium = spatium(); QPen pen(glissando()->curColor()); pen.setWidthF(glissando()->lineWidth().val() * spatium()); pen.setCapStyle(Qt::RoundCap); painter->setPen(pen); // painter->drawLine(QPointF(), pos2()); // DEBUG // rotate painter so that the line become horizontal qreal w = pos2().x(); qreal h = pos2().y(); qreal l = sqrt(w * w + h * h); qreal wi = asin(-h / l) * 180.0 / M_PI; qreal scale = painter->worldTransform().m11(); painter->rotate(-wi); if (glissando()->glissandoType() == Glissando::Type::STRAIGHT) { painter->drawLine(QLineF(0.0, 0.0, l, 0.0)); } else if (glissando()->glissandoType() == Glissando::Type::WAVY) { QRectF b = symBbox(SymId::wiggleTrill); qreal w = symAdvance(SymId::wiggleTrill); int n = (int)(l / w); // always round down (truncate) to avoid overlap qreal x = (l - n*w) * 0.5; // centre line in available space std::vector<SymId> ids; for (int i = 0; i < n; ++i) ids.push_back(SymId::wiggleTrill); // this is very ugly but fix #68846 for now // bool tmp = MScore::pdfPrinting; // MScore::pdfPrinting = true; score()->scoreFont()->draw(ids, painter, magS(), QPointF(x, -(b.y() + b.height()*0.5) ), scale); // MScore::pdfPrinting = tmp; } if (glissando()->showText()) { const TextStyle& st = score()->textStyle(TextStyleType::GLISSANDO); QRectF r = st.fontMetrics(_spatium).boundingRect(glissando()->text()); // if text longer than available space, skip it if (r.width() < l) { qreal yOffset = r.height() + r.y(); // find text descender height // raise text slightly above line and slightly more with WAVY than with STRAIGHT yOffset += _spatium * (glissando()->glissandoType() == Glissando::Type::WAVY ? 0.4 : 0.1); painter->setFont(st.font(_spatium * MScore::pixelRatio)); qreal x = (l - r.width()) * 0.5; painter->drawText(QPointF(x, -yOffset), glissando()->text()); } } painter->restore(); }