refactor: move kra to crate
in the interest of reusing that code in a gallery app
This commit is contained in:
parent
db457fc4e7
commit
603678ba34
4 changed files with 14 additions and 43 deletions
13
Cargo.lock
generated
13
Cargo.lock
generated
|
|
@ -1932,6 +1932,7 @@ dependencies = [
|
|||
"iced",
|
||||
"image",
|
||||
"jxl-oxide",
|
||||
"kra-image-integration",
|
||||
"rfd",
|
||||
"size",
|
||||
"zip",
|
||||
|
|
@ -2267,6 +2268,16 @@ version = "3.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
|
||||
|
||||
[[package]]
|
||||
name = "kra-image-integration"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ab1db0e6caced9f4b26057c10ea190c447a8be4fcac03afd7213e35168ad700"
|
||||
dependencies = [
|
||||
"image",
|
||||
"zip",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kurbo"
|
||||
version = "0.10.4"
|
||||
|
|
@ -3100,7 +3111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ license = "AGPL-3.0-or-later"
|
|||
|
||||
[dependencies]
|
||||
dirs = "6.0.0"
|
||||
kra-image-integration = "0.1.0"
|
||||
rfd = "0.17.2"
|
||||
size = "0.5.0"
|
||||
zip = "8.6.0"
|
||||
|
|
|
|||
40
src/kra.rs
40
src/kra.rs
|
|
@ -1,40 +0,0 @@
|
|||
use std::{
|
||||
ffi::OsString,
|
||||
io::{self, Read},
|
||||
};
|
||||
|
||||
use image::{
|
||||
ImageDecoder, ImageError, ImageReader, ImageResult,
|
||||
error::DecodingError,
|
||||
hooks::{self, GenericReader},
|
||||
};
|
||||
use zip::ZipArchive;
|
||||
|
||||
pub fn register() -> bool {
|
||||
hooks::register_decoding_hook(OsString::from("kra"), Box::new(hook))
|
||||
}
|
||||
|
||||
fn hook<'a>(reader: GenericReader<'a>) -> ImageResult<Box<dyn ImageDecoder + 'a>> {
|
||||
let mut zip = ZipArchive::new(reader).map_err(to_image_error)?;
|
||||
|
||||
let mut reader = zip.by_name("mergedimage.png").map_err(to_image_error)?;
|
||||
|
||||
// reading it all and wrapping it with a Cursor
|
||||
// is the only way I know to give it Seek
|
||||
// (which is required by ImageReader)
|
||||
let mut buf = Vec::new();
|
||||
reader.read_to_end(&mut buf)?;
|
||||
|
||||
let image_reader = ImageReader::with_format(io::Cursor::new(buf), image::ImageFormat::Png);
|
||||
|
||||
Ok(Box::new(image_reader.into_decoder()?))
|
||||
}
|
||||
|
||||
fn to_image_error(
|
||||
e: impl Into<Box<dyn std::error::Error + std::marker::Send + Sync + 'static>>,
|
||||
) -> ImageError {
|
||||
ImageError::Decoding(DecodingError::new(
|
||||
image::error::ImageFormatHint::PathExtension("kra".into()),
|
||||
e,
|
||||
))
|
||||
}
|
||||
|
|
@ -15,7 +15,6 @@ use iced::{
|
|||
use image::{EncodableLayout, RgbaImage, imageops};
|
||||
use size::Size;
|
||||
|
||||
mod kra;
|
||||
mod utils;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
|
@ -302,7 +301,7 @@ impl State {
|
|||
|
||||
fn main() -> Result<(), iced::Error> {
|
||||
jxl_oxide::integration::register_image_decoding_hook();
|
||||
kra::register();
|
||||
kra_image_integration::register();
|
||||
|
||||
iced::application(State::new, State::update, State::view)
|
||||
.subscription(State::subscription)
|
||||
|
|
|
|||
Loading…
Reference in a new issue