mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-24 19:10:24 +00:00
a8afc63a91
This PR removes the use of `use gpui::*` in the GPUI examples, as this is not how consumers should be importing GPUI. Release Notes: - N/A
217 lines
7.1 KiB
Rust
217 lines
7.1 KiB
Rust
use gpui::{
|
|
div, point, prelude::*, px, rgb, App, AppContext, Bounds, DisplayId, Hsla, Pixels,
|
|
SharedString, Size, ViewContext, WindowBackgroundAppearance, WindowBounds, WindowKind,
|
|
WindowOptions,
|
|
};
|
|
|
|
struct WindowContent {
|
|
text: SharedString,
|
|
bounds: Bounds<Pixels>,
|
|
bg: Hsla,
|
|
}
|
|
|
|
impl Render for WindowContent {
|
|
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
|
let window_bounds = cx.bounds();
|
|
|
|
div()
|
|
.flex()
|
|
.flex_col()
|
|
.bg(self.bg)
|
|
.size_full()
|
|
.items_center()
|
|
.text_color(rgb(0xffffff))
|
|
.child(self.text.clone())
|
|
.child(
|
|
div()
|
|
.flex()
|
|
.flex_col()
|
|
.text_sm()
|
|
.items_center()
|
|
.size_full()
|
|
.child(format!(
|
|
"origin: {}, {} size: {}, {}",
|
|
self.bounds.origin.x,
|
|
self.bounds.origin.y,
|
|
self.bounds.size.width,
|
|
self.bounds.size.height
|
|
))
|
|
.child(format!(
|
|
"cx.bounds() origin: {}, {} size {}, {}",
|
|
window_bounds.origin.x,
|
|
window_bounds.origin.y,
|
|
window_bounds.size.width,
|
|
window_bounds.size.height
|
|
)),
|
|
)
|
|
}
|
|
}
|
|
|
|
fn build_window_options(display_id: DisplayId, bounds: Bounds<Pixels>) -> WindowOptions {
|
|
WindowOptions {
|
|
// Set the bounds of the window in screen coordinates
|
|
window_bounds: Some(WindowBounds::Windowed(bounds)),
|
|
// Specify the display_id to ensure the window is created on the correct screen
|
|
display_id: Some(display_id),
|
|
titlebar: None,
|
|
window_background: WindowBackgroundAppearance::Transparent,
|
|
focus: false,
|
|
show: true,
|
|
kind: WindowKind::PopUp,
|
|
is_movable: false,
|
|
app_id: None,
|
|
window_min_size: None,
|
|
window_decorations: None,
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
App::new().run(|cx: &mut AppContext| {
|
|
// Create several new windows, positioned in the top right corner of each screen
|
|
let size = Size {
|
|
width: px(350.),
|
|
height: px(75.),
|
|
};
|
|
let margin_offset = px(150.);
|
|
|
|
for screen in cx.displays() {
|
|
let bounds = Bounds {
|
|
origin: point(margin_offset, margin_offset),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Top Left {:?}", screen.id()).into(),
|
|
bg: gpui::red(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: screen.bounds().top_right()
|
|
- point(size.width + margin_offset, -margin_offset),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Top Right {:?}", screen.id()).into(),
|
|
bg: gpui::red(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: screen.bounds().bottom_left()
|
|
- point(-margin_offset, size.height + margin_offset),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Bottom Left {:?}", screen.id()).into(),
|
|
bg: gpui::blue(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: screen.bounds().bottom_right()
|
|
- point(size.width + margin_offset, size.height + margin_offset),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Bottom Right {:?}", screen.id()).into(),
|
|
bg: gpui::blue(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: point(screen.bounds().center().x - size.center().x, margin_offset),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Top Center {:?}", screen.id()).into(),
|
|
bg: gpui::black(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: point(margin_offset, screen.bounds().center().y - size.center().y),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Left Center {:?}", screen.id()).into(),
|
|
bg: gpui::black(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: point(
|
|
screen.bounds().center().x - size.center().x,
|
|
screen.bounds().center().y - size.center().y,
|
|
),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Center {:?}", screen.id()).into(),
|
|
bg: gpui::black(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: point(
|
|
screen.bounds().size.width - size.width - margin_offset,
|
|
screen.bounds().center().y - size.center().y,
|
|
),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Right Center {:?}", screen.id()).into(),
|
|
bg: gpui::black(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
|
|
let bounds = Bounds {
|
|
origin: point(
|
|
screen.bounds().center().x - size.center().x,
|
|
screen.bounds().size.height - size.height - margin_offset,
|
|
),
|
|
size,
|
|
};
|
|
|
|
cx.open_window(build_window_options(screen.id(), bounds), |cx| {
|
|
cx.new_view(|_| WindowContent {
|
|
text: format!("Bottom Center {:?}", screen.id()).into(),
|
|
bg: gpui::black(),
|
|
bounds,
|
|
})
|
|
})
|
|
.unwrap();
|
|
}
|
|
});
|
|
}
|