mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 22:28:10 +08:00
Desktop: Add support for UI scaling (#3310)
* desktop support ui scaling * fix some warnings * use browser zoom if needed * fix infinite footprint size * fix web canvas scale * always set zoom * use only zoom for scaling * prevent user zoom * remove mouse position scaling
This commit is contained in:
@@ -2,7 +2,7 @@ use graphene_std::Color;
|
||||
use graphene_std::raster::Image;
|
||||
use graphite_editor::messages::app_window::app_window_message_handler::AppWindowPlatform;
|
||||
use graphite_editor::messages::layout::LayoutMessage;
|
||||
use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, FrontendMessage, PortfolioMessage, PreferencesMessage};
|
||||
use graphite_editor::messages::prelude::*;
|
||||
use graphite_editor::messages::tool::tool_messages::tool_prelude::{LayoutTarget, WidgetId};
|
||||
|
||||
use crate::messages::Platform;
|
||||
|
||||
@@ -1,23 +1,7 @@
|
||||
use graphite_editor::messages::prelude::InputPreprocessorMessage;
|
||||
|
||||
use super::DesktopWrapperMessageDispatcher;
|
||||
use super::messages::{DesktopFrontendMessage, EditorMessage};
|
||||
use super::messages::EditorMessage;
|
||||
|
||||
pub(super) fn intercept_editor_message(dispatcher: &mut DesktopWrapperMessageDispatcher, message: EditorMessage) -> Option<EditorMessage> {
|
||||
match message {
|
||||
EditorMessage::InputPreprocessor(message) => {
|
||||
if let InputPreprocessorMessage::BoundsOfViewports { bounds_of_viewports } = &message {
|
||||
let top_left = bounds_of_viewports[0].top_left;
|
||||
let bottom_right = bounds_of_viewports[0].bottom_right;
|
||||
dispatcher.respond(DesktopFrontendMessage::UpdateViewportBounds {
|
||||
x: top_left.x as f32,
|
||||
y: top_left.y as f32,
|
||||
width: (bottom_right.x - top_left.x) as f32,
|
||||
height: (bottom_right.y - top_left.y) as f32,
|
||||
});
|
||||
}
|
||||
Some(EditorMessage::InputPreprocessor(message))
|
||||
}
|
||||
m => Some(m),
|
||||
}
|
||||
pub(super) fn intercept_editor_message(_dispatcher: &mut DesktopWrapperMessageDispatcher, message: EditorMessage) -> Option<EditorMessage> {
|
||||
// TODO: remove it turns out to be unnecessary
|
||||
Some(message)
|
||||
}
|
||||
|
||||
@@ -79,6 +79,9 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
|
||||
FrontendMessage::TriggerMaximizeWindow => {
|
||||
dispatcher.respond(DesktopFrontendMessage::MaximizeWindow);
|
||||
}
|
||||
FrontendMessage::UpdateViewportPhysicalBounds { x, y, width, height } => {
|
||||
dispatcher.respond(DesktopFrontendMessage::UpdateViewportPhysicalBounds { x, y, width, height });
|
||||
}
|
||||
FrontendMessage::TriggerPersistenceWriteDocument { document_id, document, details } => {
|
||||
dispatcher.respond(DesktopFrontendMessage::PersistenceWriteDocument {
|
||||
id: document_id,
|
||||
@@ -133,8 +136,8 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
|
||||
None
|
||||
}
|
||||
|
||||
fn convert_menu_bar_entries_to_menu_items(layout: &Vec<MenuBarEntry>) -> Vec<MenuItem> {
|
||||
layout.iter().filter_map(|entry| convert_menu_bar_entry_to_menu_item(entry)).collect()
|
||||
fn convert_menu_bar_entries_to_menu_items(layout: &[MenuBarEntry]) -> Vec<MenuItem> {
|
||||
layout.iter().filter_map(convert_menu_bar_entry_to_menu_item).collect()
|
||||
}
|
||||
|
||||
fn convert_menu_bar_entry_to_menu_item(
|
||||
@@ -161,13 +164,7 @@ fn convert_menu_bar_entry_to_menu_item(
|
||||
}
|
||||
|
||||
let shortcut = match shortcut {
|
||||
Some(ActionKeys::Keys(LayoutKeysGroup(keys))) => {
|
||||
if let Some(shortcut) = convert_layout_keys_to_shortcut(&keys) {
|
||||
Some(shortcut)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
Some(ActionKeys::Keys(LayoutKeysGroup(keys))) => convert_layout_keys_to_shortcut(keys),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
@@ -197,7 +194,7 @@ fn convert_menu_bar_entry_to_menu_item(
|
||||
Some(MenuItem::Action { id, text, shortcut, enabled })
|
||||
}
|
||||
|
||||
fn convert_menu_bar_entry_children_to_menu_items(children: &Vec<Vec<MenuBarEntry>>) -> Vec<MenuItem> {
|
||||
fn convert_menu_bar_entry_children_to_menu_items(children: &[Vec<MenuBarEntry>]) -> Vec<MenuItem> {
|
||||
let mut items = Vec::new();
|
||||
for (i, section) in children.iter().enumerate() {
|
||||
for entry in section.iter() {
|
||||
@@ -327,5 +324,5 @@ fn convert_layout_keys_to_shortcut(layout_keys: &Vec<LayoutKey>) -> Option<Short
|
||||
_ => key = None,
|
||||
}
|
||||
}
|
||||
if let Some(key) = key { Some(Shortcut { key, modifiers }) } else { None }
|
||||
key.map(|key| Shortcut { key, modifiers })
|
||||
}
|
||||
|
||||
@@ -25,11 +25,11 @@ pub enum DesktopFrontendMessage {
|
||||
content: Vec<u8>,
|
||||
},
|
||||
OpenUrl(String),
|
||||
UpdateViewportBounds {
|
||||
x: f32,
|
||||
y: f32,
|
||||
width: f32,
|
||||
height: f32,
|
||||
UpdateViewportPhysicalBounds {
|
||||
x: f64,
|
||||
y: f64,
|
||||
width: f64,
|
||||
height: f64,
|
||||
},
|
||||
UpdateOverlays(vello::Scene),
|
||||
MinimizeWindow,
|
||||
|
||||
Reference in New Issue
Block a user