With a `tree-sitter-languages` feature to enable it (Default not enable). Changed this for reduce the application size (From 52 MB to 22MB), Ref #1132 Now default only includes `tree-sitter-json`, if you want more: ```toml [dependencies] gpui-component = { features = ["tree-sitter-languages"] } ``` --- ``` cargo bloat -p hello_world --release -n 10 Finished `release` profile [optimized] target(s) in 0.27s Analyzing target/release/hello_world File .text Size Crate Name 0.4% 1.4% 88.5KiB simple_minify_html simple_minify_html::code_gen::attrs::ATTRS::{{closure}} 0.3% 1.0% 62.1KiB taffy taffy::compute::grid::track_sizing::resolve_intrinsic_track_sizes 0.1% 0.5% 32.6KiB gpui_component gpui_component::theme::theme_color::ThemeColor::dark 0.1% 0.5% 30.0KiB gpui_component gpui_component::theme::theme_color::ThemeColor::light 0.1% 0.5% 29.9KiB html5ever html5ever::tree_builder::TreeBuilder<Handle,Sink>::step 0.1% 0.4% 27.2KiB gpui taffy::compute::flexbox::compute_flexbox_layout 0.1% 0.4% 23.3KiB usvg usvg::text::layout::layout_text 0.1% 0.4% 22.5KiB resvg resvg::filter::apply_inner 0.1% 0.3% 21.4KiB gpui jpeg_decoder::decoder::Decoder<R>::decode_internal 0.1% 0.3% 21.2KiB image_webp image_webp::lossless::LosslessDecoder<R>::decode_image_stream 25.3% 94.3% 5.7MiB And 14091 smaller methods. Use -n N to show more. 26.8% 100.0% 6.0MiB .text section size, the file size is 22.4MiB ```
78 lines
2.4 KiB
Rust
78 lines
2.4 KiB
Rust
use gpui::*;
|
|
use gpui_component::{
|
|
button::{Button, ButtonVariants},
|
|
Root, StyledExt,
|
|
};
|
|
|
|
pub struct HelloWorld;
|
|
|
|
impl Render for HelloWorld {
|
|
fn render(&mut self, _: &mut Window, _: &mut Context<Self>) -> impl IntoElement {
|
|
div()
|
|
.v_flex()
|
|
.gap_2()
|
|
.size_full()
|
|
.items_center()
|
|
.justify_center()
|
|
.text_center()
|
|
.child("Hello, World!")
|
|
.child(
|
|
Button::new("ok")
|
|
.primary()
|
|
.label("Let's Go!")
|
|
.on_click(|_, _, _| println!("Clicked!")),
|
|
)
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let app = Application::new();
|
|
|
|
app.run(move |cx| {
|
|
gpui_component::init(cx);
|
|
|
|
cx.activate(true);
|
|
|
|
let mut window_size = size(px(640.), px(480.));
|
|
if let Some(display) = cx.primary_display() {
|
|
let display_size = display.bounds().size;
|
|
window_size.width = window_size.width.min(display_size.width * 0.85);
|
|
window_size.height = window_size.height.min(display_size.height * 0.85);
|
|
}
|
|
let window_bounds = Bounds::centered(None, window_size, cx);
|
|
|
|
cx.spawn(async move |cx| {
|
|
let options = WindowOptions {
|
|
window_bounds: Some(WindowBounds::Windowed(window_bounds)),
|
|
titlebar: None,
|
|
window_min_size: Some(gpui::Size {
|
|
width: px(640.),
|
|
height: px(480.),
|
|
}),
|
|
kind: WindowKind::Normal,
|
|
#[cfg(target_os = "linux")]
|
|
window_background: gpui::WindowBackgroundAppearance::Transparent,
|
|
#[cfg(target_os = "linux")]
|
|
window_decorations: Some(gpui::WindowDecorations::Client),
|
|
..Default::default()
|
|
};
|
|
|
|
let window = cx
|
|
.open_window(options, |window, cx| {
|
|
let view = cx.new(|_| HelloWorld);
|
|
cx.new(|cx| Root::new(view.into(), window, cx))
|
|
})
|
|
.expect("failed to open window");
|
|
|
|
window
|
|
.update(cx, |_, window, _| {
|
|
window.activate_window();
|
|
window.set_window_title("Example");
|
|
})
|
|
.expect("failed to update window");
|
|
|
|
Ok::<_, anyhow::Error>(())
|
|
})
|
|
.detach();
|
|
});
|
|
}
|