Skip to content

Commit c223af7

Browse files
committed
wasm
1 parent 936b625 commit c223af7

32 files changed

+1061
-800
lines changed

Cargo.lock

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+28-8
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ image = { version = "0.25.1", default-features = false, features = [
6060
"gif",
6161
] }
6262
fir = { version = "3.0.4", package = "fast_image_resize" }
63-
rgb = { version = "0.8.37", features = ["argb"] }
63+
rgb = { version = "0.8.37" }
6464
infer = "0.15.0"
6565
imagesize = "0.12.0"
66-
# line_drawing = "1.0.0"
66+
line_drawing = "1.0.0"
6767
asefile = { version = "0.3.8", optional = true }
6868
libheif-rs = { version = "1.0.0", optional = true }
6969
# jxl-oxide = "0.8.0"
@@ -76,9 +76,7 @@ resvg = { version = "0.41.0", optional = true, default-features = false, feature
7676

7777
# archive
7878
tar = { version = "0.4.40", default-features = false, optional = true }
79-
zip = { version = "0.6.6", default-features = false, features = [
80-
"deflate",
81-
] }
79+
zip = { version = "0.6.6", default-features = false, features = ["deflate"] }
8280

8381
# config
8482
dirs-next = "2.0.0"
@@ -126,11 +124,33 @@ ex_full = ["ex_tar"]
126124
ex_tar = ["dep:tar"]
127125

128126
[target.'cfg(target_family = "wasm")'.dependencies]
129-
console_log = "1.0"
130127
console_error_panic_hook = "0.1.7"
131-
#wasm-bindgen-futures = "0.4.30"
128+
console_log = "1.0"
129+
js-sys = "0.3.69"
132130
wasm-bindgen = "0.2.92"
133-
web-sys = { version = "0.3.69", features = ["Document", "Window", "Element"] }
131+
wasm-bindgen-futures = "0.4.42"
132+
web-sys = { version = "0.3.69", features = [
133+
"Document",
134+
"Element",
135+
"Window",
136+
'CanvasRenderingContext2d',
137+
'DedicatedWorkerGlobalScope',
138+
'ErrorEvent',
139+
'Event',
140+
'Headers',
141+
'ImageData',
142+
'MessageEvent',
143+
'Navigator',
144+
'Request',
145+
'RequestInit',
146+
'RequestMode',
147+
'Response',
148+
'Window',
149+
'Worker',
150+
'WorkerOptions',
151+
'WorkerType',
152+
] }
153+
# wasm_thread = "0.3.0" # nightly only
134154

135155
# [target.'cfg(target_family = "wasm")'.features]
136156
# default = []

README.md

+37-39
Original file line numberDiff line numberDiff line change
@@ -39,39 +39,37 @@ rmg file.zip
3939

4040
# rmg file.gif
4141

42-
rmg --canvas-size 600x600 file.zip
42+
rmg --page-size 600x600 file.zip
4343

44-
rmg --canvas-size 600x600 --config ./assets/config.rs file.zip
44+
rmg --page-size 600x600 --config ./assets/config.rs file.zip
4545
```
4646

4747
## Keymap
4848

49-
|Key | Action |
50-
|:- |:- |
51-
|k/Up | move up |
52-
|j/Down | move down |
53-
|h/Left | move left |
54-
|r/Right | move right |
55-
|g | toggle gesture mode |
56-
|q | quit |
49+
|Key | Action |
50+
|:- |:- |
51+
|`k/Up` | move up |
52+
|`j/Down` | move down |
53+
|`h/Left` | move left |
54+
|`r/Right`| move right |
55+
|`g` | toggle gesture mode |
56+
|`q` | quit |
5757

5858
|Key | Action | Layout |
5959
|:- |:- |:- |
60-
| scroll up | move up | Vertical |
61-
| scroll down | move down | Vertical |
62-
| scroll up | zoom out | Single |
63-
| scroll down | zoom in | Single |
60+
|`scroll up `| move up | Vertical |
61+
|`scroll down`| move down | Vertical |
62+
|`scroll up `| zoom out | Single |
63+
|`scroll down`| zoom in | Single |
6464

65-
|Gesture| Action |
66-
|:- |:- |
67-
|rect | |
68-
|ring | |
65+
|Gesture | Action |
66+
|:- |:- |
67+
|`rect` | |
68+
|`ring` | |
6969

7070
## Config
7171

72-
> config: https://raw.githubusercontent.com/rsuu/rmg/main/assets/config.rs
73-
74-
NOTE: You must create the file first.
72+
First copy [config.rs](https://raw.githubusercontent.com/rsuu/rmg/main/assets/config.rs) into `<config_path>`.
7573

7674
+ Linux: `$HOME/.config/rmg/config.rs`
7775
+ Mac: `$HOME/Library/Application Support/rmg/config.rs`
@@ -81,26 +79,26 @@ see more: https://docs.rs/dirs-next/
8179

8280
## Supported Formats
8381

82+
| Format | Supported | Default | Dependency|
83+
|:- |:- |:- |:- |
84+
|`.jpg` | + | + | |
85+
|`.png` | + | + | |
86+
|`.webp` | + | + | |
87+
|`.heic/avif`| + | | libheif |
88+
|`.gif` | (dev) | + | |
89+
|`.aseprite` | (dev) | | |
90+
|`.svg` | (dev) | | |
91+
8492
| Format | Supported | Default | Dependency|
8593
|:- |:- |:- |:- |
86-
|.jpg | + | + | |
87-
|.png | + | + | |
88-
|.webp | + | + | |
89-
|.heic/avif | + | | libheif |
90-
|.gif | (dev) | + | |
91-
|.aseprite | (dev) | | |
92-
|.svg | (dev) | | |
93-
94-
| Format | Supported | Default | Dependency|
95-
|:- |:- |:- |:- |
96-
|directory | + | + | |
97-
|.tar | + | | |
98-
|.zip/cbz | + | + | |
99-
|.7z | | | |
100-
|.rar | | | |
101-
|.zst | | | |
102-
103-
## Features
94+
|`directory`| + | + | |
95+
|`.tar` | + | | |
96+
|`.zip/cbz` | + | + | |
97+
|`.7z` | | | |
98+
|`.rar` | | | |
99+
|`.zst` | | | |
100+
101+
## Optional Features
104102

105103
```bash
106104
# HEIF/HEIC

assets/config.rs

+30-17
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
fn main() {}
22

33
fn app() -> Any {
4-
Any {
5-
target: "./",
6-
gestures_zip: "./assets/gestures.zip",
7-
gesture_min_score: 0.9,
8-
}
4+
Any { target: "./" }
95
}
106

117
fn window() -> Any {
@@ -19,30 +15,26 @@ fn window() -> Any {
1915

2016
fn canvas() -> Any {
2117
Any {
22-
size: Size {
23-
width: 800,
24-
height: 600,
25-
},
26-
2718
layout: Layout::Vertical {
2819
align: Align::Center,
2920
},
3021

31-
step_x: 100.0,
32-
step_y: 100.0,
33-
3422
cache_limit: 2,
35-
page_dire: PageDirection::Manga,
23+
pre_load_nums: 4,
3624

37-
// RGBA
25+
/// RGBA
3826
bg: 0x00_00_00_00,
3927
}
4028
}
4129

4230
fn page() -> Any {
4331
Any {
44-
image_resize_algo: WrapResizeAlg::Lanczos3,
45-
anime_resize_algo: WrapResizeAlg::Nearest,
32+
size: Size {
33+
width: 800,
34+
height: 600,
35+
},
36+
img_resize_algo: WrapResizeAlg::Lanczos3,
37+
anim_resize_algo: WrapResizeAlg::Nearest,
4638
}
4739
}
4840

@@ -57,3 +49,24 @@ fn once() -> Any {
5749
record_gesture_name: None,
5850
}
5951
}
52+
53+
fn gestures() -> Any {
54+
Any {
55+
data_path: "./assets/gestures.zip",
56+
min_score: 0.9,
57+
}
58+
}
59+
60+
fn layout_double() -> Any {
61+
Any {
62+
/// right to left
63+
reading_dire: Direction::Rtl,
64+
}
65+
}
66+
67+
fn on_scroll() -> Any {
68+
Any {
69+
step_x: 100.0,
70+
step_y: 100.0,
71+
}
72+
}

src/app.rs

+36-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
pub mod window;
2-
31
pub mod buffer;
42
pub mod canvas;
53
pub mod draw;
@@ -8,3 +6,39 @@ pub mod layout;
86
pub mod page;
97
pub mod state;
108
pub mod task;
9+
pub mod view;
10+
pub mod window;
11+
12+
// #[cfg(target_arch = "wasm32")]
13+
mod web;
14+
15+
use crate::{Element, ElementArgs, Frame, Page, State, Style};
16+
17+
pub type Elem = Box<dyn Element<Res = eyre::Result<()>>>;
18+
pub type Elems = Vec<Elem>;
19+
20+
pub struct World {
21+
elems: Elems,
22+
// TODO: center by default
23+
// global value
24+
// offset: Vec2,
25+
}
26+
27+
impl World {
28+
pub fn new(elems: Vec<Page>) -> Self {
29+
let elems = elems
30+
.into_iter()
31+
.map(|elem| Box::new(elem) as Box<dyn Element<Res = eyre::Result<()>>>)
32+
.collect();
33+
34+
Self { elems }
35+
}
36+
37+
pub fn render<'a>(&mut self, args: &'a mut ElementArgs) -> eyre::Result<()> {
38+
for elem in self.elems.iter() {
39+
elem.as_ref().draw(args)?;
40+
}
41+
42+
Ok(())
43+
}
44+
}

0 commit comments

Comments
 (0)