This commit is contained in:
parent
95f6ec9ce4
commit
a2cbcc64f4
2 changed files with 15 additions and 47 deletions
|
|
@ -1,3 +1,3 @@
|
|||
// pub mod slide_text;
|
||||
pub mod draggable;
|
||||
pub mod slide_text;
|
||||
pub mod verse_editor;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue