aboutsummaryrefslogtreecommitdiff
path: root/evc/src/block.rs
diff options
context:
space:
mode:
Diffstat (limited to 'evc/src/block.rs')
-rw-r--r--evc/src/block.rs40
1 files changed, 28 insertions, 12 deletions
diff --git a/evc/src/block.rs b/evc/src/block.rs
index 0a7ace3..24691e8 100644
--- a/evc/src/block.rs
+++ b/evc/src/block.rs
@@ -10,14 +10,15 @@ use crate::{
pub enum Block {
Literal(Vec<Pixel>),
Split(Box<[Block; 2]>),
- Reference {
- translation: Vec2<isize>,
- },
- AdvancedReference {
- translation: Vec2<i8>,
- transform: Mat2<i8>,
- value_scale: i8,
- },
+ Reference { translation: Vec2<isize> },
+ AdvancedReference(AdvancedReference),
+}
+
+#[derive(Clone, Debug)]
+pub struct AdvancedReference {
+ pub translation: Vec2<i8>,
+ pub transform: Mat2<i8>,
+ pub value_scale: i8,
}
impl Block {
@@ -36,11 +37,11 @@ impl Block {
sink.put(2u8)?;
sink.put(Small(*translation))?;
}
- Block::AdvancedReference {
+ Block::AdvancedReference(AdvancedReference {
translation,
transform,
value_scale,
- } => {
+ }) => {
sink.put(3u8)?;
sink.put((*translation, *transform, *value_scale))?;
}
@@ -71,11 +72,11 @@ impl Block {
2 => Block::Reference {
translation: source.get::<Small<Vec2<isize>>>()?.0,
},
- 3 => Block::AdvancedReference {
+ 3 => Block::AdvancedReference(AdvancedReference {
translation: source.get()?,
transform: source.get()?,
value_scale: source.get()?,
- },
+ }),
x => bail!("corrupt block type ({})", x),
})
}
@@ -86,3 +87,18 @@ impl Block {
matches!(self, Block::Literal(..))
}
}
+
+impl Default for AdvancedReference {
+ fn default() -> Self {
+ Self {
+ translation: Vec2 { x: 0, y: 0 },
+ transform: Mat2 {
+ a: 4,
+ b: 0,
+ c: 0,
+ d: 4,
+ },
+ value_scale: 4, // so 1
+ }
+ }
+}