public override void ProcessUserAction(eUserAction action, double param) { NeedsUpdate = true; double oldOffset; switch (action) { case eUserAction.YOffset: oldOffset = DisplayYOffset; param += oldOffset; param = Math.Min(10 * DirectXHeight, param); DisplayYOffset = Math.Max(-10 * DirectXHeight, param); if (oldOffset != DisplayYOffset) { UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; case eUserAction.YZoomIn: if (YZoomFactor < YZoomFactorMax) { DisplayYOffset = (LastMousePos.Y + DisplayYOffset) * YZoomStep - LastMousePos.Y; YZoomFactor *= YZoomStep; /* call ourselves again for min/max fitting */ ProcessUserAction(eUserAction.YOffset, 0); UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; case eUserAction.YZoomOut: if (YZoomFactor > YZoomFactorMin) { DisplayYOffset = (LastMousePos.Y + DisplayYOffset) / YZoomStep - LastMousePos.Y; YZoomFactor /= YZoomStep; /* call ourselves again for min/max fitting */ ProcessUserAction(eUserAction.YOffset, 0); UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; default: base.ProcessUserAction(action, param); break; } NeedsRender = true; }
public override void ProcessUserAction(eUserAction action, double param) { NeedsUpdate = true; double oldOffset; switch (action) { case eUserAction.XOffset: oldOffset = DisplayXOffset; param += oldOffset; param = Math.Min(DirectXWidth * XZoomFactor, param); DisplayXOffset = Math.Max(-DirectXWidth * XZoomFactor, param); if (oldOffset != DisplayXOffset) { UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; case eUserAction.YOffset: oldOffset = DisplayYOffset; param += oldOffset; param = Math.Min(DirectXHeight * YZoomFactor, param); DisplayYOffset = Math.Max(-DirectXHeight * YZoomFactor, param); if (oldOffset != DisplayYOffset) { UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; case eUserAction.YZoomIn: if (YZoomFactor < YZoomFactorMax) { YZoomFactor *= YZoomStep; XZoomFactor = YZoomFactor; ProcessUserAction(eUserAction.XOffset, 0); ProcessUserAction(eUserAction.YOffset, 0); UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; case eUserAction.YZoomOut: if (YZoomFactor > YZoomFactorMin) { YZoomFactor /= YZoomStep; XZoomFactor = YZoomFactor; ProcessUserAction(eUserAction.XOffset, 0); ProcessUserAction(eUserAction.YOffset, 0); UpdateAxis = true; UpdateCursor = true; UpdateOverlays = true; } break; default: base.ProcessUserAction(action, param); break; } NeedsRender = true; }