Skip to content

Commit e935862

Browse files
committed
[ADD] add clear all preview images and fixed toolbars styles #7 #14
1 parent 2a47347 commit e935862

File tree

7 files changed

+74
-6
lines changed

7 files changed

+74
-6
lines changed

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ features = [
3131
'Element',
3232
'Window',
3333
'Node',
34+
'NodeList',
3435
'HtmlElement',
3536
'HtmlCanvasElement',
3637
'CanvasRenderingContext2d',

app/index.css

+18
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ html, body {height: 100%; width:100%; margin: 0; background-color: #ebebf0}
33
display: flex;
44
flex-direction: column;
55
}
6+
#toolbars {
7+
display: flex;
8+
flex-direction: row;
9+
flex-wrap: nowrap;
10+
justify-content: flex-start;
11+
user-select: none;
12+
13+
height: 100%;
14+
}
615
#toolbar {
716
display: flex;
817
flex-direction: row;
@@ -12,6 +21,15 @@ html, body {height: 100%; width:100%; margin: 0; background-color: #ebebf0}
1221

1322
height: 100%;
1423
}
24+
#preview-toolbar {
25+
display: flex;
26+
flex-direction: row;
27+
flex-wrap: nowrap;
28+
justify-content: flex-end;
29+
user-select: none;
30+
31+
height: 100%;
32+
}
1533
.app-main {
1634
display: flex;
1735
flex-direction: row;

app/index.html

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
<body>
1010
<script src="./static.js"></script>
1111
<div class="app">
12-
<div id="toolbar">
12+
<div id="toolbars">
13+
<div id="toolbar"></div>
14+
<div id="preview-toolbar"></div>
1315
</div>
1416

1517
<div class="app-main">

src/generate.rs

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub fn init_generate(state: &Rc<RefCell<State>>) -> Result<(), JsValue> {
3737

3838
let button = create_generate_button(&document, state)?;
3939
generate.append_child(&button)?;
40+
4041
Ok(())
4142
}
4243

src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ pub fn run() -> Result<(), JsValue> {
3232
let body = document.body().expect("Could not find `body` element");
3333
let toolbar = document.get_element_by_id("toolbar").unwrap();
3434
let preview = document.get_element_by_id("preview").unwrap();
35-
//preview.set_inner_html("preview");
3635
let canvas = document.get_element_by_id("draw").unwrap();
3736

3837
// set canvas, preview dimention
@@ -56,6 +55,8 @@ pub fn run() -> Result<(), JsValue> {
5655
format!("width: {}px; height: {}px;", pre_w, pre_h).as_str(),
5756
)?;
5857

58+
toolbar.set_attribute("style", format!("width: {}px;", canvas_w + 5).as_str())?;
59+
5960
let state: Rc<RefCell<state::State>> =
6061
Rc::new(RefCell::new(state::State::new(canvas_w, canvas_h)));
6162

src/state.rs

+4
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ impl State {
8282

8383
//}
8484

85+
pub fn delete_all_images(&mut self) {
86+
self.preview_image = vec![];
87+
}
88+
8589
pub fn get_frame_speed(&self) -> f64 {
8690
self.frame_speed
8791
}

src/toolbar.rs

+45-4
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,15 @@ pub fn init_toolbar(
4646
let clear = create_clear_element(&document, canvas, state)?;
4747
toolbar.append_child(&clear)?;
4848

49+
let preview_toolbar = document.get_element_by_id("preview-toolbar").unwrap();
50+
4951
// add preview
5052
let preview_image_list = create_preview_image_element(&document, canvas, preview, state)?;
51-
toolbar.append_child(&preview_image_list)?;
53+
preview_toolbar.append_child(&preview_image_list)?;
54+
55+
// clear all preview list
56+
let preview_clear = create_preview_clear_element(&document, &preview, state)?;
57+
preview_toolbar.append_child(&preview_clear)?;
5258

5359
Ok(())
5460
}
@@ -220,10 +226,9 @@ fn create_clear_element(
220226
state: &Rc<RefCell<State>>,
221227
) -> Result<Element, JsValue> {
222228
let element = document.create_element("div")?;
223-
element.set_inner_html("Clear");
224229
element.set_attribute(
225230
"style",
226-
"height: 50px; width: 50px; display: flex; align-items: center; justify-content: center; font-size: 11px; border: 1px solid #9b9b9b;",
231+
"height: 50px; width: 50px; display: flex; align-items: center; justify-content: center; font-size: 11px; border: 1px solid #9b9b9b; background-image:url(https://image.flaticon.com/icons/svg/35/35480.svg); background-size: 100%;",
227232
)?;
228233

229234
let context = canvas
@@ -266,7 +271,7 @@ fn create_preview_image_element(
266271
let element = document.create_element("div")?;
267272
element.set_attribute(
268273
"style",
269-
"height: 50px; width: 50px; display: flex; align-items: center; justify-content: center; font-size: 11px; border: 1px solid #9b9b9b; background-image:url(https://image.flaticon.com/icons/svg/1562/1562881.svg); background-size: 100%;",
274+
"height: 50px; width: 50px; display: flex; align-items: center; justify-content: center; background-image:url(https://image.flaticon.com/icons/svg/1562/1562881.svg); background-size: 100%;",
270275
)?;
271276

272277
let canvas = canvas.clone();
@@ -296,3 +301,39 @@ fn create_preview_image_element(
296301

297302
Ok(element)
298303
}
304+
305+
fn create_preview_clear_element(
306+
document: &Document,
307+
preview: &Element,
308+
state: &Rc<RefCell<State>>,
309+
) -> Result<Element, JsValue> {
310+
let element = document.create_element("div")?;
311+
element.set_attribute(
312+
"style",
313+
"height: 50px; width: 50px; margin-left: 1em; display: flex; align-items: center; justify-content: center; background-image:url(https://image.flaticon.com/icons/svg/1276/1276490.svg); background-size: 100%;",
314+
)?;
315+
316+
let state = state.clone();
317+
let preview = preview.clone();
318+
319+
let handle_click = Closure::wrap(Box::new(move || {
320+
let mut child_has = true;
321+
while child_has {
322+
let mut i = preview.child_nodes().length() - 1;
323+
match preview.child_nodes().item(i) {
324+
Some(v) => {
325+
preview.remove_child(&v).unwrap();
326+
}
327+
None => {
328+
child_has = false;
329+
}
330+
}
331+
i -= 1;
332+
}
333+
state.borrow_mut().delete_all_images();
334+
}) as Box<dyn FnMut()>);
335+
element.add_event_listener_with_callback("click", handle_click.as_ref().unchecked_ref())?;
336+
handle_click.forget();
337+
338+
Ok(element)
339+
}

0 commit comments

Comments
 (0)