Add a new component called `plot`. It provides a low-level approach to data analysis and visualization. Chart is a collection of ready-to-use chart components built with `plot`. | Light | Dark | | - | - | | <img width="1712" alt="SCR-20250604-qhxb" src="https://github.com/user-attachments/assets/bf7ce76e-ab7a-42c2-92e7-17cd135de66f" /> | <img width="1712" alt="SCR-20250604-qhxr" src="https://github.com/user-attachments/assets/dd3e44ea-bbb5-41a2-8cce-38b316d7d800" /> |
73 lines
2.3 KiB
Rust
73 lines
2.3 KiB
Rust
use proc_macro::TokenStream;
|
|
use quote::quote;
|
|
use syn::{DeriveInput, parse_macro_input};
|
|
|
|
pub fn derive_into_plot(input: TokenStream) -> TokenStream {
|
|
let ast = parse_macro_input!(input as DeriveInput);
|
|
let type_name = &ast.ident;
|
|
let (impl_generics, type_generics, where_clause) = ast.generics.split_for_impl();
|
|
|
|
let expanded = quote! {
|
|
impl #impl_generics gpui::IntoElement for #type_name #type_generics #where_clause {
|
|
type Element = Self;
|
|
|
|
fn into_element(self) -> Self::Element {
|
|
self
|
|
}
|
|
}
|
|
|
|
impl #impl_generics gpui::Element for #type_name #type_generics #where_clause {
|
|
type RequestLayoutState = ();
|
|
type PrepaintState = ();
|
|
|
|
fn id(&self) -> Option<gpui::ElementId> {
|
|
None
|
|
}
|
|
|
|
fn source_location(&self) -> Option<&'static std::panic::Location<'static>> {
|
|
None
|
|
}
|
|
|
|
fn request_layout(
|
|
&mut self,
|
|
_: Option<&gpui::GlobalElementId>,
|
|
_: Option<&gpui::InspectorElementId>,
|
|
window: &mut gpui::Window,
|
|
cx: &mut gpui::App,
|
|
) -> (gpui::LayoutId, Self::RequestLayoutState) {
|
|
let style = gpui::Style {
|
|
size: gpui::Size::full(),
|
|
..Default::default()
|
|
};
|
|
|
|
(window.request_layout(style, None, cx), ())
|
|
}
|
|
|
|
fn prepaint(
|
|
&mut self,
|
|
_: Option<&gpui::GlobalElementId>,
|
|
_: Option<&gpui::InspectorElementId>,
|
|
_: gpui::Bounds<gpui::Pixels>,
|
|
_: &mut Self::RequestLayoutState,
|
|
_: &mut gpui::Window,
|
|
_: &mut gpui::App,
|
|
) -> Self::PrepaintState {
|
|
}
|
|
|
|
fn paint(
|
|
&mut self,
|
|
_: Option<&gpui::GlobalElementId>,
|
|
_: Option<&gpui::InspectorElementId>,
|
|
bounds: gpui::Bounds<gpui::Pixels>,
|
|
_: &mut Self::RequestLayoutState,
|
|
_: &mut Self::PrepaintState,
|
|
window: &mut gpui::Window,
|
|
cx: &mut gpui::App,
|
|
) {
|
|
<Self as Plot>::paint(self, bounds, window, cx)
|
|
}
|
|
}
|
|
};
|
|
|
|
TokenStream::from(expanded)
|
|
}
|