updating and fixing some small performance issues
Some checks are pending
/ test (push) Waiting to run
Some checks are pending
/ test (push) Waiting to run
This commit is contained in:
parent
fd94f1dfa6
commit
a06890d9e1
10 changed files with 911 additions and 712 deletions
1
src/ui/widgets/mod.rs
Normal file
1
src/ui/widgets/mod.rs
Normal file
|
|
@ -0,0 +1 @@
|
|||
// pub mod slide_text;
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
use cosmic::iced::advanced::layout::{self, Layout};
|
||||
use cosmic::iced::advanced::renderer;
|
||||
use cosmic::iced::advanced::widget::{self, Widget};
|
||||
use cosmic::iced::border;
|
||||
use cosmic::iced::mouse;
|
||||
use cosmic::iced::{Color, Element, Length, Rectangle, Size};
|
||||
use femtovg::renderer::WGPURenderer;
|
||||
use femtovg::{Canvas, TextContext};
|
||||
|
||||
pub struct SlideText {
|
||||
text: String,
|
||||
font_size: f32,
|
||||
canvas: Canvas<WGPURenderer>,
|
||||
}
|
||||
|
||||
impl SlideText {
|
||||
pub async fn new(text: &str) -> Self {
|
||||
let backends = wgpu::Backends::PRIMARY;
|
||||
let instance =
|
||||
wgpu::Instance::new(wgpu::InstanceDescriptor {
|
||||
backends,
|
||||
..Default::default()
|
||||
});
|
||||
let surface =
|
||||
instance.create_surface(window.clone()).unwrap();
|
||||
let adapter = cosmic::iced::wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface))
|
||||
.await
|
||||
.expect("Failed to find an appropriate adapter");
|
||||
let (device, queue) = adapter
|
||||
.request_device(
|
||||
&wgpu::DeviceDescriptor {
|
||||
label: None,
|
||||
required_features: adapter.features(),
|
||||
required_limits: wgpu::Limits::default(),
|
||||
memory_hints: wgpu::MemoryHints::Performance,
|
||||
},
|
||||
None,
|
||||
)
|
||||
.await
|
||||
.expect("failed to device it");
|
||||
let renderer = WGPURenderer::new(device, queue);
|
||||
let canvas =
|
||||
Canvas::new_with_text_context(renderer, text_context)
|
||||
.expect("oops femtovg");
|
||||
Self {
|
||||
text: text.to_owned(),
|
||||
font_size: 50.0,
|
||||
canvas,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_canvas(text_context: TextContext) -> Canvas {
|
||||
let renderer = WGPURenderer::new(device, queue);
|
||||
Canvas::new_with_text_context(renderer, text_context)
|
||||
.expect("oops femtovg")
|
||||
}
|
||||
|
||||
pub fn slide_text(text: &str) -> SlideText {
|
||||
SlideText::new(text)
|
||||
}
|
||||
|
||||
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||
for SlideText
|
||||
where
|
||||
Renderer: renderer::Renderer,
|
||||
{
|
||||
fn size(&self) -> Size<Length> {
|
||||
Size {
|
||||
width: Length::Shrink,
|
||||
height: Length::Shrink,
|
||||
}
|
||||
}
|
||||
|
||||
fn layout(
|
||||
&self,
|
||||
_tree: &mut widget::Tree,
|
||||
_renderer: &Renderer,
|
||||
_limits: &layout::Limits,
|
||||
) -> layout::Node {
|
||||
layout::Node::new(Size::new(
|
||||
self.font_size * 2.0,
|
||||
self.font_size * 2.0,
|
||||
))
|
||||
}
|
||||
|
||||
fn draw(
|
||||
&self,
|
||||
_state: &widget::Tree,
|
||||
renderer: &mut Renderer,
|
||||
_theme: &Theme,
|
||||
_style: &renderer::Style,
|
||||
layout: Layout<'_>,
|
||||
_cursor: mouse::Cursor,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
renderer.fill_quad(
|
||||
renderer::Quad {
|
||||
bounds: layout.bounds(),
|
||||
border: border::rounded(self.font_size),
|
||||
..renderer::Quad::default()
|
||||
},
|
||||
Color::BLACK,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
impl<Message, Theme, Renderer> From<SlideText>
|
||||
for Element<'_, Message, Theme, Renderer>
|
||||
where
|
||||
Renderer: renderer::Renderer,
|
||||
{
|
||||
fn from(circle: SlideText) -> Self {
|
||||
Self::new(circle)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue