void StaffType::writeProperties(Xml& xml) const { xml.tag("name", name()); if (lines() != 5) xml.tag("lines", lines()); if (lineDistance().val() != 1.0) xml.tag("lineDistance", lineDistance().val()); if (!genClef()) xml.tag("clef", genClef()); if (slashStyle()) xml.tag("slashStyle", slashStyle()); if (!showBarlines()) xml.tag("barlines", showBarlines()); }
void StaffTypeTablature::setFretMetrics() { if(_fretMetricsValid && _refDPI == MScore::DPI) return; QFontMetricsF fm(fretFont()); // compute total height of used characters QRectF bb(fm.tightBoundingRect(_useNumbers ? g_strNumbers : g_strLetters)); // compute vertical displacement if(_useNumbers) { // for numbers: centre on '0': move down by the whole part above (negative) // the base line ( -bb.y() ) then up by half the whole height ( -bb.height()/2 ) QRectF bx( fm.tightBoundingRect("0") ); _fretYOffset = -(bx.y() + bx.height()/2.0); // _fretYOffset = -(bb.y() + bb.height()/2.0); // <- using bbox of all chars } else { // for letters: centre on the 'a' ascender, by moving down half of the part above the base line in bx QRectF bx( fm.tightBoundingRect("a") ); _fretYOffset = -bx.y() / 2.0; } // if on string, we are done; if between strings, raise by half line distance if(!_onLines) _fretYOffset -= lineDistance().val()*MScore::DPI*SPATIUM20 / 2.0; // from _fretYOffset, compute _charBoxH and _charBoxY _fretBoxH = bb.height(); _fretBoxY = bb.y() + _fretYOffset; // keep track of the conditions under which metrics have been computed _refDPI = MScore::DPI; _fretMetricsValid = true; }
void StaffType::writeProperties(Xml& xml) const { xml.tag("name", name()); // uncontionally write properties: staff types are read back over a copy of the built-in types // and properties may be different across types => each might need to be properly (re-)set xml.tag("lines", lines()); xml.tag("lineDistance", lineDistance().val()); xml.tag("clef", genClef()); xml.tag("slashStyle", slashStyle()); xml.tag("barlines", showBarlines()); xml.tag("timesig", genTimesig()); }
void StaffTypeTablature::setDurationMetrics() { if (_durationMetricsValid && _refDPI == MScore::DPI) // metrics are still valid return; QFontMetricsF fm(durationFont()); QRectF bb( fm.tightBoundingRect(QString(g_cDurationChars, STAFFTYPETAB_NUMOFDURCHARS)) ); // move symbols so that the lowest margin 'sits' on the base line: // move down by the whole part above (negative) the base line // ( -bb.y() ) then up by the whole height ( -bb.height()/2 ) _durationYOffset = -bb.y() - bb.height() // then move up by a default margin and, if marks are above lines, by half the line distance // (converted from spatium units to raster units) + ( TAB_DEFAULT_DUR_YOFFS - (_onLines ? 0.0 : lineDistance().val()/2.0) ) * MScore::DPI*SPATIUM20; _durationBoxH = bb.height(); _durationBoxY = bb.y() + _durationYOffset; // keep track of the conditions under which metrics have been computed _refDPI = MScore::DPI; _durationMetricsValid = true; }
void StaffTypeTablature::setFretMetrics() { if(_fretMetricsValid && _refDPI == MScore::DPI) return; QFontMetricsF fm(fretFont()); QRectF bb; // compute vertical displacement if(_useNumbers) { // compute total height of used characters QString txt = QString(); for (int idx = 0; idx < 10; idx++) // use only first 10 digits txt.append(_fretFonts[_fretFontIdx].displayDigit[idx]); bb = fm.tightBoundingRect(txt); // for numbers: centre on '0': move down by the whole part above (negative) // the base line ( -bb.y() ) then up by half the whole height ( -bb.height()/2 ) QRectF bx( fm.tightBoundingRect(_fretFonts[_fretFontIdx].displayDigit[0]) ); _fretYOffset = -(bx.y() + bx.height()/2.0); // _fretYOffset = -(bb.y() + bb.height()/2.0); // <- using bbox of all chars } else { // compute total height of used characters QString txt(_fretFonts[_fretFontIdx].displayLetter, NUM_OF_LETTERFRETS); bb = fm.tightBoundingRect(txt); // for letters: centre on the 'a' ascender, by moving down half of the part above the base line in bx QRectF bx( fm.tightBoundingRect(_fretFonts[_fretFontIdx].displayLetter[0]) ); _fretYOffset = -bx.y() / 2.0; } // if on string, we are done; if between strings, raise by half line distance if(!_onLines) _fretYOffset -= lineDistance().val()*MScore::DPI*SPATIUM20 / 2.0; // from _fretYOffset, compute _charBoxH and _charBoxY _fretBoxH = bb.height(); _fretBoxY = bb.y() + _fretYOffset; // keep track of the conditions under which metrics have been computed _refDPI = MScore::DPI; _fretMetricsValid = true; }
void QtWaitingSpinner::paintEvent(QPaintEvent */*ev*/) { QPainter painter(this); painter.fillRect(this->rect(), Qt::transparent); painter.setRenderHint(QPainter::Antialiasing, true); if (myCurrentCounter >= myLinesNumber) { myCurrentCounter = 0; } painter.setPen(Qt::NoPen); for (int i = 0; i < myLinesNumber; ++i) { painter.save(); painter.translate(myRadius + myLength, myRadius + myLength); qreal rotateAngle = (qreal)360 * qreal(i) / qreal(myLinesNumber); painter.rotate(rotateAngle); painter.translate(myRadius, 0); int distance = lineDistance(i, myCurrentCounter, myLinesNumber); QColor color = countTrailColor(distance, myLinesNumber, myTrail, myOpacity, myColor); painter.setBrush(color); //TODO improve the way rounded rect is painted painter.drawRoundedRect(QRect(0, -myWidth/2, myLength, myWidth), myRoundness, myRoundness, Qt::RelativeSize); painter.restore(); } }