From 0d00185d9f1c83084b9d438c3c8819e74d7fe8fb Mon Sep 17 00:00:00 2001 From: AlexxxRu Date: Thu, 27 Jan 2022 00:04:24 +0300 Subject: [PATCH] Bugfix/drag window (#1108) Call .drag_window() only after Left mouse btn clicked Co-authored-by: Emil Ernerfeldt --- CHANGELOG.md | 2 ++ egui-winit/CHANGELOG.md | 1 + egui-winit/src/epi.rs | 22 ++++++++++++++++------ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69ad2f99..494412e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,10 +38,12 @@ NOTE: [`epaint`](epaint/CHANGELOG.md), [`eframe`](eframe/CHANGELOG.md), [`egui_w ### Fixed 🐛 * Context menu now respects the theme ([#1043](https://github.com/emilk/egui/pull/1043)) * Plot `Orientation` was not public, although fields using this type were ([#1130](https://github.com/emilk/egui/pull/1130)) +* Fixed `enable_drag` for Windows ([#1108](https://github.com/emilk/egui/pull/1108)). ### Contributors 🙏 * [danielkeller](https://github.com/danielkeller): [#1050](https://github.com/emilk/egui/pull/1050). * [juancampa](https://github.com/juancampa): [#1147](https://github.com/emilk/egui/pull/1147). +* [AlexxxRu](https://github.com/alexxxru): [#1108](https://github.com/emilk/egui/pull/1108). ## 0.16.1 - 2021-12-31 - Add back `CtxRef::begin_frame,end_frame` diff --git a/egui-winit/CHANGELOG.md b/egui-winit/CHANGELOG.md index 258e6a85..426fbc6a 100644 --- a/egui-winit/CHANGELOG.md +++ b/egui-winit/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to the `egui-winit` integration will be noted in this file. * Replaced `std::time::Instant` with `instant::Instant` for WebAssembly compatability ([#1023](https://github.com/emilk/egui/pull/1023)) * Shift-scroll will now result in horizontal scrolling on all platforms ([#1136](https://github.com/emilk/egui/pull/1136)). * Require knowledge about max texture side (e.g. `GL_MAX_TEXTURE_SIZE`)) ([#1154](https://github.com/emilk/egui/pull/1154)). +* Fixed `enable_drag` for Windows. Now called only once just after left click ([#1108](https://github.com/emilk/egui/pull/1108)). ## 0.16.0 - 2021-12-29 diff --git a/egui-winit/src/epi.rs b/egui-winit/src/epi.rs index 46f0eed1..f9eeaece 100644 --- a/egui-winit/src/epi.rs +++ b/egui-winit/src/epi.rs @@ -193,6 +193,7 @@ pub struct EpiIntegration { pub app: Box, /// When set, it is time to quit quit: bool, + can_drag_window: bool, } impl EpiIntegration { @@ -227,6 +228,7 @@ impl EpiIntegration { egui_winit: crate::State::new(max_texture_side, window), app, quit: false, + can_drag_window: false, }; slf.setup(window); @@ -264,11 +266,17 @@ impl EpiIntegration { } pub fn on_event(&mut self, event: &winit::event::WindowEvent<'_>) { - use winit::event::WindowEvent; - if *event == WindowEvent::CloseRequested { - self.quit = self.app.on_exit_event(); - } else if *event == WindowEvent::Destroyed { - self.quit = true; + use winit::event::{ElementState, MouseButton, WindowEvent}; + + match event { + WindowEvent::CloseRequested => self.quit = self.app.on_exit_event(), + WindowEvent::Destroyed => self.quit = true, + WindowEvent::MouseInput { + button: MouseButton::Left, + state: ElementState::Pressed, + .. + } => self.can_drag_window = true, + _ => {} } self.egui_winit.on_event(&self.egui_ctx, event); @@ -291,7 +299,9 @@ impl EpiIntegration { .egui_winit .handle_output(window, &self.egui_ctx, egui_output); - let app_output = self.frame.take_app_output(); + let mut app_output = self.frame.take_app_output(); + app_output.drag_window &= self.can_drag_window; // Necessary on Windows; see https://github.com/emilk/egui/pull/1108 + self.can_drag_window = false; if app_output.quit { self.quit = self.app.on_exit_event();