📄 notesymbols.cpp
字号:
y_pos += rowHeight; } p->restore();}voidNoteSymbols::drawStrings ( QPainter* p ) const{ // Vertical lines QRect v = p->viewport(); int imgHeight = v.height(); int imgWidth = v.width(); unsigned int startPos = getTopBorder( imgHeight ) + TOP_GUITAR_CHORD_MARGIN; unsigned int endPos = (getY ( imgHeight, m_nbOfFrets, m_nbOfFrets )).first + TOP_GUITAR_CHORD_MARGIN; unsigned int guitarChordWidth = getGuitarChordWidth( imgWidth ); unsigned int columnWidth = guitarChordWidth / m_nbOfStrings; unsigned int x_pos = (getX ( imgWidth, 0, m_nbOfStrings )).first; QPen pen(p->pen()); pen.setWidth(imgWidth >= 100 ? STRING_PEN_WIDTH : STRING_PEN_WIDTH / 2); p->save(); p->setPen(pen); for ( unsigned int i = 0; i < m_nbOfStrings; ++i ) { /* This code borrowed from KGuitar 0.5 */ p->drawLine( x_pos, startPos, x_pos, endPos ); x_pos += columnWidth; } p->restore(); }QRect NoteSymbols::getTransientNoteSymbolRect(QSize guitarChordSize, unsigned int stringNb, int fretNb) const{ posPair x_pos = getX ( guitarChordSize.width(), stringNb, m_nbOfStrings ); posPair y_pos = getY ( guitarChordSize.height(), fretNb, m_nbOfFrets ); double columnWidth = x_pos.second; unsigned int radius = static_cast<unsigned int>( columnWidth /* * 0.9 */ ); int x = x_pos.first - ( radius / 2 ), y = y_pos.first + ( (y_pos.second - radius) / 2) - y_pos.second + TOP_GUITAR_CHORD_MARGIN; return QRect(x, y, radius, radius);}unsigned intNoteSymbols::getTopBorder ( unsigned int imgHeight ) const{ return static_cast<unsigned int>( TOP_BORDER_PERCENTAGE * imgHeight );}unsigned intNoteSymbols::getBottomBorder ( unsigned int imgHeight ) const{ return static_cast<unsigned int>( imgHeight * BOTTOM_BORDER_PERCENTAGE );}unsigned intNoteSymbols::getLeftBorder ( unsigned int imgWidth ) const{ unsigned int left = static_cast<unsigned int>( imgWidth * LEFT_BORDER_PERCENTAGE ); if ( left < 15 ) { left = 15; } return left;}unsigned intNoteSymbols::getRightBorder ( unsigned int imgWidth ) const{ return static_cast<unsigned int>( imgWidth * RIGHT_BORDER_PERCENTAGE );}unsigned intNoteSymbols::getGuitarChordWidth ( int imgWidth ) const{ return static_cast<unsigned int>( imgWidth * GUITAR_CHORD_WIDTH_PERCENTAGE );}unsigned intNoteSymbols::getGuitarChordHeight ( int imgHeight ) const{ return static_cast<unsigned int>( imgHeight * GUITAR_CHORD_HEIGHT_PERCENTAGE );}unsigned intNoteSymbols::getFontPixelSize ( int imgWidth, int imgHeight ) const{ return std::max(8, imgHeight / 10);}std::pair<bool, unsigned int>NoteSymbols::getStringNumber ( int imgWidth, unsigned int x_pos, unsigned int maxStringNum ) const{ /* std::cout << "NoteSymbols::getNumberOfStrings - input values" << std::endl << " X position: " << x_pos << std::endl << " string #: " << maxStringNum << std::endl << " image width: " << imgWidth << std::endl; */ bool valueOk = false; posPair xPairPos; unsigned int min = 0; unsigned int max = 0; unsigned int result = 0; for ( unsigned int i = 0; i < maxStringNum; ++i ) { xPairPos = getX ( imgWidth, i, maxStringNum ); // If the counter equals zero then we are at the first // string to the left if ( i == 0 ) { // Add 10 pixel buffer to range comparison min = xPairPos.first - 10; } else { min = xPairPos.first - xPairPos.second / 2; } // If the counter equals the maxString number -1 then we are at the last // string to the right if ( i == ( maxStringNum - 1 ) ) { // Add 10 pixel buffer to range comparison max = xPairPos.first + 10; } else { max = xPairPos.first + xPairPos.second / 2; } if ( ( x_pos >= min ) && ( x_pos <= max ) ) { result = i; valueOk = true; break; } } //std::cout << "NoteSymbols::getNumberOfStrings - string: #" << result << std::endl; return std::make_pair( valueOk, result );}std::pair<bool, unsigned int>NoteSymbols::getFretNumber ( int imgHeight, unsigned int y_pos, unsigned int maxFretNum ) const{ /* std::cout << "NoteSymbols::getNumberOfFrets - input values" << std::endl << " Y position: " << y_pos << std::endl << " max frets: " << maxFretNum << std::endl << " image height: " << imgHeight << std::endl; */ bool valueOk = false; unsigned int tBorder = getTopBorder( imgHeight ); unsigned int result = 0; if ( y_pos < tBorder ) { // User pressing above the guitar chord to mark line muted or opened valueOk = true; } else { typedef std::pair<unsigned int, unsigned int> RangePair; posPair min_pos; posPair max_pos; for ( unsigned int i = 0; i < maxFretNum; ++i ) { min_pos = getY ( imgHeight, i, maxFretNum ); max_pos = getY ( imgHeight, i + 1, maxFretNum ); if ( ( y_pos >= min_pos.first ) && y_pos <= max_pos.first - 1 ) { result = i + 1; valueOk = true; break; } } } // std::cout << " fret #: " << result << std::endl; return std::make_pair( valueOk, result );}voidNoteSymbols::drawFingeringPixmap(const Guitar::Fingering& fingering, const Guitar::NoteSymbols& noteSymbols, QPainter *p){ unsigned int startFret = fingering.getStartFret(); noteSymbols.drawFretNumber(p, startFret); noteSymbols.drawFrets(p); noteSymbols.drawStrings(p); unsigned int stringNb = 0; for (Fingering::const_iterator pos = fingering.begin(); pos != fingering.end(); ++pos, ++stringNb) { switch (*pos) { case Fingering::OPEN: noteSymbols.drawOpenSymbol(p, stringNb); break; case Fingering::MUTED: noteSymbols.drawMuteSymbol(p, stringNb); break; default: noteSymbols.drawNoteSymbol(p, stringNb, *pos - (startFret - 1), false); break; } } }float const NoteSymbols::LEFT_BORDER_PERCENTAGE = 0.2;float const NoteSymbols::RIGHT_BORDER_PERCENTAGE = 0.1;float const NoteSymbols::GUITAR_CHORD_WIDTH_PERCENTAGE = 0.8;float const NoteSymbols::TOP_BORDER_PERCENTAGE = 0.1;float const NoteSymbols::BOTTOM_BORDER_PERCENTAGE = 0.1;float const NoteSymbols::GUITAR_CHORD_HEIGHT_PERCENTAGE = 0.8;int const NoteSymbols::TOP_GUITAR_CHORD_MARGIN = 5;int const NoteSymbols::FRET_PEN_WIDTH = 2;int const NoteSymbols::STRING_PEN_WIDTH = 2;} /* namespace Guitar */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -