reflexo/vector/ir/visualize.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
use super::preludes::*;
use crate::StaticHash128;
/// Item representing an `<image/>` element.
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "rkyv", derive(Archive, rDeser, rSer))]
#[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
pub struct ImageItem {
/// The source image data.
pub image: Arc<Image>,
/// The target size of the image.
pub size: Size,
}
/// Item representing an `<image/>` element.
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "rkyv", derive(Archive, rDeser, rSer))]
#[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
pub struct HtmlItem {
/// The sanitized source code.
pub html: ImmutStr,
/// The target size of the image.
pub size: Size,
}
/// Data of an `<image/>` element.
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "rkyv", derive(Archive, rDeser, rSer))]
#[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
pub struct Image {
/// The encoded image data.
pub data: Vec<u8>,
/// The format of the encoded `buffer`.
pub format: ImmutStr,
/// The size of the image.
pub size: Axes<u32>,
/// A text describing the image.
pub alt: Option<ImmutStr>,
/// prehashed image content.
pub hash: Fingerprint,
}
impl Image {
/// Returns the width of the image.
pub fn width(&self) -> u32 {
self.size.x
}
/// Returns the height of the image.
pub fn height(&self) -> u32 {
self.size.y
}
}
/// Prehashed image data.
impl Hash for Image {
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
self.hash.hash(state);
}
}
impl StaticHash128 for Image {
/// Returns the hash of the image data.
fn get_hash(&self) -> u128 {
self.hash.to_u128()
}
}
/// Item representing an `<path/>` element.
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "rkyv", derive(Archive, rDeser, rSer))]
#[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
pub struct PathItem {
/// The path instruction.
pub d: ImmutStr,
/// bbox of the path.
pub size: Option<Size>,
/// The path style.
/// See [`PathStyle`] for more information.
pub styles: Vec<PathStyle>,
}
/// Attributes that is applicable to the [`PathItem`].
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "rkyv", derive(Archive, rDeser, rSer))]
#[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
pub enum PathStyle {
/// `fill` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill>
Fill(ImmutStr),
/// `stroke` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke>
Stroke(ImmutStr),
/// `stroke-linecap` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap>
StrokeLineCap(ImmutStr),
/// `stroke-linejoin` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin>
StrokeLineJoin(ImmutStr),
/// `stroke-miterlimit` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit>
StrokeMitterLimit(Scalar),
/// `stroke-dashoffset` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset>
StrokeDashOffset(Abs),
/// `stroke-dasharray` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray>
StrokeDashArray(Arc<[Abs]>),
/// `stroke-width` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width>
StrokeWidth(Abs),
/// `fill-rule` attribute.
/// See <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule>
FillRule(ImmutStr),
}
/// Item representing an `<pattern/>` element.
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "rkyv", derive(Archive, rDeser, rSer))]
#[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
pub struct PatternItem {
/// The pattern's rendered content.
pub frame: Fingerprint,
/// The pattern's tile size.
pub size: Size,
/// The pattern's tile spacing.
pub spacing: Size,
}