示例#1
0
        private IEnumerator <object> HandleScroll(WidgetInput input)
        {
            var prevPosition = Vector2.Zero;

            while (true)
            {
                var scrollDelta = GetWheelDelta(input);
                if (scrollDelta != 0 && !input.IsKeyPressed(Key.Alt))
                {
                    timeline.OffsetY += scrollDelta * TimelineMetrics.DefaultRowHeight;
                }
                if (input.IsKeyPressed(Key.Mouse2))
                {
                    var delta = input.MousePosition - prevPosition;
                    if (delta != Vector2.Zero && (timeline.Offset.X - delta.X > 0 || timeline.Offset.Y - delta.Y > 0))
                    {
                        timeline.Offset -= delta;
                        Core.Operations.Dummy.Perform();
                    }
                }
                prevPosition = input.MousePosition;
                yield return(null);
            }
        }
示例#2
0
        void HandleCellsMagnification(WidgetInput input)
        {
            var delta = GetWheelDelta(input);

            if (delta != 0 && input.IsKeyPressed(Key.Alt))
            {
                var prevColWidth = TimelineMetrics.ColWidth;
                TimelineMetrics.ColWidth = (TimelineMetrics.ColWidth + delta).Clamp(5, 30);
                if (prevColWidth != TimelineMetrics.ColWidth)
                {
                    timeline.OffsetX += timeline.CurrentColumn * delta;
                    Core.Operations.Dummy.Perform(Document.Current.History);
                }
            }
        }
示例#3
0
        void HandleCellsMagnification(WidgetInput input)
        {
            var delta = GetWheelDelta(input);

            if (delta != 0 && input.IsKeyPressed(Key.Alt))
            {
                var prevColWidth = TimelineMetrics.ColWidth;
                TimelineMetrics.ColWidth = (TimelineMetrics.ColWidth + delta).Clamp(5, 30);
                if (prevColWidth != TimelineMetrics.ColWidth)
                {
                    var mp = timeline.Grid.RootWidget.Input.LocalMousePosition.X + Timeline.Instance.Offset.X;
                    Timeline.Instance.OffsetX += (mp / prevColWidth) * delta;
                    Core.Operations.Dummy.Perform();
                }
            }
        }
示例#4
0
                public Item(Widget widget, Frame frame, WidgetInput input, bool showLabel)
                {
                    this.frame = frame;
                    var totalTime = 0d;

                    originalWidget = widget;
                    exposedWidget  = (Widget)widget.Clone();
                    exposedWidget.Animations.Clear();
                    originalTransform = widget.CalcTransitionToSpaceOf(frame).ToTransform2();
                    exposedTransform  = CalcExposedTransform(widget, frame);
                    originalWidget.SetTangerineFlag(TangerineFlags.HiddenOnExposition, true);
                    frame.HitTestTarget = true;
                    var clickArea = new Widget {
                        Size = frame.Size, Anchors = Anchors.LeftRightTopBottom, HitTestTarget = true
                    };

                    frame.AddNode(clickArea);
                    label = new ThemedSimpleText {
                        Visible      = showLabel,
                        Position     = new Vector2(3, 2),
                        Color        = ColorTheme.Current.SceneView.Label,
                        Text         = (exposedWidget.Id ?? ""),
                        OverflowMode = TextOverflowMode.Ignore
                    };
                    label.FontHeight *= 0.75f;
                    frame.AddNode(label);
                    frame.AddNode(exposedWidget);
                    borderPresenter = new WidgetBoundsPresenter(ColorTheme.Current.SceneView.ExposedItemInactiveBorder, 1);
                    frame.CompoundPresenter.Push(borderPresenter);
                    frame.Tasks.AddLoop(() => {
                        borderPresenter.Color = Document.Current.SelectedNodes().Contains(widget) ?
                                                ColorTheme.Current.SceneView.ExposedItemSelectedBorder :
                                                ColorTheme.Current.SceneView.ExposedItemInactiveBorder;
                        totalTime += Lime.Task.Current.Delta;
                        if (clickArea.IsMouseOver())
                        {
                            if (totalTime % 0.5f < 0.25f)
                            {
                                borderPresenter.Color = ColorTheme.Current.SceneView.ExposedItemActiveBorder;
                            }
                            label.Visible = true;
                            if (clickArea.Input.WasMousePressed())
                            {
                                if (!input.IsKeyPressed(MultiSelectKey))
                                {
                                    Core.Operations.ClearRowSelection.Perform();
                                    Core.Operations.SelectNode.Perform(widget);
                                    Closed = true;
                                }
                                else
                                {
                                    var isSelected = Document.Current.SelectedNodes().Contains(widget);
                                    Core.Operations.SelectNode.Perform(widget, !isSelected);
                                }
                            }
                        }
                        else
                        {
                            label.Visible = showLabel;
                        }
                    });
                }
示例#5
0
                public Item(Widget widget, Frame frame, WidgetInput input, bool showLabel)
                {
                    this.frame = frame;
                    var totalTime = 0d;

                    originalWidget = widget;
                    exposedWidget  = (Widget)widget.Clone();
                    exposedWidget.Animations.Clear();
                    originalTransform = (widget.LocalToWorldTransform * SceneView.Instance.CalcTransitionFromSceneSpace(frame)).ToTransform2();
                    originalWidget.SetTangerineFlag(TangerineFlags.HiddenOnExposition, true);
                    frame.HitTestTarget = true;
                    var clickArea = new Widget {
                        Size = frame.Size, Anchors = Anchors.LeftRightTopBottom, HitTestTarget = true
                    };

                    frame.AddNode(clickArea);
                    label = new ThemedSimpleText {
                        Visible      = showLabel,
                        Position     = new Vector2(3, 2),
                        Color        = ColorTheme.Current.SceneView.Label,
                        Text         = (exposedWidget.Id ?? ""),
                        OverflowMode = TextOverflowMode.Ignore
                    };
                    frame.AddNode(label);
                    frame.AddNode(exposedWidget);
                    borderPresenter = new WidgetBoundsPresenter(ColorTheme.Current.SceneView.ExposedItemInactiveBorder, 1);
                    frame.CompoundPresenter.Push(borderPresenter);
                    int lastFrame = 0;

                    foreach (var node in exposedWidget.Nodes)
                    {
                        foreach (var animator in node.Animators)
                        {
                            foreach (var key in animator.ReadonlyKeys)
                            {
                                lastFrame = Math.Max(lastFrame, key.Frame);
                            }
                        }
                    }
                    frame.Tasks.AddLoop(() => {
                        borderPresenter.Color = Document.Current.SelectedNodes().Contains(widget) ?
                                                ColorTheme.Current.SceneView.ExposedItemSelectedBorder :
                                                ColorTheme.Current.SceneView.ExposedItemInactiveBorder;
                        totalTime += Lime.Task.Current.Delta;
                        if (clickArea.IsMouseOver())
                        {
                            if (totalTime % 0.5f < 0.25f)
                            {
                                borderPresenter.Color = ColorTheme.Current.SceneView.ExposedItemActiveBorder;
                            }
                            label.Visible = true;
                            if (clickArea.Input.WasMousePressed())
                            {
                                if (!input.IsKeyPressed(MultiSelectKey))
                                {
                                    Document.Current.History.DoTransaction(() => {
                                        Core.Operations.ClearRowSelection.Perform();
                                        Core.Operations.SelectNode.Perform(widget);
                                    });
                                    Closed = true;
                                }
                                else
                                {
                                    var isSelected = Document.Current.SelectedNodes().Contains(widget);
                                    Document.Current.History.DoTransaction(() => {
                                        Core.Operations.SelectNode.Perform(widget, !isSelected);
                                    });
                                }
                            }
                        }
                        else
                        {
                            label.Visible = showLabel;
                        }
                        if (exposedWidget.DefaultAnimation.Frame <= lastFrame)
                        {
                            savedTime = totalTime;
                        }
                        if (totalTime - savedTime > 1)
                        {
                            exposedWidget.DefaultAnimation.Frame = 0;
                        }
                    });
                }