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(&self.name)
38 .paint_all_objects(Fill::Translucent(color, opacity.unwrap_or(1.0)));
39 canvas().layer(&self.name).filter_all_objects(filter);
40 }
41
42 pub fn random(name: &str) -> Self {
43 unsafe {
44 #[allow(static_mut_refs)]
45 canvas().random_layer(&mut RNG, name);
46 }
47 LayerWeb {
48 name: name.to_string(),
49 }
50 }
51
52 pub fn new_line(
53 &self,
54 name: &str,
55 start: Point,
56 end: Point,
57 thickness: f32,
58 color: Color,
59 ) {
60 canvas()
61 .layer(name)
62 .set(name, Object::Line(start, end, thickness).colored(color))
63 }
64 pub fn new_curve_outward(
65 &self,
66 name: &str,
67 start: Point,
68 end: Point,
69 thickness: f32,
70 color: Color,
71 ) {
72 canvas().layer(name).set(
73 name,
74 Object::CurveOutward(start, end, thickness).colored(color),
75 )
76 }
77 pub fn new_curve_inward(
78 &self,
79 name: &str,
80 start: Point,
81 end: Point,
82 thickness: f32,
83 color: Color,
84 ) {
85 canvas().layer(name).set(
86 name,
87 Object::CurveInward(start, end, thickness).colored(color),
88 )
89 }
90 pub fn new_small_circle(&self, name: &str, center: Point, color: Color) {
91 canvas()
92 .layer(name)
93 .set(name, Object::SmallCircle(center).colored(color))
94 }
95 pub fn new_dot(&self, name: &str, center: Point, color: Color) {
96 canvas()
97 .layer(name)
98 .set(name, Object::Dot(center).colored(color))
99 }
100 pub fn new_big_circle(&self, name: &str, center: Point, color: Color) {
101 canvas()
102 .layer(name)
103 .set(name, Object::BigCircle(center).colored(color))
104 }
105 pub fn new_text(
106 &self,
107 name: &str,
108 anchor: Point,
109 text: String,
110 font_size: f32,
111 color: Color,
112 ) {
113 canvas()
114 .layer(name)
115 .set(name, Object::Text(anchor, text, font_size).colored(color))
116 }
117 pub fn new_rectangle(
118 &self,
119 name: &str,
120 topleft: Point,
121 bottomright: Point,
122 color: Color,
123 ) {
124 canvas()
125 .layer(name)
126 .set(name, Object::Rectangle(topleft, bottomright).colored(color))
127 }
128}