mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-03 15:14:35 +00:00

Avoid unwrap() and expect() and instead propagate errors all the way down to run_event_loop(), show(), and hide() in the Slint AIP.
55 lines
1.7 KiB
Rust
55 lines
1.7 KiB
Rust
// Copyright © SixtyFPS GmbH <info@slint-ui.com>
|
|
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial
|
|
|
|
use std::rc::{Rc, Weak};
|
|
|
|
use i_slint_core::api::PhysicalSize as PhysicalWindowSize;
|
|
use i_slint_core::window::WindowAdapter;
|
|
|
|
pub struct SkiaRenderer {
|
|
renderer: i_slint_renderer_skia::SkiaRenderer<Rc<winit::window::Window>>,
|
|
}
|
|
|
|
impl super::WinitCompatibleRenderer for SkiaRenderer {
|
|
const NAME: &'static str = "Skia";
|
|
|
|
fn new(window_adapter_weak: &Weak<dyn WindowAdapter>) -> Self {
|
|
Self { renderer: i_slint_renderer_skia::SkiaRenderer::new(window_adapter_weak.clone()) }
|
|
}
|
|
|
|
fn show(
|
|
&self,
|
|
window_builder: winit::window::WindowBuilder,
|
|
) -> Result<Rc<winit::window::Window>, i_slint_core::platform::PlatformError> {
|
|
let window = Rc::new(crate::event_loop::with_window_target(|event_loop| {
|
|
window_builder.build(event_loop.event_loop_target()).unwrap()
|
|
}));
|
|
|
|
let size: winit::dpi::PhysicalSize<u32> = window.inner_size();
|
|
self.renderer.show(window.clone(), PhysicalWindowSize::new(size.width, size.height))?;
|
|
|
|
Ok(window)
|
|
}
|
|
|
|
fn hide(&self) -> Result<(), i_slint_core::platform::PlatformError> {
|
|
self.renderer.hide()
|
|
}
|
|
|
|
fn render(
|
|
&self,
|
|
size: PhysicalWindowSize,
|
|
) -> Result<(), i_slint_core::platform::PlatformError> {
|
|
self.renderer.render(size)
|
|
}
|
|
|
|
fn as_core_renderer(&self) -> &dyn i_slint_core::renderer::Renderer {
|
|
&self.renderer
|
|
}
|
|
|
|
fn resize_event(
|
|
&self,
|
|
size: PhysicalWindowSize,
|
|
) -> Result<(), i_slint_core::platform::PlatformError> {
|
|
self.renderer.resize_event(size)
|
|
}
|
|
}
|