diff options
Diffstat (limited to 'evc/src/block.rs')
-rw-r--r-- | evc/src/block.rs | 40 |
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 + } + } +} |