本文整理汇总了C++中Note::GetDrawingDur方法的典型用法代码示例。如果您正苦于以下问题:C++ Note::GetDrawingDur方法的具体用法?C++ Note::GetDrawingDur怎么用?C++ Note::GetDrawingDur使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Note
的用法示例。
在下文中一共展示了Note::GetDrawingDur方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DrawMensuralNote
void View::DrawMensuralNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure)
{
assert(dc);
assert(element);
assert(layer);
assert(staff);
assert(measure);
Note *note = dynamic_cast<Note *>(element);
assert(note);
int noteY = element->GetDrawingY();
int xNote, xStem;
int drawingDur;
int staffY = staff->GetDrawingY();
wchar_t charCode;
int verticalCenter = 0;
bool mensural_black = (staff->m_drawingNotationType == NOTATIONTYPE_mensural_black);
xStem = element->GetDrawingX();
drawingDur = note->GetDrawingDur();
int radius = m_doc->GetGlyphWidth(SMUFL_E93C_mensuralNoteheadMinimaWhite, staff->m_drawingStaffSize, false) / 2;
if (drawingDur > DUR_1) {
if (mensural_black) radius *= TEMP_MINIMA_WIDTH_FACTOR;
}
else {
radius += radius / 3;
}
/************** Stem/notehead direction: **************/
data_STEMDIRECTION stemDir = STEMDIRECTION_NONE;
verticalCenter = staffY - m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * 2;
if (note->HasStemDir()) {
stemDir = note->GetStemDir();
}
else if (layer->GetDrawingStemDir() != STEMDIRECTION_NONE) {
stemDir = layer->GetDrawingStemDir();
}
else {
if (drawingDur < DUR_1)
stemDir = STEMDIRECTION_down;
else
stemDir = (noteY > verticalCenter) ? STEMDIRECTION_down : STEMDIRECTION_up;
}
xNote = xStem - radius;
/************** Noteheads: **************/
// Ligature, maxima,longa, and brevis
if ((note->GetLig() != noteLogMensural_LIG_NONE) && (drawingDur <= DUR_1)) {
DrawLigatureNote(dc, element, layer, staff);
}
else if (drawingDur < DUR_1) {
DrawMaximaToBrevis(dc, noteY, element, layer, staff);
}
// Semibrevis
else if (drawingDur == DUR_1) {
if (mensural_black) {
int sbStaffSize = 0.8 * staff->m_drawingStaffSize;
DrawDiamond(dc, xNote, noteY, 2 * sbStaffSize, (int)(1.2 * sbStaffSize), !note->GetColored(), 20);
}
else {
// Maybe we can add this to Note::GetMensuralSmuflNoteHead?
if (note->GetColored())
charCode = SMUFL_E938_mensuralNoteheadSemibrevisBlack;
else
charCode = SMUFL_E939_mensuralNoteheadSemibrevisVoid;
DrawSmuflCode(dc, xNote, noteY, charCode, staff->m_drawingStaffSize, false);
}
}
// Shorter values
else {
if (mensural_black) {
// SMuFL 1.20 doesn't have a codepoint for the "colored" semibrevis and minima head in black
// mensural notation. But an unfilled (void) narrow diamond is fine, so we draw one.
int sbStaffSize = 0.8 * staff->m_drawingStaffSize;
DrawDiamond(dc, xNote, noteY, 2 * sbStaffSize, (int)(TEMP_MINIMA_WIDTH_FACTOR * 2 * sbStaffSize),
!note->GetColored(), 20);
}
else {
DrawSmuflCode(dc, xNote, noteY, note->GetMensuralSmuflNoteHead(), staff->m_drawingStaffSize, false);
}
DrawMensuralStem(dc, note, staff, stemDir, radius, xStem, noteY);
}
/************ Draw children (verse / syl) ************/
DrawLayerChildren(dc, note, layer, staff, measure);
}
示例2: DrawMensuralNote
void View::DrawMensuralNote ( DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure )
{
assert( dc );
assert( element );
assert( layer );
assert( staff );
assert( measure );
Note *note = dynamic_cast<Note*>(element);
assert( note );
int staffSize = staff->m_drawingStaffSize;
int noteY = element->GetDrawingY();
int xLedger, xNote, xStem;
int drawingDur;
bool drawingCueSize;
int staffY = staff->GetDrawingY();
wchar_t fontNo;
int ledge;
int verticalCenter = 0;
xStem = element->GetDrawingX();
xLedger = xStem;
drawingDur = note->GetDrawingDur();
drawingCueSize = note->HasGrace();
int radius = m_doc->GetGlyphWidth(SMUFL_E0A3_noteheadHalf, staffSize, drawingCueSize);
if (drawingDur > DUR_1 || (drawingDur == DUR_1 && staff->notAnc)) { // annuler provisoirement la modif. des lignes addit.
ledge = m_doc->GetDrawingLedgerLineLength(staffSize, drawingCueSize);
}
else {
ledge = m_doc->GetDrawingLedgerLineLength(staffSize, drawingCueSize);
radius += radius/3;
}
/************** Stem/notehead direction: **************/
verticalCenter = staffY - m_doc->GetDrawingDoubleUnit(staffSize)*2;
data_STEMDIRECTION noteStemDir = note->CalcDrawingStemDir();
if ( noteStemDir != STEMDIRECTION_NONE ) {
note->SetDrawingStemDir( noteStemDir );
}
else if ( layer->GetDrawingStemDir() != STEMDIRECTION_NONE) {
note->SetDrawingStemDir( layer->GetDrawingStemDir() );
}
else {
note->SetDrawingStemDir((noteY >= verticalCenter) ? STEMDIRECTION_down : STEMDIRECTION_up);
}
xNote = xStem - radius;
/************** Noteheads: **************/
// Long, breve and ligatures
if ((note->GetLig()!=LIGATURE_NONE) && (drawingDur <= DUR_1)) {
DrawLigature ( dc, noteY, element, layer, staff);
}
else if (drawingDur < DUR_1) {
DrawMaximaToBrevis( dc, noteY, element, layer, staff);
}
else if (drawingDur == DUR_1) {
if (note->GetColored())
fontNo = SMUFL_E938_mensuralNoteheadSemibrevisBlack;
else
fontNo = SMUFL_E939_mensuralNoteheadSemibrevisVoid;
DrawSmuflCode( dc, xNote, noteY, fontNo, staff->m_drawingStaffSize, drawingCueSize );
}
// Other values ??WE WANT MENSURAL NOTEHEADS, NOT CMN!!!!!!!!
else {
if (note->GetColored()) {
if (drawingDur == DUR_2) fontNo = SMUFL_E0A4_noteheadBlack;
else fontNo = SMUFL_E0A3_noteheadHalf;
}
else {
if (drawingDur > DUR_2) fontNo = SMUFL_E0A4_noteheadBlack;
else fontNo = SMUFL_E0A3_noteheadHalf;
}
DrawSmuflCode( dc, xNote, noteY, fontNo, staff->m_drawingStaffSize, drawingCueSize );
DrawStem(dc, note, staff, note->GetDrawingStemDir(), radius, xStem, noteY);
}
/************** Ledger lines: **************/
int staffTop = staffY + m_doc->GetDrawingUnit(staffSize);
int staffBot = staffY - m_doc->GetDrawingStaffSize(staffSize) - m_doc->GetDrawingUnit(staffSize);
//if the note is not in the staff
if (!is_in(noteY,staffTop,staffBot))
{
int distance, highestNewLine, numLines;
bool aboveStaff = (noteY > staffTop);
distance = (aboveStaff ? (noteY - staffY) : staffY - m_doc->GetDrawingStaffSize(staffSize) - noteY);
highestNewLine = ((distance % m_doc->GetDrawingDoubleUnit(staffSize) > 0) ? (distance - m_doc->GetDrawingUnit(staffSize)) : distance);
numLines = highestNewLine / m_doc->GetDrawingDoubleUnit(staffSize);
//.........这里部分代码省略.........