slide_text custom widget base
Some checks failed
/ test (push) Has been cancelled

This commit is contained in:
Chris Cochrun 2026-01-23 22:38:09 -06:00
parent 95f6ec9ce4
commit a2cbcc64f4
2 changed files with 15 additions and 47 deletions

View file

@ -1,3 +1,3 @@
// pub mod slide_text;
pub mod draggable;
pub mod slide_text;
pub mod verse_editor;

View file

@ -4,66 +4,32 @@ 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};
use cosmic::iced_wgpu::primitive::Renderer as PrimitiveRenderer;
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");
pub fn new(text: impl AsRef<str>) -> Self {
let text = text.as_ref();
Self {
text: text.to_owned(),
text: text.to_string(),
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 {
pub fn slide_text(text: impl AsRef<str>) -> SlideText {
SlideText::new(text)
}
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
for SlideText
where
Renderer: renderer::Renderer,
Message: Clone,
Renderer: PrimitiveRenderer,
{
fn size(&self) -> Size<Length> {
Size {
@ -105,12 +71,14 @@ where
}
}
impl<Message, Theme, Renderer> From<SlideText>
for Element<'_, Message, Theme, Renderer>
impl<'a, Message, Theme, Renderer> From<SlideText>
for Element<'a, Message, Theme, Renderer>
where
Renderer: renderer::Renderer,
Message: 'a + Clone,
Theme: 'a,
Renderer: 'a + PrimitiveRenderer,
{
fn from(circle: SlideText) -> Self {
Self::new(circle)
fn from(slide_text: SlideText) -> Self {
Self::new(slide_text)
}
}