mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-28 20:01:33 +00:00
Extract a common App::register_platform_window
This commit is contained in:
parent
f67e2bea29
commit
9b8492a3ba
2 changed files with 88 additions and 129 deletions
|
@ -1924,84 +1924,11 @@ impl MutableAppContext {
|
|||
);
|
||||
root_view.update(this, |view, cx| view.on_focus_in(cx.handle().into(), cx));
|
||||
|
||||
let mut window =
|
||||
let window =
|
||||
this.cx
|
||||
.platform
|
||||
.open_window(window_id, window_options, this.foreground.clone());
|
||||
let presenter = Rc::new(RefCell::new(this.build_presenter(
|
||||
window_id,
|
||||
window.titlebar_height(),
|
||||
window.appearance(),
|
||||
)));
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
let presenter = Rc::downgrade(&presenter);
|
||||
window.on_event(Box::new(move |event| {
|
||||
app.update(|cx| {
|
||||
if let Some(presenter) = presenter.upgrade() {
|
||||
if let Event::KeyDown(KeyDownEvent { keystroke, .. }) = &event {
|
||||
if cx.dispatch_keystroke(window_id, keystroke) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
presenter.borrow_mut().dispatch_event(event, false, cx)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
})
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
window.on_active_status_change(Box::new(move |is_active| {
|
||||
app.update(|cx| cx.window_changed_active_status(window_id, is_active))
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
window.on_resize(Box::new(move || {
|
||||
app.update(|cx| cx.window_was_resized(window_id))
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
window.on_fullscreen(Box::new(move |is_fullscreen| {
|
||||
app.update(|cx| cx.window_was_fullscreen_changed(window_id, is_fullscreen))
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
window.on_close(Box::new(move || {
|
||||
app.update(|cx| cx.remove_window(window_id));
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
window
|
||||
.on_appearance_changed(Box::new(move || app.update(|cx| cx.refresh_windows())));
|
||||
}
|
||||
|
||||
window.set_input_handler(Box::new(WindowInputHandler {
|
||||
app: this.upgrade().0,
|
||||
window_id,
|
||||
}));
|
||||
|
||||
let scene = presenter.borrow_mut().build_scene(
|
||||
window.size(),
|
||||
window.scale_factor(),
|
||||
false,
|
||||
this,
|
||||
);
|
||||
window.present_scene(scene);
|
||||
this.presenters_and_platform_windows
|
||||
.insert(window_id, (presenter.clone(), window));
|
||||
this.register_platform_window(window_id, window);
|
||||
|
||||
(window_id, root_view)
|
||||
})
|
||||
|
@ -2029,47 +1956,91 @@ impl MutableAppContext {
|
|||
);
|
||||
root_view.update(this, |view, cx| view.on_focus_in(cx.handle().into(), cx));
|
||||
|
||||
let mut status_item = this.cx.platform.add_status_item();
|
||||
let presenter = Rc::new(RefCell::new(this.build_presenter(
|
||||
window_id,
|
||||
0.,
|
||||
status_item.appearance(),
|
||||
)));
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
let presenter = Rc::downgrade(&presenter);
|
||||
status_item.on_event(Box::new(move |event| {
|
||||
app.update(|cx| {
|
||||
if let Some(presenter) = presenter.upgrade() {
|
||||
presenter.borrow_mut().dispatch_event(event, false, cx)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
})
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = this.upgrade();
|
||||
status_item
|
||||
.on_appearance_changed(Box::new(move || app.update(|cx| cx.refresh_windows())));
|
||||
}
|
||||
|
||||
let scene = presenter.borrow_mut().build_scene(
|
||||
status_item.size(),
|
||||
status_item.scale_factor(),
|
||||
false,
|
||||
this,
|
||||
);
|
||||
status_item.present_scene(scene);
|
||||
this.presenters_and_platform_windows
|
||||
.insert(window_id, (presenter.clone(), status_item));
|
||||
let status_item = this.cx.platform.add_status_item();
|
||||
this.register_platform_window(window_id, status_item);
|
||||
|
||||
(window_id, root_view)
|
||||
})
|
||||
}
|
||||
|
||||
fn register_platform_window(
|
||||
&mut self,
|
||||
window_id: usize,
|
||||
mut window: Box<dyn platform::Window>,
|
||||
) {
|
||||
let presenter = Rc::new(RefCell::new(self.build_presenter(
|
||||
window_id,
|
||||
window.titlebar_height(),
|
||||
window.appearance(),
|
||||
)));
|
||||
|
||||
{
|
||||
let mut app = self.upgrade();
|
||||
let presenter = Rc::downgrade(&presenter);
|
||||
window.on_event(Box::new(move |event| {
|
||||
app.update(|cx| {
|
||||
if let Some(presenter) = presenter.upgrade() {
|
||||
if let Event::KeyDown(KeyDownEvent { keystroke, .. }) = &event {
|
||||
if cx.dispatch_keystroke(window_id, keystroke) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
presenter.borrow_mut().dispatch_event(event, false, cx)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
})
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = self.upgrade();
|
||||
window.on_active_status_change(Box::new(move |is_active| {
|
||||
app.update(|cx| cx.window_changed_active_status(window_id, is_active))
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = self.upgrade();
|
||||
window.on_resize(Box::new(move || {
|
||||
app.update(|cx| cx.window_was_resized(window_id))
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = self.upgrade();
|
||||
window.on_fullscreen(Box::new(move |is_fullscreen| {
|
||||
app.update(|cx| cx.window_was_fullscreen_changed(window_id, is_fullscreen))
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = self.upgrade();
|
||||
window.on_close(Box::new(move || {
|
||||
app.update(|cx| cx.remove_window(window_id));
|
||||
}));
|
||||
}
|
||||
|
||||
{
|
||||
let mut app = self.upgrade();
|
||||
window.on_appearance_changed(Box::new(move || app.update(|cx| cx.refresh_windows())));
|
||||
}
|
||||
|
||||
window.set_input_handler(Box::new(WindowInputHandler {
|
||||
app: self.upgrade().0,
|
||||
window_id,
|
||||
}));
|
||||
|
||||
let scene =
|
||||
presenter
|
||||
.borrow_mut()
|
||||
.build_scene(window.size(), window.scale_factor(), false, self);
|
||||
window.present_scene(scene);
|
||||
self.presenters_and_platform_windows
|
||||
.insert(window_id, (presenter.clone(), window));
|
||||
}
|
||||
|
||||
pub fn replace_root_view<T, F>(&mut self, window_id: usize, build_root_view: F) -> ViewHandle<T>
|
||||
where
|
||||
T: View,
|
||||
|
|
|
@ -186,29 +186,17 @@ impl platform::Window for StatusItem {
|
|||
self.0.borrow_mut().appearance_changed_callback = Some(callback);
|
||||
}
|
||||
|
||||
fn on_active_status_change(&mut self, _: Box<dyn FnMut(bool)>) {
|
||||
unimplemented!()
|
||||
}
|
||||
fn on_active_status_change(&mut self, _: Box<dyn FnMut(bool)>) {}
|
||||
|
||||
fn on_resize(&mut self, _: Box<dyn FnMut()>) {
|
||||
unimplemented!()
|
||||
}
|
||||
fn on_resize(&mut self, _: Box<dyn FnMut()>) {}
|
||||
|
||||
fn on_fullscreen(&mut self, _: Box<dyn FnMut(bool)>) {
|
||||
unimplemented!()
|
||||
}
|
||||
fn on_fullscreen(&mut self, _: Box<dyn FnMut(bool)>) {}
|
||||
|
||||
fn on_should_close(&mut self, _: Box<dyn FnMut() -> bool>) {
|
||||
unimplemented!()
|
||||
}
|
||||
fn on_should_close(&mut self, _: Box<dyn FnMut() -> bool>) {}
|
||||
|
||||
fn on_close(&mut self, _: Box<dyn FnOnce()>) {
|
||||
unimplemented!()
|
||||
}
|
||||
fn on_close(&mut self, _: Box<dyn FnOnce()>) {}
|
||||
|
||||
fn set_input_handler(&mut self, _: Box<dyn crate::InputHandler>) {
|
||||
unimplemented!()
|
||||
}
|
||||
fn set_input_handler(&mut self, _: Box<dyn crate::InputHandler>) {}
|
||||
|
||||
fn prompt(
|
||||
&self,
|
||||
|
|
Loading…
Reference in a new issue