mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-05 09:28:12 +08:00
Desktop: Fix window maximize and minimize (#3200)
Fix window maximize and minimize state
This commit is contained in:
+11
-2
@@ -166,10 +166,15 @@ impl App {
|
|||||||
graphics_state.set_overlays_scene(scene);
|
graphics_state.set_overlays_scene(scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DesktopFrontendMessage::UpdateWindowState { maximized, minimized } => {
|
DesktopFrontendMessage::MinimizeWindow => {
|
||||||
if let Some(window) = &self.window {
|
if let Some(window) = &self.window {
|
||||||
|
window.set_minimized(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DesktopFrontendMessage::MaximizeWindow => {
|
||||||
|
if let Some(window) = &self.window {
|
||||||
|
let maximized = !window.is_maximized();
|
||||||
window.set_maximized(maximized);
|
window.set_maximized(maximized);
|
||||||
window.set_minimized(minimized);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DesktopFrontendMessage::DragWindow => {
|
DesktopFrontendMessage::DragWindow => {
|
||||||
@@ -352,6 +357,10 @@ impl ApplicationHandler for App {
|
|||||||
WindowEvent::SurfaceResized(size) => {
|
WindowEvent::SurfaceResized(size) => {
|
||||||
let _ = self.cef_window_size_sender.send(size.into());
|
let _ = self.cef_window_size_sender.send(size.into());
|
||||||
self.cef_context.notify_of_resize();
|
self.cef_context.notify_of_resize();
|
||||||
|
if let Some(window) = &self.window {
|
||||||
|
let maximized = window.is_maximized();
|
||||||
|
self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(DesktopWrapperMessage::UpdateMaximized { maximized }));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
WindowEvent::RedrawRequested => {
|
WindowEvent::RedrawRequested => {
|
||||||
let Some(ref mut graphics_state) = self.graphics_state else { return };
|
let Some(ref mut graphics_state) = self.graphics_state else { return };
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use graphene_std::Color;
|
use graphene_std::Color;
|
||||||
use graphene_std::raster::Image;
|
use graphene_std::raster::Image;
|
||||||
use graphite_editor::messages::app_window::app_window_message_handler::AppWindowPlatform;
|
use graphite_editor::messages::app_window::app_window_message_handler::AppWindowPlatform;
|
||||||
use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, PortfolioMessage, PreferencesMessage};
|
use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, FrontendMessage, PortfolioMessage, PreferencesMessage};
|
||||||
|
|
||||||
use crate::messages::Platform;
|
use crate::messages::Platform;
|
||||||
|
|
||||||
@@ -118,6 +118,10 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
|
|||||||
let message = AppWindowMessage::AppWindowUpdatePlatform { platform };
|
let message = AppWindowMessage::AppWindowUpdatePlatform { platform };
|
||||||
dispatcher.queue_editor_message(message.into());
|
dispatcher.queue_editor_message(message.into());
|
||||||
}
|
}
|
||||||
|
DesktopWrapperMessage::UpdateMaximized { maximized } => {
|
||||||
|
let message = FrontendMessage::UpdateMaximized { maximized };
|
||||||
|
dispatcher.queue_editor_message(message.into());
|
||||||
|
}
|
||||||
DesktopWrapperMessage::LoadDocument {
|
DesktopWrapperMessage::LoadDocument {
|
||||||
id,
|
id,
|
||||||
document,
|
document,
|
||||||
|
|||||||
@@ -64,18 +64,18 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
|
|||||||
FrontendMessage::TriggerVisitLink { url } => {
|
FrontendMessage::TriggerVisitLink { url } => {
|
||||||
dispatcher.respond(DesktopFrontendMessage::OpenUrl(url));
|
dispatcher.respond(DesktopFrontendMessage::OpenUrl(url));
|
||||||
}
|
}
|
||||||
FrontendMessage::UpdateWindowState { maximized, minimized } => {
|
|
||||||
dispatcher.respond(DesktopFrontendMessage::UpdateWindowState { maximized, minimized });
|
|
||||||
|
|
||||||
// Forward this to update the UI
|
|
||||||
return Some(message);
|
|
||||||
}
|
|
||||||
FrontendMessage::DragWindow => {
|
FrontendMessage::DragWindow => {
|
||||||
dispatcher.respond(DesktopFrontendMessage::DragWindow);
|
dispatcher.respond(DesktopFrontendMessage::DragWindow);
|
||||||
}
|
}
|
||||||
FrontendMessage::CloseWindow => {
|
FrontendMessage::CloseWindow => {
|
||||||
dispatcher.respond(DesktopFrontendMessage::CloseWindow);
|
dispatcher.respond(DesktopFrontendMessage::CloseWindow);
|
||||||
}
|
}
|
||||||
|
FrontendMessage::TriggerMinimizeWindow => {
|
||||||
|
dispatcher.respond(DesktopFrontendMessage::MinimizeWindow);
|
||||||
|
}
|
||||||
|
FrontendMessage::TriggerMaximizeWindow => {
|
||||||
|
dispatcher.respond(DesktopFrontendMessage::MaximizeWindow);
|
||||||
|
}
|
||||||
FrontendMessage::TriggerPersistenceWriteDocument { document_id, document, details } => {
|
FrontendMessage::TriggerPersistenceWriteDocument { document_id, document, details } => {
|
||||||
dispatcher.respond(DesktopFrontendMessage::PersistenceWriteDocument {
|
dispatcher.respond(DesktopFrontendMessage::PersistenceWriteDocument {
|
||||||
id: document_id,
|
id: document_id,
|
||||||
|
|||||||
@@ -32,10 +32,8 @@ pub enum DesktopFrontendMessage {
|
|||||||
height: f32,
|
height: f32,
|
||||||
},
|
},
|
||||||
UpdateOverlays(vello::Scene),
|
UpdateOverlays(vello::Scene),
|
||||||
UpdateWindowState {
|
MinimizeWindow,
|
||||||
maximized: bool,
|
MaximizeWindow,
|
||||||
minimized: bool,
|
|
||||||
},
|
|
||||||
DragWindow,
|
DragWindow,
|
||||||
CloseWindow,
|
CloseWindow,
|
||||||
PersistenceWriteDocument {
|
PersistenceWriteDocument {
|
||||||
@@ -92,6 +90,9 @@ pub enum DesktopWrapperMessage {
|
|||||||
},
|
},
|
||||||
PollNodeGraphEvaluation,
|
PollNodeGraphEvaluation,
|
||||||
UpdatePlatform(Platform),
|
UpdatePlatform(Platform),
|
||||||
|
UpdateMaximized {
|
||||||
|
maximized: bool,
|
||||||
|
},
|
||||||
LoadDocument {
|
LoadDocument {
|
||||||
id: DocumentId,
|
id: DocumentId,
|
||||||
document: Document,
|
document: Document,
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ use graphite_proc_macros::{ExtractField, message_handler_data};
|
|||||||
#[derive(Debug, Clone, Default, ExtractField)]
|
#[derive(Debug, Clone, Default, ExtractField)]
|
||||||
pub struct AppWindowMessageHandler {
|
pub struct AppWindowMessageHandler {
|
||||||
platform: AppWindowPlatform,
|
platform: AppWindowPlatform,
|
||||||
maximized: bool,
|
|
||||||
minimized: bool,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[message_handler_data]
|
#[message_handler_data]
|
||||||
@@ -14,18 +12,10 @@ impl MessageHandler<AppWindowMessage, ()> for AppWindowMessageHandler {
|
|||||||
fn process_message(&mut self, message: AppWindowMessage, responses: &mut std::collections::VecDeque<Message>, _: ()) {
|
fn process_message(&mut self, message: AppWindowMessage, responses: &mut std::collections::VecDeque<Message>, _: ()) {
|
||||||
match message {
|
match message {
|
||||||
AppWindowMessage::AppWindowMaximize => {
|
AppWindowMessage::AppWindowMaximize => {
|
||||||
self.maximized = !self.maximized;
|
responses.add(FrontendMessage::TriggerMaximizeWindow);
|
||||||
responses.add(FrontendMessage::UpdateWindowState {
|
|
||||||
maximized: self.maximized,
|
|
||||||
minimized: self.minimized,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
AppWindowMessage::AppWindowMinimize => {
|
AppWindowMessage::AppWindowMinimize => {
|
||||||
self.minimized = !self.minimized;
|
responses.add(FrontendMessage::TriggerMinimizeWindow);
|
||||||
responses.add(FrontendMessage::UpdateWindowState {
|
|
||||||
maximized: self.maximized,
|
|
||||||
minimized: self.minimized,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
AppWindowMessage::AppWindowUpdatePlatform { platform } => {
|
AppWindowMessage::AppWindowUpdatePlatform { platform } => {
|
||||||
self.platform = platform;
|
self.platform = platform;
|
||||||
|
|||||||
@@ -120,6 +120,8 @@ pub enum FrontendMessage {
|
|||||||
TriggerVisitLink {
|
TriggerVisitLink {
|
||||||
url: String,
|
url: String,
|
||||||
},
|
},
|
||||||
|
TriggerMinimizeWindow,
|
||||||
|
TriggerMaximizeWindow,
|
||||||
|
|
||||||
// Update prefix: give the frontend a new value or state for it to use
|
// Update prefix: give the frontend a new value or state for it to use
|
||||||
UpdateActiveDocument {
|
UpdateActiveDocument {
|
||||||
@@ -339,9 +341,8 @@ pub enum FrontendMessage {
|
|||||||
UpdatePlatform {
|
UpdatePlatform {
|
||||||
platform: AppWindowPlatform,
|
platform: AppWindowPlatform,
|
||||||
},
|
},
|
||||||
UpdateWindowState {
|
UpdateMaximized {
|
||||||
maximized: bool,
|
maximized: bool,
|
||||||
minimized: bool,
|
|
||||||
},
|
},
|
||||||
DragWindow,
|
DragWindow,
|
||||||
CloseWindow,
|
CloseWindow,
|
||||||
|
|||||||
@@ -302,9 +302,8 @@ export class UpdatePlatform extends JsMessage {
|
|||||||
readonly platform!: AppWindowPlatform;
|
readonly platform!: AppWindowPlatform;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class UpdateWindowState extends JsMessage {
|
export class UpdateMaximized extends JsMessage {
|
||||||
readonly maximized!: boolean;
|
readonly maximized!: boolean;
|
||||||
readonly minimized!: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CloseWindow extends JsMessage {}
|
export class CloseWindow extends JsMessage {}
|
||||||
@@ -1694,7 +1693,7 @@ export const messageMakers: Record<string, MessageMaker> = {
|
|||||||
UpdateLayersPanelControlBarLeftLayout,
|
UpdateLayersPanelControlBarLeftLayout,
|
||||||
UpdateLayersPanelControlBarRightLayout,
|
UpdateLayersPanelControlBarRightLayout,
|
||||||
UpdateLayerWidths,
|
UpdateLayerWidths,
|
||||||
UpdateWindowState,
|
UpdateMaximized,
|
||||||
UpdateMenuBarLayout,
|
UpdateMenuBarLayout,
|
||||||
UpdateMouseCursor,
|
UpdateMouseCursor,
|
||||||
UpdateNodeGraphControlBarLayout,
|
UpdateNodeGraphControlBarLayout,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { writable } from "svelte/store";
|
import { writable } from "svelte/store";
|
||||||
|
|
||||||
import { type Editor } from "@graphite/editor";
|
import { type Editor } from "@graphite/editor";
|
||||||
import { type AppWindowPlatform, UpdatePlatform, UpdateViewportHolePunch, UpdateWindowState } from "@graphite/messages";
|
import { type AppWindowPlatform, UpdatePlatform, UpdateViewportHolePunch, UpdateMaximized as UpdateMaximized } from "@graphite/messages";
|
||||||
|
|
||||||
export function createAppWindowState(editor: Editor) {
|
export function createAppWindowState(editor: Editor) {
|
||||||
const { subscribe, update } = writable({
|
const { subscribe, update } = writable({
|
||||||
@@ -17,9 +17,9 @@ export function createAppWindowState(editor: Editor) {
|
|||||||
return state;
|
return state;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
editor.subscriptions.subscribeJsMessage(UpdateWindowState, (updateWindowState) => {
|
editor.subscriptions.subscribeJsMessage(UpdateMaximized, (updateMaximized) => {
|
||||||
update((state) => {
|
update((state) => {
|
||||||
state.maximized = updateWindowState.maximized;
|
state.maximized = updateMaximized.maximized;
|
||||||
return state;
|
return state;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -307,13 +307,6 @@ impl EditorHandle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Minimizes the application window to the taskbar or dock
|
|
||||||
#[wasm_bindgen(js_name = appWindowMinimize)]
|
|
||||||
pub fn app_window_minimize(&self) {
|
|
||||||
let message = AppWindowMessage::AppWindowMinimize;
|
|
||||||
self.dispatch(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = addPrimaryImport)]
|
#[wasm_bindgen(js_name = addPrimaryImport)]
|
||||||
pub fn add_primary_import(&self) {
|
pub fn add_primary_import(&self) {
|
||||||
self.dispatch(DocumentMessage::AddTransaction);
|
self.dispatch(DocumentMessage::AddTransaction);
|
||||||
@@ -338,6 +331,13 @@ impl EditorHandle {
|
|||||||
self.dispatch(NodeGraphMessage::AddSecondaryExport);
|
self.dispatch(NodeGraphMessage::AddSecondaryExport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Minimizes the application window to the taskbar or dock
|
||||||
|
#[wasm_bindgen(js_name = appWindowMinimize)]
|
||||||
|
pub fn app_window_minimize(&self) {
|
||||||
|
let message = AppWindowMessage::AppWindowMinimize;
|
||||||
|
self.dispatch(message);
|
||||||
|
}
|
||||||
|
|
||||||
/// Toggles minimizing or restoring down the application window
|
/// Toggles minimizing or restoring down the application window
|
||||||
#[wasm_bindgen(js_name = appWindowMaximize)]
|
#[wasm_bindgen(js_name = appWindowMaximize)]
|
||||||
pub fn app_window_maximize(&self) {
|
pub fn app_window_maximize(&self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user