use crate::colors::Color;
#[cfg(any(feature = "complex_color", feature = "complex_colored_text"))]
use crate::colors::ColorLayer;
use cotis::utils::OwnedOrRef;
use cotis_utils::math::BoundingBox;
use std::fmt::Debug;
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "serialization",
serde(bound(deserialize = "
ExtraData: serde::de::DeserializeOwned
"))
)]
pub struct Rectangle<'a, ExtraData> {
pub info: RenderCommandInfo<'a, ExtraData>,
#[cfg(not(feature = "complex_color"))]
pub color: Color,
#[cfg(feature = "complex_color")]
pub color: ColorLayer,
pub corner_radii: CornerRadii,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "serialization",
serde(bound(deserialize = "
ExtraData: serde::de::DeserializeOwned
"))
)]
pub struct Text<'a, ExtraData> {
pub info: RenderCommandInfo<'a, ExtraData>,
pub text: OwnedOrRef<'a, str>,
#[cfg(not(feature = "complex_colored_text"))]
pub color: Color,
#[cfg(feature = "complex_colored_text")]
pub color: ColorLayer,
pub font_id: u16,
pub font_size: f32,
pub letter_spacing: f32,
pub line_height: f32,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
pub struct CornerRadii {
pub top_left: f32,
pub top_right: f32,
pub bottom_left: f32,
pub bottom_right: f32,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
pub struct BorderWidth {
pub left: f32,
pub right: f32,
pub top: f32,
pub bottom: f32,
pub between_children: f32,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "serialization",
serde(bound(deserialize = "
ExtraData: serde::de::DeserializeOwned
"))
)]
pub struct Border<'a, ExtraData> {
pub info: RenderCommandInfo<'a, ExtraData>,
pub color: Color,
pub corner_radii: CornerRadii,
pub width: BorderWidth,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "serialization",
serde(bound(deserialize = "
ImageElementData: serde::de::DeserializeOwned,
ExtraData: serde::de::DeserializeOwned
"))
)]
pub struct Image<'a, ImageElementData, ExtraData> {
pub info: RenderCommandInfo<'a, ExtraData>,
#[cfg(not(feature = "complex_color"))]
pub background_color: Color,
#[cfg(feature = "complex_color")]
pub background_color: ColorLayer,
pub corner_radii: CornerRadii,
pub data: OwnedOrRef<'a, ImageElementData>,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "serialization",
serde(bound(deserialize = "
ExtraData: serde::de::DeserializeOwned
"))
)]
pub struct ClipStart<'a, ExtraData> {
pub info: RenderCommandInfo<'a, ExtraData>,
pub horizontal: bool,
pub vertical: bool,
pub corner_radii: CornerRadii,
}
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
pub struct ClipEnd;
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "serialization",
serde(bound(deserialize = "
ExtraData: serde::de::DeserializeOwned
"))
)]
pub struct RenderCommandInfo<'a, ExtraData> {
pub bounding_box: BoundingBox,
pub id: u32,
pub z_index: i16,
pub extra_data: Option<OwnedOrRef<'a, ExtraData>>,
}
pub mod render_t_list;
#[cfg(test)]
mod test {
use cotis::utils::OwnedOrRef;
use std::sync::Arc;
fn is_send<T: Send>() {}
#[test]
fn test_render_command() {
is_send::<OwnedOrRef<()>>();
}
fn str_owned_ref(_: OwnedOrRef<str>) {
}
#[test]
fn test_owned_ref() {
let res: String = String::new();
let res: &String = &res;
str_owned_ref(OwnedOrRef::Ref(res));
let s = Arc::new(String::from("hello"));
let by_ref: OwnedOrRef<'_, str> = OwnedOrRef::Ref("hello");
let by_arc: OwnedOrRef<'_, str> = OwnedOrRef::AsOwnedRef(s);
assert_eq!(by_ref.as_ref(), by_arc.as_ref());
}
}