wip: edit mode overlay

This commit is contained in:
galister
2025-11-12 01:38:04 +09:00
parent afc8804aba
commit 350c931749
14 changed files with 349 additions and 38 deletions

View File

@@ -1,5 +1,5 @@
use glam::{Affine2, Affine3A, Vec2};
use std::sync::Arc;
use std::{any::Any, sync::Arc};
use vulkano::{format::Format, image::view::ImageView};
use crate::{
@@ -25,7 +25,7 @@ pub enum ShouldRender {
Unable,
}
pub trait OverlayBackend {
pub trait OverlayBackend: Any {
/// Called once, before the first frame is rendered
fn init(&mut self, app: &mut AppState) -> anyhow::Result<()>;
fn pause(&mut self, app: &mut AppState) -> anyhow::Result<()>;
@@ -46,7 +46,7 @@ pub trait OverlayBackend {
/// Called to retrieve the effective extent of the image
/// Used for creating swapchains.
///
/// Must be true if should_render was also true on the same frame.
/// Must be Some if should_render was Should or Can on the same frame.
fn frame_meta(&mut self) -> Option<FrameMeta>;
fn on_hover(&mut self, app: &mut AppState, hit: &PointerHit) -> HoverResult;
@@ -69,3 +69,42 @@ pub fn ui_transform(extent: [u32; 2]) -> Affine2 {
let center = Vec2 { x: 0.5, y: 0.5 };
Affine2::from_scale_angle_translation(scale, 0.0, center)
}
pub struct DummyBackend {}
impl OverlayBackend for DummyBackend {
fn init(&mut self, _: &mut AppState) -> anyhow::Result<()> {
Ok(())
}
fn pause(&mut self, _: &mut AppState) -> anyhow::Result<()> {
Ok(())
}
fn resume(&mut self, _: &mut AppState) -> anyhow::Result<()> {
Ok(())
}
fn should_render(&mut self, _: &mut AppState) -> anyhow::Result<ShouldRender> {
Ok(ShouldRender::Unable)
}
fn render(
&mut self,
_: &mut AppState,
_: Arc<ImageView>,
_: &mut CommandBuffers,
_: f32,
) -> anyhow::Result<bool> {
Ok(false)
}
fn frame_meta(&mut self) -> Option<FrameMeta> {
None
}
fn on_hover(&mut self, _: &mut AppState, _: &PointerHit) -> HoverResult {
HoverResult::default()
}
fn on_left(&mut self, _: &mut AppState, _: usize) {}
fn on_pointer(&mut self, _: &mut AppState, _: &PointerHit, _: bool) {}
fn on_scroll(&mut self, _: &mut AppState, _: &PointerHit, _: f32, _: f32) {}
fn get_interaction_transform(&mut self) -> Option<glam::Affine2> {
None
}
}