예제 #1
0
        public NoteHitInfo HitTestNote(Point mousePos)
        {
            NoteHitInfo result = default;
            int         tick   = (int)(midiVM.CanvasToQuarter(mousePos.X) * Project.Resolution);

            foreach (UNote note in midiVM.Part.Notes)
            {
                if (note.PosTick <= tick && note.EndTick >= tick)
                {
                    result.note = note;
                    result.hitX = true;
                    var noteNum = midiVM.CanvasToNoteNum(mousePos.Y);
                    if (noteNum == note.NoteNum)
                    {
                        result.hitVibrato = false;
                        result.hitBody    = true;
                        double x = midiVM.QuarterToCanvas((double)note.EndTick / Project.Resolution);
                        result.hitResizeArea = mousePos.X <= x && mousePos.X > x - UIConstants.ResizeMargin;
                        break;
                    }
                    else if (noteNum == note.NoteNum - 1)
                    {
                        result.hitVibrato = true;
                    }
                }
            }
            return(result);
        }
예제 #2
0
        public UNote HitTestNote(Point mousePos)
        {
            int tick    = (int)(midiVM.CanvasToQuarter(mousePos.X) * Project.Resolution);
            int noteNum = midiVM.CanvasToNoteNum(mousePos.Y);

            foreach (UNote note in midiVM.Part.Notes)
            {
                if (note.PosTick <= tick && note.EndTick >= tick && note.NoteNum == noteNum)
                {
                    return(note);
                }
            }
            return(null);
        }