use std::rc::Rc;
use teksilo_tokens::{BorderRole, SurfaceRole};
use crate::build_context::BuildContext;
use crate::signal::Signal;
use crate::widget_id::WidgetId;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WebViewVisualState {
Loading,
Ready,
Error,
}
impl WebViewVisualState {
pub fn surface_role(self) -> SurfaceRole {
match self {
Self::Loading => SurfaceRole::Sunken,
Self::Ready => SurfaceRole::Transparent,
Self::Error => SurfaceRole::StatusError,
}
}
pub fn border_role(self) -> BorderRole {
match self {
Self::Loading => BorderRole::Default,
Self::Ready => BorderRole::Default,
Self::Error => BorderRole::Error,
}
}
}
#[derive(Clone)]
pub struct WebViewStyleConfig {
pub state: Signal<WebViewVisualState>,
pub focused: Signal<bool>,
pub content: WidgetId,
}
pub trait WebViewStyle: 'static {
fn make_body(&self, cfg: &WebViewStyleConfig, ctx: &mut BuildContext) -> WidgetId;
}
pub type SharedWebViewStyle = Rc<dyn WebViewStyle>;