Пример #1
0
		public void MarkAs(Sign sign, Key.State state)
		{
			foreach (var key in keys)
			{
				if (key.note.InChord(sign))
					key.MarkAs(state);
			}
		}
Пример #2
0
		public double Show(Sign fromSign, out Sign nextSign)
		{
			// Rysuję klamrę.
			double braceRight = ShowBrace();

			// Rysuję pięciolinie wiolinową i basową, klucze i znaki przykluczowe.
			double bottom = ShowStaffs(braceRight);

			// Rysuję nuty i inne znaki - tyle ile sie zmiesci.
			nextSign = ShowSigns(fromSign);

			// Rysuję znaki zmiany wysokości wykonania (ottava)
			ShowPerform(Staff.Type.Bass);
			ShowPerform(Staff.Type.Treble);

			// Zwracam pierwszą nutę do narysowania na następnym StaffGrand
			return bottom;
		}
Пример #3
0
		private int HideToBeginOfMeasure(Sign fromSign)
		{
			List<Sign> signsForHide = new List<Sign>();

			for (int idx = score.signs.IndexOf(fromSign) - 1; idx >= 0 ; idx--)
			{
				Sign sign = score.signs[idx];
				if (sign is Bar)
				{
					// Jest znak taktu. Ukrywamy znaki i zwracamy jego index.
					signsForHide.ForEach(s => s.Hide(score));
					return idx;
				}
				else
				{
					signsForHide.Add(sign);
				}
			}

			// Nie znaleziono znaku taktu.
			return -1;
		}
Пример #4
0
		private Sign ShowSigns(Sign fromSign)
		{
			// Może nie być żadnych znaków do rysowania.
			if (fromSign == null)
				return null;

			firstSign = fromSign;
			for (int idx = score.signs.IndexOf(fromSign); idx < score.signs.Count; idx++)
			{
				Sign sign = score.signs[idx];
				cursor = sign.Show(score, trebleStaff, bassStaff, cursor);

				// Czy znak zmieścil się na pieciolinii?
				if (cursor == -1)
				{
					// Nie - umieścimy go na kolejnym SraffGrand.
					// Wycofujemy też wszyskie znaki do początku taktu.
					int idxBar = HideToBeginOfMeasure(sign);
					if (idxBar == -1)
					{
						// Nie znaleziono znaku taktu. Nie robimy wycofywania.
						return sign;
					}
					lastSign = score.signs[idxBar];
					Sign nextSign = score.signs[idxBar + 1];
					return nextSign;
				}
				else
				{
					// Tak - zmieścił się.
					lastSign = sign;
				}
			}

			// Wszystkie zmieściły się.
			return null;
		}
Пример #5
0
		public Note FindNextNote(Sign sign)
		{
			int idx = signs.IndexOf(sign);
			int idxNextNote = signs.FindIndex(idx, s => s is Note);

			return signs[idxNextNote] as Note;
		}
Пример #6
0
		public void Add(Sign sign)
		{
			signs.Add(sign);
		}