示例#1
0
        public IEnumerator <object> Task()
        {
            var sceneView = SceneView.Instance;
            var input     = sceneView.Input;

            while (true)
            {
                if (input.WasMousePressed() && !input.IsKeyPressed(Key.Shift))
                {
                    var rect      = new Rectangle(sceneView.MousePosition, sceneView.MousePosition);
                    var presenter = new DelegatePresenter <Widget>(w => {
                        w.PrepareRendererState();
                        var t = sceneView.Scene.CalcTransitionToSpaceOf(sceneView.Frame);
                        Renderer.DrawRectOutline(rect.A * t, rect.B * t, ColorTheme.Current.SceneView.MouseSelection);
                    });
                    sceneView.Frame.CompoundPostPresenter.Add(presenter);
                    Document.Current.History.BeginTransaction();
                    try {
                        var clicked       = true;
                        var selectedNodes = Document.Current.SelectedNodes().Editable().ToList();
                        while (input.IsMousePressed())
                        {
                            rect.B   = sceneView.MousePosition;
                            clicked &= (rect.B - rect.A).Length <= 5;
                            if (!clicked)
                            {
                                RefreshSelectedNodes(rect, selectedNodes);
                            }
                            CommonWindow.Current.Invalidate();
                            yield return(null);
                        }
                        if (clicked)
                        {
                            var controlPressed = SceneView.Instance.Input.IsKeyPressed(Key.Control);
                            if (!controlPressed)
                            {
                                Core.Operations.ClearRowSelection.Perform();
                            }
                            foreach (var node in Document.Current.Container.Nodes.Editable())
                            {
                                if (Probe(node, rect.A))
                                {
                                    Core.Operations.SelectNode.Perform(node, !controlPressed || !Document.Current.SelectedNodes().Contains(node));
                                    break;
                                }
                            }
                        }
                        sceneView.Frame.CompoundPostPresenter.Remove(presenter);
                        CommonWindow.Current.Invalidate();
                    } finally {
                        input.ConsumeKey(Key.Mouse0);
                        Document.Current.History.EndTransaction();
                    }
                }
                yield return(null);
            }
        }
示例#2
0
 public Toolbar()
 {
     Padding = new Thickness {
         Left = 4
     };
     MinMaxHeight = Metrics.ToolbarHeight;
     MinWidth     = 50;        // TimelineMetrics.ToolbarMinWidth;
     Presenter    = new DelegatePresenter <Widget>(Render);
     Layout       = new HBoxLayout {
         Spacing = 2, CellDefaults = new LayoutCell(Alignment.Center)
     };
 }
示例#3
0
 public ColorBoxButton(Color4 color)
 {
     Nodes.Clear();
     Size          = MinMaxSize = new Vector2(12, 12);
     PostPresenter = new DelegatePresenter <Widget>(widget => {
         widget.PrepareRendererState();
         Renderer.DrawRect(Vector2.Zero, widget.Size, Color4.White);
         var checkSize = new Vector2(widget.Width / 4, widget.Height / 3);
         for (int i = 0; i < 3; i++)
         {
             var checkPos = new Vector2(widget.Width / 2 + ((i == 1) ? widget.Width / 4 : 0), i * checkSize.Y);
             Renderer.DrawRect(checkPos, checkPos + checkSize, Color4.Black);
         }
         Renderer.DrawRect(Vector2.Zero, widget.Size, color);
         Renderer.DrawRectOutline(Vector2.Zero, widget.Size, ColorTheme.Current.Inspector.BorderAroundKeyframeColorbox);
     });
 }
示例#4
0
 IEnumerator <object> CreateWidgetTask(Type nodeType)
 {
     while (true)
     {
         if (sv.InputArea.IsMouseOver())
         {
             Utils.ChangeCursorIfDefault(MouseCursor.Hand);
         }
         var container = Document.Current.Container as Widget;
         CreateNodeRequestComponent.Consume <Node>(sv.Components);
         if (sv.Input.WasMousePressed() && container != null)
         {
             sv.Input.ConsumeKey(Key.Mouse0);
             var t         = sv.Scene.CalcTransitionToSpaceOf(container);
             var rect      = new Rectangle(sv.MousePosition * t, sv.MousePosition * t);
             var presenter = new DelegatePresenter <Widget>(w => {
                 w.PrepareRendererState();
                 var t2 = container.CalcTransitionToSpaceOf(sv.Frame);
                 DrawRectOutline(rect.A, (rect.A + rect.B) / 2, t2);
                 DrawRectOutline(rect.A, rect.B, t2);
             });
             sv.Frame.CompoundPostPresenter.Add(presenter);
             while (sv.Input.IsMousePressed())
             {
                 rect.B = sv.MousePosition * t;
                 CommonWindow.Current.Invalidate();
                 yield return(null);
             }
             sv.Frame.CompoundPostPresenter.Remove(presenter);
             try {
                 var widget = (Widget)Core.Operations.CreateNode.Perform(nodeType);
                 Core.Operations.SetProperty.Perform(widget, nameof(Widget.Size), rect.B - rect.A);
                 Core.Operations.SetProperty.Perform(widget, nameof(Widget.Position), rect.A + widget.Size / 2);
                 Core.Operations.SetProperty.Perform(widget, nameof(Widget.Pivot), Vector2.Half);
             } catch (InvalidOperationException e) {
                 AlertDialog.Show(e.Message);
             }
             break;
         }
         yield return(null);
     }
     Utils.ChangeCursorIfDefault(MouseCursor.Default);
 }
示例#5
0
            public ColorBoxButton(IDataflowProvider <Color4> colorProvider)
            {
                Nodes.Clear();
                Size = MinMaxSize = new Vector2(25, Theme.Metrics.DefaultButtonSize.Y);
                var color = colorProvider.GetDataflow();

                PostPresenter = new DelegatePresenter <Widget>(widget => {
                    widget.PrepareRendererState();
                    Renderer.DrawRect(Vector2.Zero, widget.Size, Color4.White);
                    color.Poll();
                    var checkSize = new Vector2(widget.Width / 4, widget.Height / 3);
                    for (int i = 0; i < 3; i++)
                    {
                        var checkPos = new Vector2(widget.Width / 2 + ((i == 1) ? widget.Width / 4 : 0), i * checkSize.Y);
                        Renderer.DrawRect(checkPos, checkPos + checkSize, Color4.Black);
                    }
                    Renderer.DrawRect(Vector2.Zero, widget.Size, color.Value);
                    Renderer.DrawRectOutline(Vector2.Zero, widget.Size, ColorTheme.Current.Inspector.BorderAroundKeyframeColorbox);
                });
            }
示例#6
0
        public IEnumerator <object> Task()
        {
            var widget = curveEditor.MainAreaWidget;
            var input  = CommonWindow.Current.Input;

            while (true)
            {
                if (widget.IsMouseOver() && input.WasKeyPressed(Key.Mouse0))
                {
                    input.ConsumeKey(Key.Mouse0);
                    Document.Current.History.BeginTransaction();
                    var initialMousePos    = curveEditor.ContentWidget.LocalMousePosition();
                    var currentMousePos    = initialMousePos;
                    var rectanglePresenter = new DelegatePresenter <Widget>(w => {
                        w.PrepareRendererState();
                        Renderer.DrawRectOutline(initialMousePos, currentMousePos, ColorTheme.Current.TimelineCurveEditor.Selection);
                    });
                    curveEditor.ContentWidget.CompoundPostPresenter.Add(rectanglePresenter);
                    while (input.IsMousePressed())
                    {
                        currentMousePos = curveEditor.ContentWidget.LocalMousePosition();
                        var rect = new Rectangle(initialMousePos, currentMousePos);
                        foreach (var c in curveEditor.Curves)
                        {
                            SelectKeysWithinRectangle(c, rect);
                        }
                        Window.Current.Invalidate();
                        yield return(null);
                    }
                    curveEditor.ContentWidget.CompoundPostPresenter.Remove(rectanglePresenter);
                    Window.Current.Invalidate();
                    Document.Current.History.EndTransaction();
                }
                yield return(null);
            }
        }