From 091ed9ab47f6b68b16b76a45d51cc6ee1928bfde Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 23 Nov 2021 10:13:08 -0800 Subject: [PATCH] Maximize new windows --- crates/gpui/src/platform.rs | 13 ++++++++++--- crates/gpui/src/platform/mac/window.rs | 19 +++++++++++++++---- crates/gpui/src/platform/test.rs | 13 +++++++++---- crates/zed/src/lib.rs | 7 ++++--- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/crates/gpui/src/platform.rs b/crates/gpui/src/platform.rs index c0229102a0..7a55916043 100644 --- a/crates/gpui/src/platform.rs +++ b/crates/gpui/src/platform.rs @@ -12,7 +12,7 @@ use crate::{ fonts::{FontId, GlyphId, Metrics as FontMetrics, Properties as FontProperties}, geometry::{ rect::{RectF, RectI}, - vector::{vec2f, Vector2F}, + vector::Vector2F, }, text_layout::{LineLayout, RunStyle}, AnyAction, ClipboardItem, Menu, Scene, @@ -105,13 +105,20 @@ pub trait WindowContext { fn present_scene(&mut self, scene: Scene); } +#[derive(Debug)] pub struct WindowOptions<'a> { - pub bounds: RectF, + pub bounds: WindowBounds, pub title: Option<&'a str>, pub titlebar_appears_transparent: bool, pub traffic_light_position: Option, } +#[derive(Debug)] +pub enum WindowBounds { + Maximized, + Fixed(RectF), +} + pub struct PathPromptOptions { pub files: bool, pub directories: bool, @@ -157,7 +164,7 @@ pub trait FontSystem: Send + Sync { impl<'a> Default for WindowOptions<'a> { fn default() -> Self { Self { - bounds: RectF::new(Default::default(), vec2f(1024.0, 768.0)), + bounds: WindowBounds::Maximized, title: Default::default(), titlebar_appears_transparent: Default::default(), traffic_light_position: Default::default(), diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index d2662c57dd..518c91a5f5 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -1,8 +1,11 @@ use crate::{ executor, - geometry::vector::Vector2F, + geometry::{ + rect::RectF, + vector::{vec2f, Vector2F}, + }, keymap::Keystroke, - platform::{self, Event, WindowContext}, + platform::{self, Event, WindowBounds, WindowContext}, Scene, }; use block::ConcreteBlock; @@ -25,7 +28,6 @@ use objc::{ runtime::{Class, Object, Protocol, Sel, BOOL, NO, YES}, sel, sel_impl, }; -use pathfinder_geometry::vector::vec2f; use smol::Timer; use std::{ any::Any, @@ -158,7 +160,11 @@ impl Window { unsafe { let pool = NSAutoreleasePool::new(nil); - let frame = options.bounds.to_ns_rect(); + let frame = match options.bounds { + WindowBounds::Maximized => RectF::new(Default::default(), vec2f(1024., 768.)), + WindowBounds::Fixed(rect) => rect, + } + .to_ns_rect(); let mut style_mask = NSWindowStyleMask::NSClosableWindowMask | NSWindowStyleMask::NSMiniaturizableWindowMask | NSWindowStyleMask::NSResizableWindowMask @@ -177,6 +183,11 @@ impl Window { ); assert!(!native_window.is_null()); + if matches!(options.bounds, WindowBounds::Maximized) { + let screen = native_window.screen(); + native_window.setFrame_display_(screen.visibleFrame(), YES); + } + let device = metal::Device::system_default().expect("could not find default metal device"); diff --git a/crates/gpui/src/platform/test.rs b/crates/gpui/src/platform/test.rs index eda430bc51..984da925f4 100644 --- a/crates/gpui/src/platform/test.rs +++ b/crates/gpui/src/platform/test.rs @@ -1,8 +1,10 @@ -use super::CursorStyle; -use crate::{AnyAction, ClipboardItem}; +use super::{CursorStyle, WindowBounds}; +use crate::{ + geometry::vector::{vec2f, Vector2F}, + AnyAction, ClipboardItem, +}; use anyhow::{anyhow, Result}; use parking_lot::Mutex; -use pathfinder_geometry::vector::Vector2F; use std::{ any::Any, cell::RefCell, @@ -112,7 +114,10 @@ impl super::Platform for Platform { options: super::WindowOptions, _executor: Rc, ) -> Box { - Box::new(Window::new(options.bounds.size())) + Box::new(Window::new(match options.bounds { + WindowBounds::Maximized => vec2f(1024., 768.), + WindowBounds::Fixed(rect) => rect.size(), + })) } fn key_window_id(&self) -> Option { diff --git a/crates/zed/src/lib.rs b/crates/zed/src/lib.rs index 5f5a4b17b1..4590230851 100644 --- a/crates/zed/src/lib.rs +++ b/crates/zed/src/lib.rs @@ -10,9 +10,9 @@ pub use client; pub use editor; use gpui::{ action, - geometry::{rect::RectF, vector::vec2f}, + geometry::vector::vec2f, keymap::Binding, - platform::WindowOptions, + platform::{WindowBounds, WindowOptions}, ModelHandle, MutableAppContext, PathPromptOptions, Task, ViewContext, }; pub use lsp; @@ -122,6 +122,7 @@ fn open_paths(action: &OpenPaths, cx: &mut MutableAppContext) -> Task<()> { let (_, workspace) = cx.add_window(window_options(), |cx| { build_workspace(&WorkspaceParams::from(app_state.as_ref()), cx) }); + // cx.resize_window(window_id); workspace.update(cx, |workspace, cx| { workspace.open_paths(&action.0.paths, cx) }) @@ -164,7 +165,7 @@ fn build_workspace(params: &WorkspaceParams, cx: &mut ViewContext) -> fn window_options() -> WindowOptions<'static> { WindowOptions { - bounds: RectF::new(vec2f(0., 0.), vec2f(1024., 768.)), + bounds: WindowBounds::Maximized, title: None, titlebar_appears_transparent: true, traffic_light_position: Some(vec2f(8., 8.)),