From a2cbcc64f47d2f1b493d90db9126dd2c050bd472 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 23 Jan 2026 22:38:09 -0600 Subject: [PATCH] slide_text custom widget base --- src/ui/widgets/mod.rs | 2 +- src/ui/widgets/slide_text.rs | 60 +++++++++--------------------------- 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/src/ui/widgets/mod.rs b/src/ui/widgets/mod.rs index eabd3fd..46325a7 100644 --- a/src/ui/widgets/mod.rs +++ b/src/ui/widgets/mod.rs @@ -1,3 +1,3 @@ -// pub mod slide_text; pub mod draggable; +pub mod slide_text; pub mod verse_editor; diff --git a/src/ui/widgets/slide_text.rs b/src/ui/widgets/slide_text.rs index d393b44..e710c92 100644 --- a/src/ui/widgets/slide_text.rs +++ b/src/ui/widgets/slide_text.rs @@ -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, } 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) -> 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) -> SlideText { SlideText::new(text) } impl Widget for SlideText where - Renderer: renderer::Renderer, + Message: Clone, + Renderer: PrimitiveRenderer, { fn size(&self) -> Size { Size { @@ -105,12 +71,14 @@ where } } -impl From - for Element<'_, Message, Theme, Renderer> +impl<'a, Message, Theme, Renderer> From + 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) } }