Desktop: Forward and Backward mouse button support (#3472)
forward and backward mouse button support
This commit is contained in:
parent
7532bd7260
commit
e44f993095
|
|
@ -1,17 +1,13 @@
|
||||||
use rfd::AsyncFileDialog;
|
use rfd::AsyncFileDialog;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::mpsc::Receiver;
|
use std::sync::mpsc::{Receiver, Sender, SyncSender};
|
||||||
use std::sync::mpsc::Sender;
|
|
||||||
use std::sync::mpsc::SyncSender;
|
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::{Duration, Instant};
|
||||||
use std::time::Instant;
|
|
||||||
use winit::application::ApplicationHandler;
|
use winit::application::ApplicationHandler;
|
||||||
use winit::dpi::PhysicalSize;
|
use winit::dpi::PhysicalSize;
|
||||||
use winit::event::WindowEvent;
|
use winit::event::{ButtonSource, ElementState, MouseButton, WindowEvent};
|
||||||
use winit::event_loop::ActiveEventLoop;
|
use winit::event_loop::{ActiveEventLoop, ControlFlow};
|
||||||
use winit::event_loop::ControlFlow;
|
|
||||||
use winit::window::WindowId;
|
use winit::window::WindowId;
|
||||||
|
|
||||||
use crate::cef;
|
use crate::cef;
|
||||||
|
|
@ -20,7 +16,7 @@ use crate::event::{AppEvent, AppEventScheduler};
|
||||||
use crate::persist::PersistentData;
|
use crate::persist::PersistentData;
|
||||||
use crate::render::{RenderError, RenderState};
|
use crate::render::{RenderError, RenderState};
|
||||||
use crate::window::Window;
|
use crate::window::Window;
|
||||||
use crate::wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, Platform};
|
use crate::wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, InputMessage, MouseKeys, MouseState, Platform};
|
||||||
use crate::wrapper::{DesktopWrapper, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages};
|
use crate::wrapper::{DesktopWrapper, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages};
|
||||||
|
|
||||||
pub(crate) struct App {
|
pub(crate) struct App {
|
||||||
|
|
@ -520,6 +516,32 @@ impl ApplicationHandler for App {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Forward and Back buttons are not supported by CEF and thus need to be directly forwarded the editor
|
||||||
|
WindowEvent::PointerButton {
|
||||||
|
button: ButtonSource::Mouse(button),
|
||||||
|
state: ElementState::Pressed,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let mouse_keys = match button {
|
||||||
|
MouseButton::Back => Some(MouseKeys::BACK),
|
||||||
|
MouseButton::Forward => Some(MouseKeys::FORWARD),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
if let Some(mouse_keys) = mouse_keys {
|
||||||
|
let message = DesktopWrapperMessage::Input(InputMessage::PointerDown {
|
||||||
|
editor_mouse_state: MouseState { mouse_keys, ..Default::default() },
|
||||||
|
modifier_keys: Default::default(),
|
||||||
|
});
|
||||||
|
self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message));
|
||||||
|
|
||||||
|
let message = DesktopWrapperMessage::Input(InputMessage::PointerUp {
|
||||||
|
editor_mouse_state: Default::default(),
|
||||||
|
modifier_keys: Default::default(),
|
||||||
|
});
|
||||||
|
self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ pub(crate) fn handle_window_event(browser: &Browser, input_state: &mut InputStat
|
||||||
MouseButton::Left => cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_LEFT),
|
MouseButton::Left => cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_LEFT),
|
||||||
MouseButton::Right => cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_RIGHT),
|
MouseButton::Right => cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_RIGHT),
|
||||||
MouseButton::Middle => cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_MIDDLE),
|
MouseButton::Middle => cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_MIDDLE),
|
||||||
_ => return, //TODO: Handle Forward and Back button
|
_ => return,
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(host) = browser.host() else { return };
|
let Some(host) = browser.host() else { return };
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
|
||||||
DesktopWrapperMessage::FromWeb(message) => {
|
DesktopWrapperMessage::FromWeb(message) => {
|
||||||
dispatcher.queue_editor_message(*message);
|
dispatcher.queue_editor_message(*message);
|
||||||
}
|
}
|
||||||
|
DesktopWrapperMessage::Input(message) => {
|
||||||
|
dispatcher.queue_editor_message(EditorMessage::InputPreprocessor(message));
|
||||||
|
}
|
||||||
DesktopWrapperMessage::OpenFileDialogResult { path, content, context } => match context {
|
DesktopWrapperMessage::OpenFileDialogResult { path, content, context } => match context {
|
||||||
OpenFileDialogContext::Document => {
|
OpenFileDialogContext::Document => {
|
||||||
dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::OpenDocument { path, content });
|
dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::OpenDocument { path, content });
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,10 @@ use std::path::PathBuf;
|
||||||
|
|
||||||
pub(crate) use graphite_editor::messages::prelude::Message as EditorMessage;
|
pub(crate) use graphite_editor::messages::prelude::Message as EditorMessage;
|
||||||
|
|
||||||
|
pub use graphite_editor::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys};
|
||||||
|
pub use graphite_editor::messages::input_mapper::utility_types::input_mouse::{EditorMouseState as MouseState, EditorPosition as Position, MouseKeys};
|
||||||
|
pub use graphite_editor::messages::prelude::InputPreprocessorMessage as InputMessage;
|
||||||
|
|
||||||
pub use graphite_editor::messages::prelude::DocumentId;
|
pub use graphite_editor::messages::prelude::DocumentId;
|
||||||
pub use graphite_editor::messages::prelude::PreferencesMessageHandler as Preferences;
|
pub use graphite_editor::messages::prelude::PreferencesMessageHandler as Preferences;
|
||||||
pub enum DesktopFrontendMessage {
|
pub enum DesktopFrontendMessage {
|
||||||
|
|
@ -69,6 +73,7 @@ pub enum DesktopFrontendMessage {
|
||||||
|
|
||||||
pub enum DesktopWrapperMessage {
|
pub enum DesktopWrapperMessage {
|
||||||
FromWeb(Box<EditorMessage>),
|
FromWeb(Box<EditorMessage>),
|
||||||
|
Input(InputMessage),
|
||||||
OpenFileDialogResult {
|
OpenFileDialogResult {
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
content: Vec<u8>,
|
content: Vec<u8>,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue