void GradientsView::Draw(BRect update) { switch (fType) { case BGradient::TYPE_LINEAR: DrawLinear(update); break; case BGradient::TYPE_RADIAL: DrawRadial(update); break; case BGradient::TYPE_RADIAL_FOCUS: DrawRadialFocus(update); break; case BGradient::TYPE_DIAMOND: DrawDiamond(update); break; case BGradient::TYPE_CONIC: DrawConic(update); break; case BGradient::TYPE_NONE: default: break; } }
void CSimpleMarketSymbol::DrawGeometryEx(IDisplay* pDisplay, const GPoint* points, const int* polyCounts, size_t polyCount) { for(size_t part = 0, offset = 0; part < polyCount; part++) { for(int point = (int)offset; point < (int)offset + polyCounts[part]; point++) { switch(m_style) { case SimpleMarkerStyleCircle: DrawCircle(points[point], pDisplay->GetGraphics().get()); break; case SimpleMarkerStyleSquare: DrawSquare(points[point], pDisplay->GetGraphics().get()); break; case SimpleMarkerStyleCross: DrawCross(points[point], pDisplay->GetGraphics().get()); break; case SimpleMarkerStyleX: DrawX(points[point], pDisplay->GetGraphics().get()); break; case SimpleMarkerStyleDiamond: DrawDiamond(points[point], pDisplay->GetGraphics().get()); break; } } offset += polyCounts[part]; } }
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); }