use crate::{
error::PdfResult, filter::flate::BitsPerComponent, function::Function, objects::Dictionary,
Resolve,
};
use super::freeform::{BitsPerCoordinate, BitsPerFlag};
#[derive(Debug)]
pub struct CoonsPatchMeshShading {
bits_per_coordinate: BitsPerCoordinate,
bits_per_component: BitsPerComponent,
bits_per_flag: BitsPerFlag,
decode: Vec<f32>,
function: Option<Function>,
}
impl CoonsPatchMeshShading {
pub fn from_dict(dict: &mut Dictionary, resolver: &mut dyn Resolve) -> PdfResult<Self> {
let bits_per_coordinate =
BitsPerCoordinate::from_integer(dict.expect_integer("BitsPerCoordinate", resolver)?)?;
let bits_per_component =
BitsPerComponent::from_integer(dict.expect_integer("BitsPerComponent", resolver)?)?;
let bits_per_flag =
BitsPerFlag::from_integer(dict.expect_integer("BitsPerFlag", resolver)?)?;
let decode = dict
.expect_arr("Decode", resolver)?
.into_iter()
.map(|obj| resolver.assert_number(obj))
.collect::<PdfResult<Vec<f32>>>()?;
let function = dict.get_function("Function", resolver)?;
Ok(Self {
bits_per_coordinate,
bits_per_component,
bits_per_flag,
decode,
function,
})
}
}