void Update() { if (_currentModes.Count == 0 || _isDragging) { return; } EditmodeBase mode = _currentEditmode; if (CursorNotOverEditor()) { SetCursorTexture(null); _currentEditmode = null; return; } bool overObject; if (_currentUpdater.OtherObjectHovered(out _hoveredObject, out overObject)) { UpdateHoveredPathObject(_hoveredObject); } if (overObject) { _hovered = true; for (int i = 0; i < _currentModes.Count; i++) { if (_currentModes[i].Suscribed && _currentModes[i].CheckCondition(_hoveredObject)) { mode = _currentModes[i]; break; } } } else { if (_hovered) { _currentCollection.Hover(false); _hovered = false; } mode = _currentCollection.FreeSpaceEditmode; } if (_currentEditmode != mode) { _currentEditmode = mode; Cursor.SetCursor(_currentEditmode.cursor, _cursorPosition, CursorMode.Auto); SetCursorTexture(_currentEditmode.cursor); } _currentCollection.CheckKeyboardInput(); }
protected override void SetEditmodeOnUpActions(EditmodeBase mode) { EditmodeHandlesPoints handlesPoints = mode as EditmodeHandlesPoints; mode.SetUpFunction(delegate { _updater.UpdateInlineArea(); _hoverData.UnHoverCurrentEverything(); if (handlesPoints.mode == Mode.movePoint) { _handlePointsUpdater.UnselectMultiSelection(); } }); }
/// <summary> /// Every mode has its own Condition which must be met before the mode's action is called. /// </summary> /// <param name="mode"></param> private void SetEditmodeCondition(EditmodeBase mode) { switch (mode.condition) { case PathCondition.CloseToPath: mode.SetPointer(delegate(PathObject item) { return(item.MouseOverPath(ref _hoverData)); }); break; case PathCondition.CloseToOtherEndPoint: mode.SetPointer(delegate(PathObject item) { return(item.CloseToOtherEndPoint(ref _hoverData)); }); break; case PathCondition.CloseToEndPoints: mode.SetPointer(delegate(PathObject item) { return(item.CloseToEndPoints(ref _hoverData)); }); break; case PathCondition.CloseToPathPoints: mode.SetPointer(delegate(PathObject item) { return(item.MouseOverPathPoints(ref _hoverData)); }); break; case PathCondition.CloseToPathHandles: mode.SetPointer(delegate(PathObject item) { return(item.Selected && item.MouseOverPathHandles(ref _hoverData)); }); break; case PathCondition.OverPathObject: mode.SetPointer(delegate(ScalableObject item) { return(item.OverPathObject()); }); break; case PathCondition.CloseToBoundingBoxUp: mode.SetPointer(delegate(ScalableObject item) { return(item.CloseToBoundingBoxPoints(5, 7)); }); break; case PathCondition.CloseToBoundingBoxRight: mode.SetPointer(delegate(ScalableObject item) { return(item.CloseToBoundingBoxPoints(4, 6)); }); break; case PathCondition.CloseToBoundingBoxDiagonal: mode.SetPointer(delegate(ScalableObject item) { return(item.CloseToBoundingBoxPoints(0, 1)); }); break; case PathCondition.CloseToBoundingBoxDiagonalInv: mode.SetPointer(delegate(ScalableObject item) { return(item.CloseToBoundingBoxPoints(2, 3)); }); break; case PathCondition.OverBouncingBox: mode.SetPointer(delegate(ScalableObject item) { return(item.MouseOverObject()); }); break; case PathCondition.FreeSpace: mode.SetPointer(delegate(ScalableObject item) { _hoverData.UnHoverCurrentEverything(); return(true); }); break; case PathCondition.PathObjectHovered: mode.SetPointer(delegate(ScalableObject item) { _hoverData.UnHoverCurrentEverything(); return(Program.Instance.PathObjectHovered()); }); break; } }
protected override void SetEditmodeClickAndDragActions(EditmodeBase mode) { EditmodePathObject pathObject = mode as EditmodePathObject; switch (pathObject.mode) { case Mode.select: mode.SetClickFunction(_pathObjectUpdater.SelectToMove); mode.SetDragFunction(_pathObjectUpdater.Move); break; case Mode.scale: mode.SetClickFunction(_pathObjectUpdater.SelectToScale); mode.SetDragFunction(_pathObjectUpdater.Scale); break; case Mode.move: mode.SetClickFunction(_pathObjectUpdater.SelectToMove); mode.SetDragFunction(_pathObjectUpdater.Move); break; } }
protected override void SetEditmodeClickAndDragActions(EditmodeBase mode) { // pathupdater must be inialized before! EditmodePath path = mode as EditmodePath; switch (path.mode) { case Mode.delete: mode.SetClickFunction(_pathUpdater.DeleteBezierSegment); break; case Mode.add: mode.SetClickFunction(_pathUpdater.InsertBezierSegment); break; case Mode.close: mode.SetClickFunction(_pathUpdater.CloseCurve); break; case Mode.selectEndPoint: mode.SetClickFunction(_pathUpdater.SelectEndPoint); break; } }
protected override void SetEditmodeClickAndDragActions(EditmodeBase mode) { EditmodeHandlesPoints handlesPoints = mode as EditmodeHandlesPoints; switch (handlesPoints.mode) { case Mode.moveHandle: mode.SetClickFunction(delegate { _handlePointsUpdater.SelectPathObject(); _handlePointsUpdater.SelectBezierSegment(HandlesPointsUpdater.SelectionMode.Handle); }); mode.SetDragFunction(delegate { _handlePointsUpdater.UpdateCurrentBezierHandles(); }); break; case Mode.movePoint: mode.SetClickFunction(delegate { _handlePointsUpdater.SelectPathObject(); _handlePointsUpdater.SelectBezierSegment(HandlesPointsUpdater.SelectionMode.Point); }); mode.SetDragFunction(_handlePointsUpdater.MovePoint); break; case Mode.select: mode.SetClickFunction(_handlePointsUpdater.SelectPathObject); break; } }
protected override void SetEditmodeOnUpActions(EditmodeBase mode) { mode.SetUpFunction(_updater.UpdateInlineArea); }
protected override void SetEditmodeOnUpActions(EditmodeBase mode) { mode.SetUpFunction(_pathObjectUpdater.UpdateInlineAreaRenderer); }
protected abstract void SetEditmodeOnUpActions(EditmodeBase mode);
protected abstract void SetEditmodeClickAndDragActions(EditmodeBase mode);