Implement /pgen/4
authorMegaBrutal <code+git@megabrutal.com>
Sat, 24 Dec 2022 20:45:00 +0000 (21:45 +0100)
committerMegaBrutal <code+git@megabrutal.com>
Sat, 24 Dec 2022 20:45:00 +0000 (21:45 +0100)
src/main.rs

index db66481a15179fb10ec8ff1166e18ce95920a402..460364bd2ec8d0f0c11ac9a28046c107aa5ae964 100644 (file)
@@ -428,6 +428,28 @@ async fn img_pgen3(req: HttpRequest, path: web::Path<u32>, canvas2: web::Data<Ar
     Ok(response_image!(cursor))
 }
 
+#[get("/pgen/4/{dim_x}/{dim_y}/{scale}/{wave_offset_x}/{wave_offset_y}/{amplitude}/{freq}/{run}/{wave_color}/{data}")]
+#[allow(clippy::type_complexity)]
+async fn img_pgen4(req: HttpRequest, path: web::Path<(u32, u32, u32, u32, u32, f32, f32, u32)>,
+    canvas1: web::Data<Arc<Mutex<Canvas1>>>) -> Result<impl Responder>
+{
+    let (dim_x, dim_y, scale, wave_offset_x, wave_offset_y, amplitude, freq_base, run) = path.into_inner();
+    let freq_base = freq_base / 1000.0;
+    let wave_color = extract_color!(req, 11)?;
+    let data = extract_data!(req, 12);
+    let img: RgbImage = ({
+        let canvas_option = &mut *canvas1.lock().unwrap();
+        Ok(apply_to_canvas(
+            |mut canvas, signal| {
+                canvas.img = sine_encode(canvas.img, (wave_offset_x, wave_offset_y), amplitude, freq_base, run, wave_color, signal)?;
+                Ok(canvas)
+            },
+            &mut canvas_option.0, Some((dim_x, dim_y)), data)?.img.clone())
+    } as Result<RgbImage, CanvasError>)?;
+    let cursor = image_to_cursor(img, scale)?;
+    Ok(response_image!(cursor))
+}
+
 #[get("/pdrop/{canvas_id}")]
 async fn pdrop(canvas_id: web::Path<u8>,
     canvas0: web::Data<Arc<Mutex<Canvas0>>>,
@@ -471,6 +493,7 @@ async fn main() -> std::io::Result<()> {
             .service(img_pgen1)
             .service(img_pgen2)
             .service(img_pgen3)
+            .service(img_pgen4)
             .service(pdrop)
             .app_data(web::Data::new(canvas0.clone()))
             .app_data(web::Data::new(canvas1.clone()))