diff --git a/source/painters/systemrenderer.cpp b/source/painters/systemrenderer.cpp index 7ed10502..a4747bb6 100644 --- a/source/painters/systemrenderer.cpp +++ b/source/painters/systemrenderer.cpp @@ -1215,6 +1215,7 @@ SystemRenderer::drawSymbolsAboveTabStaff(const ConstScoreLocation &location, break; case SymbolGroup::TremoloPicking: renderedSymbol = createTremoloPicking(layout); + renderedSymbol->setX(layout.getPositionX(symbolGroup.getLeftPosition())); break; case SymbolGroup::Trill: renderedSymbol = createTrill(layout); @@ -1248,10 +1249,19 @@ SystemRenderer::drawSymbolsAboveTabStaff(const ConstScoreLocation &location, // standard notation staff. if (symbolGroup.getSymbolType() != SymbolGroup::Bend) { - renderedSymbol->setPos( - layout.getPositionX(symbolGroup.getLeftPosition()), - layout.getTopTabLine() - LayoutInfo::STAFF_BORDER_SPACING - - symbolGroup.getHeight() * LayoutInfo::TAB_SYMBOL_SPACING); + const double yPos = layout.getTopTabLine() - LayoutInfo::STAFF_BORDER_SPACING - + symbolGroup.getHeight() * LayoutInfo::TAB_SYMBOL_SPACING; + + if (symbolGroup.getSymbolType() == SymbolGroup::TremoloPicking) + { + renderedSymbol->setY(yPos); + } + else + { + renderedSymbol->setPos( + layout.getPositionX(symbolGroup.getLeftPosition()), + yPos); + } } if (renderedSymbol) @@ -1507,13 +1517,16 @@ QGraphicsItem *SystemRenderer::createTremoloPicking(const LayoutInfo& layout) { const double offset = LayoutInfo::TAB_SYMBOL_SPACING / 3; + QFontMetricsF fm(myMusicNotationFont); + const double symbol_width = fm.horizontalAdvance(MusicSymbol::TremoloPicking); + auto group = new QGraphicsItemGroup(); for (int i = 0; i < 3; i++) { auto line = new SimpleTextItem(MusicSymbol::TremoloPicking, myMusicNotationFont, TextAlignment::Baseline, QPen(myPalette.text().color())); - centerHorizontally(*line, 0, layout.getPositionSpacing() * 1.25); + line->setX(0.5 * layout.getPositionSpacing() - symbol_width / 2); line->setY(-7 + i * offset); group->addToGroup(line); } @@ -1972,6 +1985,7 @@ SystemRenderer::drawRest(const Position &pos, double x, { // Position it in the middle of the staff. QFont font = MusicFont::getFont(28); + QFontMetricsF fm(font); double y = layout.getStdNotationLine(3); QChar symbol; @@ -2001,6 +2015,8 @@ SystemRenderer::drawRest(const Position &pos, double x, break; } + const double rest_width = fm.horizontalAdvance(symbol); + auto group = new QGraphicsItemGroup(); auto text = new SimpleTextItem(symbol, font, TextAlignment::Baseline, QPen(myPalette.text().color())); text->setPos(0, y); @@ -2008,7 +2024,7 @@ SystemRenderer::drawRest(const Position &pos, double x, // Draw dots if necessary. const QChar dot = MusicSymbol::Dot; - const double dotX = 0.4 * font.pixelSize(); + const double dotX = rest_width + 2; // Position just below second line of staff. const double dotY = layout.getStdNotationSpace(2); @@ -2028,7 +2044,8 @@ SystemRenderer::drawRest(const Position &pos, double x, } } - centerHorizontally(*group, x, x + layout.getPositionSpacing() * 1.25); + const double centeredX = x + 0.5 * (layout.getPositionSpacing() - rest_width); + group->setX(centeredX); group->setParentItem(myParentStaff); }