This repository has no description
1use super::canvas;
2use crate::{
3 Color, Fill, Filter, Layer, Object, Point,
4 wasm::{RNG, append_new_div_inside, render_canvas, replace_content_with},
5};
6use wasm_bindgen::prelude::wasm_bindgen;
7
8#[wasm_bindgen(getter_with_clone)]
9pub struct LayerWeb {
10 pub name: String,
11}
12
13#[wasm_bindgen]
14pub fn new_layer(name: &str) -> LayerWeb {
15 canvas().add_or_replace_layer(Layer::new(name));
16 LayerWeb {
17 name: name.to_string(),
18 }
19}
20
21#[wasm_bindgen]
22impl LayerWeb {
23 pub fn render(&self) -> String {
24 render_canvas()
25 }
26
27 pub fn render_into(&self, selector: String) {
28 append_new_div_inside(self.render(), selector)
29 }
30
31 pub fn render_at(self, selector: String) {
32 replace_content_with(self.render(), selector)
33 }
34
35 pub fn paint_all(&self, color: Color, opacity: Option<f32>, filter: Filter) {
36 canvas()
37 .layer_unchecked(&self.name)
38 .paint_all_objects(Fill::Translucent(color, opacity.unwrap_or(1.0)));
39 canvas()
40 .layer_unchecked(&self.name)
41 .filter_all_objects(filter);
42 }
43
44 pub fn random(name: &str) -> Self {
45 unsafe {
46 #[allow(static_mut_refs)]
47 canvas().random_layer(&mut RNG, name);
48 }
49 LayerWeb {
50 name: name.to_string(),
51 }
52 }
53
54 pub fn new_line(
55 &self,
56 name: &str,
57 start: Point,
58 end: Point,
59 thickness: f32,
60 color: Color,
61 ) {
62 canvas()
63 .layer_unchecked(name)
64 .set(name, Object::Line(start, end, thickness).colored(color))
65 }
66 pub fn new_curve_outward(
67 &self,
68 name: &str,
69 start: Point,
70 end: Point,
71 thickness: f32,
72 color: Color,
73 ) {
74 canvas().layer_unchecked(name).set(
75 name,
76 Object::CurveOutward(start, end, thickness).colored(color),
77 )
78 }
79 pub fn new_curve_inward(
80 &self,
81 name: &str,
82 start: Point,
83 end: Point,
84 thickness: f32,
85 color: Color,
86 ) {
87 canvas().layer_unchecked(name).set(
88 name,
89 Object::CurveInward(start, end, thickness).colored(color),
90 )
91 }
92 pub fn new_small_circle(&self, name: &str, center: Point, color: Color) {
93 canvas()
94 .layer_unchecked(name)
95 .set(name, Object::SmallCircle(center).colored(color))
96 }
97 pub fn new_dot(&self, name: &str, center: Point, color: Color) {
98 canvas()
99 .layer_unchecked(name)
100 .set(name, Object::Dot(center).colored(color))
101 }
102 pub fn new_big_circle(&self, name: &str, center: Point, color: Color) {
103 canvas()
104 .layer_unchecked(name)
105 .set(name, Object::BigCircle(center).colored(color))
106 }
107 pub fn new_text(
108 &self,
109 name: &str,
110 anchor: Point,
111 text: String,
112 font_size: f32,
113 color: Color,
114 ) {
115 canvas()
116 .layer_unchecked(name)
117 .set(name, Object::Text(anchor, text, font_size).colored(color))
118 }
119 pub fn new_rectangle(
120 &self,
121 name: &str,
122 topleft: Point,
123 bottomright: Point,
124 color: Color,
125 ) {
126 canvas()
127 .layer_unchecked(name)
128 .set(name, Object::Rectangle(topleft, bottomright).colored(color))
129 }
130}