コード例 #1
0
        private void XStartThumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            TimeMarkerViewModel vm = DataContext as TimeMarkerViewModel;

            if (vm == null)
            {
                return;
            }

            var orgStartTime = vm.Time;

            if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Alt))
            {
                m_HorizontalOffsetAtDragStart = e.HorizontalChange;
            }
            else
            {
                vm.Time += TV.XToTime(e.HorizontalChange) - TV.XToTime(0);
                if (Keyboard.Modifiers != ModifierKeys.Shift)
                {
                    double snapTime = TV.TimeSnapHandler.CheckForSnapping(vm.Time, this);
                    if (!Double.IsNaN(snapTime))
                    {
                        vm.Time = snapTime;
                    }
                }
            }
            //UpdateMappingShape();
            App.Current.UpdateRequiredAfterUserInteraction = true;
            e.Handled = true;
        }
コード例 #2
0
        private void XTimeClip_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            if (Keyboard.Modifiers == ModifierKeys.Control)
            {
                TimeMarkerViewModel vm = DataContext as TimeMarkerViewModel;
                if (vm == null)
                {
                    return;
                }

                double orgTime = vm.Time;

                double delta    = TV.XToTime(e.HorizontalChange) - TV.XToTime(0);
                double snapTime = TV.TimeSnapHandler.CheckForSnapping(vm.Time + delta, this);

                if (!Double.IsNaN(snapTime))
                {
                    delta = snapTime - orgTime;
                }
                vm.Time += delta;

                App.Current.UpdateRequiredAfterUserInteraction = true;
                e.Handled = true;
            }
        }
コード例 #3
0
 private void XTimeClip_Thumb_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
 {
     if (Math.Abs(e.VerticalChange) < SystemParameters.MinimumVerticalDragDistance || Math.Abs(e.HorizontalChange) < SystemParameters.MinimumHorizontalDragDistance)
     {
         TimeMarkerViewModel vm = DataContext as TimeMarkerViewModel;
         if (vm != null)
         {
             var list = new List <ISelectable>();
             list.Add(vm.OperatorWidget);
             App.Current.MainWindow.CompositionView.CompositionGraphView.SelectedElements = list;
         }
     }
 }
コード例 #4
0
        /**
         *  Note: This is a very unfortunate solution to get the Operator title into the TimeMarkerControl.
         *  To make this possible, we have to introduce ClipNamePropertry as a mediator and bind this to
         *  the OperatorWidget. To make it worse, the OperatorWidget is only available in the DataContext
         *  after TimeMarkerControl ist loaded.
         *
         *  This function creates the second binding in the chain:
         *
         *    TimeMarkerControl.TextBlock.Text ---> TimeMarkerControl.ClipName  ---> DataContext(ViewModel).OperatorWidget.XOperatorLabel.Text
         */
        private void CreateNameBinding()
        {
            TimeMarkerViewModel vm = DataContext as TimeMarkerViewModel;

            if (vm != null)
            {
                var nameBinding = new Binding()
                {
                    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                    Source = vm.OperatorWidget.XOperatorLabel,
                    Path   = new PropertyPath("Text"),
                };
                this.SetBinding(TimeMarkerControl.ClipNameProperty, nameBinding);
            }
        }
コード例 #5
0
        public SnapResult CheckForSnap(double time)
        {
            TimeMarkerViewModel vm = DataContext as TimeMarkerViewModel;

            if (vm != null)
            {
                double distanceToStartTime = Math.Abs(time - vm.Time) * TV.TimeScale;
                if (distanceToStartTime < SNAP_THRESHOLD)
                {
                    return(new SnapResult()
                    {
                        SnapToValue = vm.Time, Force = distanceToStartTime
                    });
                }
            }
            return(null);
        }