mirror of
https://github.com/itsjunetime/tdf.git
synced 2026-06-02 08:01:47 -04:00
Implement inverting colors
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
- Update ratatui(-image) dependencies
|
||||
- Enable Ctrl+Z/Suspend functionality
|
||||
- Rewrite with mupdf as the backend for much better performance and rendering quality
|
||||
- Support easy inversion of colors via `i` keypress
|
||||
|
||||
# v0.2.0
|
||||
|
||||
|
||||
Generated
+30
@@ -889,6 +889,15 @@ version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
||||
|
||||
[[package]]
|
||||
name = "fdeflate"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
|
||||
dependencies = [
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filedescriptor"
|
||||
version = "0.8.3"
|
||||
@@ -1344,6 +1353,7 @@ dependencies = [
|
||||
"bytemuck",
|
||||
"byteorder-lite",
|
||||
"num-traits",
|
||||
"png",
|
||||
"ravif",
|
||||
"rayon",
|
||||
"zune-core",
|
||||
@@ -1719,6 +1729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b"
|
||||
dependencies = [
|
||||
"adler2",
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2181,6 +2192,19 @@ dependencies = [
|
||||
"plotters-backend",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "png"
|
||||
version = "0.17.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"crc32fast",
|
||||
"fdeflate",
|
||||
"flate2",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "powerfmt"
|
||||
version = "0.2.0"
|
||||
@@ -2718,6 +2742,12 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simd-adler32"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
|
||||
|
||||
[[package]]
|
||||
name = "simd_helpers"
|
||||
version = "0.1.0"
|
||||
|
||||
@@ -191,6 +191,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
to_converter.send(ConverterMsg::GoToPage(page))?;
|
||||
},
|
||||
InputAction::Search(term) => tui_tx.send(RenderNotif::Search(term))?,
|
||||
InputAction::Invert => tui_tx.send(RenderNotif::Invert)?
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+15
-1
@@ -10,7 +10,8 @@ pub enum RenderNotif {
|
||||
Area(Rect),
|
||||
JumpToPage(usize),
|
||||
Search(String),
|
||||
Reload
|
||||
Reload,
|
||||
Invert
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -90,6 +91,7 @@ pub fn start_rendering(
|
||||
let col_h = size.height / size.rows;
|
||||
|
||||
let mut stored_doc = None;
|
||||
let mut invert = false;
|
||||
|
||||
'reload: loop {
|
||||
let doc = match Document::open(path) {
|
||||
@@ -154,6 +156,13 @@ pub fn start_rendering(
|
||||
($notif:ident) => {
|
||||
match $notif {
|
||||
RenderNotif::Reload => continue 'reload,
|
||||
RenderNotif::Invert => {
|
||||
invert = !invert;
|
||||
for page in &mut rendered {
|
||||
page.successful = false;
|
||||
}
|
||||
continue 'render_pages;
|
||||
}
|
||||
RenderNotif::Area(new_area) => {
|
||||
let bigger =
|
||||
new_area.width > area.width || new_area.height > area.height;
|
||||
@@ -252,6 +261,7 @@ pub fn start_rendering(
|
||||
&page,
|
||||
search_term.as_deref(),
|
||||
rendered_with_no_results,
|
||||
invert,
|
||||
(area_w, area_h)
|
||||
) {
|
||||
// If we've already rendered it just fine and we don't need to render it again,
|
||||
@@ -319,6 +329,7 @@ fn render_single_page_to_ctx(
|
||||
page: &Page,
|
||||
search_term: Option<&str>,
|
||||
already_rendered_no_results: bool,
|
||||
invert: bool,
|
||||
(area_w, area_h): (f32, f32)
|
||||
) -> Result<Option<RenderedContext>, mupdf::error::Error> {
|
||||
let mut max_hits = 10;
|
||||
@@ -378,6 +389,9 @@ fn render_single_page_to_ctx(
|
||||
let matrix = Matrix::new_scale(scale_factor, scale_factor);
|
||||
|
||||
let mut pixmap = page.to_pixmap(&matrix, &colorspace, 0.0, false)?;
|
||||
if invert {
|
||||
pixmap.invert()?;
|
||||
}
|
||||
|
||||
let (x_res, y_res) = pixmap.resolution();
|
||||
let new_x = (x_res as f32 * scale_factor) as i32;
|
||||
|
||||
+3
-1
@@ -414,6 +414,7 @@ impl Tui {
|
||||
)));
|
||||
Some(InputAction::Redraw)
|
||||
}
|
||||
'i' => Some(InputAction::Invert),
|
||||
'n' if self.page < self.rendered.len() - 1 => {
|
||||
// TODO: If we can't find one, then maybe like block until we've verified
|
||||
// all the pages have been checked?
|
||||
@@ -604,7 +605,8 @@ pub enum InputAction {
|
||||
Redraw,
|
||||
JumpingToPage(usize),
|
||||
Search(String),
|
||||
QuitApp
|
||||
QuitApp,
|
||||
Invert
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
|
||||
Reference in New Issue
Block a user