private void DrawSurface_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e) { model.ScrollCount += Math.Sign(e.Delta); //Cap Zoom if (model.ScrollCount < model.ZoomMaxCap) { model.ScrollCount = model.ZoomMaxCap; } if (model.ScrollCount > model.ZoomMinCap) { model.ScrollCount = model.ZoomMinCap; } double oldZoom = model.Zoom; model.Zoom = (float)Math.Pow(1 + (model.ZoomSpeed / 100 * Math.Sign(model.ScrollCount)), Math.Abs(model.ScrollCount)); double oldDelta = (Mouse.GetPosition().X - this._renderWindow.Position.X) - model.OffsetX; double newDelta = oldDelta * (model.Zoom / oldZoom); model.OffsetX += (float)(oldDelta - newDelta); UpdateWindow(); }
private void UpdateWindow() { this.model.Debug_NoRefreshes += 1; // Display Number of Refreshes for Debugging // Process Events this._renderWindow.DispatchEvents(); // Clear Screen this._renderWindow.Clear(model.Theme.BackgroundColor); // Draw Screen // SCROLL SCREEN if (KeyPressed_W) { model.OffsetY += model.ScrollSpeed; } if (KeyPressed_A) { model.OffsetX += model.ScrollSpeed; } if (KeyPressed_S) { model.OffsetY -= model.ScrollSpeed; } if (KeyPressed_D) { model.OffsetX -= model.ScrollSpeed; } // DRAW LINE model.DrawLine(this._renderWindow); // DRAW MARKERS model.DrawMarkers(this._renderWindow); // DRAW EVENTS model.DrawEvents(this._renderWindow); // PAN SCREEN if (IsMouseDown) { float CurrMouseX = Mouse.GetPosition().X - _renderWindow.Position.X; float CurrMouseY = Mouse.GetPosition().Y - _renderWindow.Position.Y; model.OffsetX -= PrevMousePos.X - CurrMouseX; model.OffsetY -= PrevMousePos.Y - CurrMouseY; PrevMousePos = new Vector2f(CurrMouseX, CurrMouseY); } // DRAW TITLE model.DrawTitle(this._renderWindow); // Display Window this._renderWindow.Display(); }
private void DrawSurface_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) { bool closeSideColumn = true; foreach (EventViewModel eventViewModel in model.ListOfEvents) { if (eventViewModel.IsMouseOver(_renderWindow) && eventViewModel != model.EditingEvent) { CloseSideColumn(); OpenSideColumn(eventViewModel); closeSideColumn = false; } } // Close side column if the cursor wasn't dragged if (closeSideColumn && LastClickedPos == new Vector2f(Mouse.GetPosition().X - _renderWindow.Position.X, Mouse.GetPosition().Y - _renderWindow.Position.Y)) { CloseSideColumn(); } }
private void DrawSurface_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { IsMouseDown = true; PrevMousePos = new Vector2f(Mouse.GetPosition().X - _renderWindow.Position.X, Mouse.GetPosition().Y - _renderWindow.Position.Y); LastClickedPos = PrevMousePos; }
private void Window_Loaded(object sender, RoutedEventArgs e) { UpdateWindow(); RefreshScreenStopwatch.Start(); Thread backgroundThread = new Thread(() => { while (_renderWindow.IsOpen) { System.Windows.Application.Current?.Dispatcher.Invoke(DispatcherPriority.Loaded, new Action(() => { // Update Year At Mouse model.YearAtMouse = (int)Math.Round( (Mouse.GetPosition().X - _renderWindow.Position.X - model.OffsetX) / (model.IntervalLengthPx * model.Zoom)); bool Update; if (RefreshScreenStopwatch.ElapsedMilliseconds > RefreshRateInSeconds * 1000) { Update = true; RefreshScreenStopwatch.Restart(); } else { Update = IsMouseDown || KeyPressed_W || KeyPressed_A || KeyPressed_S || KeyPressed_D; } // Check if a note needs to be drawn bool DrawNote = false; foreach (EventViewModel n in model.ListOfEvents) { if (n.IsMouseOver(_renderWindow)) { // Update window so the background color changes Update = true; // Check if Note needs to be drawn if (n.Note != null) { DrawNote = true; if (!DisplayEventNoteStopwatch.IsRunning) { DisplayEventNoteStopwatch.Start(); } if (DisplayEventNoteStopwatch.Elapsed.TotalSeconds > model.DisplayNoteDelayInSeconds) { model.EventToDrawNote = n; } } } } if (!DrawNote) { DisplayEventNoteStopwatch.Stop(); DisplayEventNoteStopwatch.Reset(); model.EventToDrawNote = null; } if (Update) { UpdateWindow(); } } )); } }); backgroundThread.Start(); DrawSurface.Focus(); }