Exemplo n.º 1
0
        public override void Update(IPointer pointer, Point point)
        {
            var project       = DocManager.Inst.Project;
            var tracksVm      = vm.TracksViewModel;
            int deltaDuration = tracksVm.PointToSnappedTick(point) + tracksVm.SnapUnit - part.EndTick;

            if (deltaDuration < 0)
            {
                int maxDurReduction = part.Duration - part.GetMinDurTick(project);
                if (tracksVm.SelectedParts.Count > 0)
                {
                    maxDurReduction = tracksVm.SelectedParts.Min(p => p.Duration - p.GetMinDurTick(project));
                }
                if (tracksVm.SnapUnit > 0)
                {
                    maxDurReduction = (int)Math.Floor((double)maxDurReduction / tracksVm.SnapUnit) * tracksVm.SnapUnit;
                }
                deltaDuration = Math.Max(deltaDuration, -maxDurReduction);
            }
            if (deltaDuration == 0)
            {
                return;
            }
            if (tracksVm.SelectedParts.Count == 0)
            {
                DocManager.Inst.ExecuteCmd(new ResizePartCommand(project, part, part.Duration + deltaDuration));
                return;
            }
            foreach (UPart part in tracksVm.SelectedParts)
            {
                DocManager.Inst.ExecuteCmd(new ResizePartCommand(project, part, part.Duration + deltaDuration));
            }
        }