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); } }
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) }; }
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); }); }
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); }
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); }); }
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); } }