protected MusicalSymbolRenderStrategyBase GetProperRenderStrategy(MusicalSymbol element) { #if CSHTML5 return(Strategies.FirstOrDefault(s => s.SymbolType == element.GetType()) ?? Strategies.FirstOrDefault(s => s.SymbolType.IsAssignableFrom(element.GetType()))); #else return(Strategies.FirstOrDefault(s => s.SymbolType == element.GetType()) ?? Strategies.FirstOrDefault(s => s.SymbolType.GetTypeInfo().IsAssignableFrom(element.GetType().GetTypeInfo()))); #endif }
/// <summary> /// Identifies whether the selected element can be safely followed by a note or rest. /// </summary> /// <param name="elem">The element to verify.</param> /// <returns>true if elem is a note or rest; false otherwise.</returns> private bool isValidTarget(MusicalSymbol elem) { if (elem == null) { return(false); } return(elem.GetType().IsSubclassOf(typeof(NoteOrRest))); }
public override void DrawString(string text, MusicFontStyles fontStyle, Point location, Color color, MusicalSymbol owner) { var entry = new ScoreRenderingTestEntry(); entry.Location = location; entry.Text = text; entry.Type = owner.GetType().Name; SetIndexes(entry, owner); Canvas.Put(entry); }
public override void DrawLine(Point startPoint, Point endPoint, Pen pen, MusicalSymbol owner) { var entry = new ScoreRenderingTestEntry(); entry.Location = GetTopLeftPoint(startPoint, endPoint); entry.Size = GetSize(startPoint, endPoint); entry.Type = owner.GetType().Name; SetIndexes(entry, owner); Canvas.Put(entry); }
public override void DrawBezier(Point p1, Point p2, Point p3, Point p4, Pen pen, MusicalSymbol owner) { var entry = new ScoreRenderingTestEntry(); entry.Location = GetTopLeftPoint(p1, p2, p3, p4); entry.Size = GetSize(p1, p2, p3, p4); entry.Type = owner.GetType().Name; SetIndexes(entry, owner); Canvas.Put(entry); }
private void SetIndexes(ScoreRenderingTestEntry entry, MusicalSymbol symbol) { entry.Type = symbol.GetType().Name; var matchingStaff = CurrentScore.Staves.FirstOrDefault(s => s.Elements.Contains(symbol)); if (matchingStaff == null) { return; } entry.StaffNo = CurrentScore.Staves.IndexOf(matchingStaff) + 1; entry.StaffIndex = CurrentScore.Staves[entry.StaffNo - 1].Elements.IndexOf(symbol); }
// Moves the next barline to the position immediately after the specified element. If there are no more barlines on // the staff, creates a new one. private Barline moveOrAddBarlineAfter(MusicalSymbol item) { if (item.GetType() == typeof(Barline)) { return((Barline)item); } var elems = item.Staff.Elements; int itemPosition = elems.IndexOf(item); Barline bar = (Barline)elems.FirstOrDefault(b => elems.IndexOf(b) > itemPosition && b.GetType() == typeof(Barline)); if (bar == null) { bar = new Barline(); } else { item.Staff.Elements.Remove(bar); } item.Staff.Elements.Insert(itemPosition + 1, bar); return(bar); }
/// <summary> /// Returns a proper dragging strategy for given element /// </summary> /// <param name="draggedElement">Dragged element</param> /// <returns>Proper dragging strategy</returns> public static IDraggingStrategy For(MusicalSymbol draggedElement) { return(strategies.Value.FirstOrDefault(s => s.ElementType == draggedElement.GetType()) ?? strategies.Value.FirstOrDefault(s => draggedElement.GetType().IsSubclassOf(s.ElementType))); }
protected MusicalSymbolRenderStrategyBase GetProperRenderStrategy(MusicalSymbol element) { return(Strategies.FirstOrDefault(s => s.SymbolType == element.GetType()) ?? Strategies.FirstOrDefault(s => s.SymbolType.IsAssignableFrom(element.GetType()))); }