Commit 20d936113ffbf3224e962f4ce2761a53a9ac48f2
1 parent
e64f5307
Keep aspect ratio with upload previews
Showing
1 changed file
with
19 additions
and
2 deletions
| @@ -21,11 +21,28 @@ pub(super) async fn upload_preview_logic( mut rx_canvas :broadcast::Receiver<Dom | @@ -21,11 +21,28 @@ pub(super) async fn upload_preview_logic( mut rx_canvas :broadcast::Receiver<Dom | ||
| 21 | let context = canvas | 21 | let context = canvas |
| 22 | . get_context("2d").unwrap().unwrap() | 22 | . get_context("2d").unwrap().unwrap() |
| 23 | . dyn_into::<CanvasRenderingContext2d>().unwrap(); | 23 | . dyn_into::<CanvasRenderingContext2d>().unwrap(); |
| 24 | + let image_width = upload.bitmap().width() as f64; | ||
| 25 | + let image_height = upload.bitmap().height() as f64; | ||
| 26 | + let canvas_width = canvas.width() as f64; | ||
| 27 | + let canvas_height = canvas.height() as f64; | ||
| 28 | + | ||
| 29 | + /* scale with aspect ratio */ | ||
| 30 | + let (ox, oy, width, height) = if image_width > image_height { | ||
| 31 | + let f = canvas_width / image_width; | ||
| 32 | + let dest_height = image_height * f; | ||
| 33 | + let o_y = (canvas_height - dest_height) / 2.0; | ||
| 34 | + (0.0, o_y, canvas_width, dest_height) | ||
| 35 | + } else { | ||
| 36 | + let f = canvas_height / image_height; | ||
| 37 | + let dest_width = image_width * f; | ||
| 38 | + let o_x = (canvas_width - dest_width) / 2.0; | ||
| 39 | + (o_x, 0.0, dest_width, canvas_height) | ||
| 40 | + }; | ||
| 41 | + | ||
| 24 | context | 42 | context |
| 25 | . draw_image_with_image_bitmap_and_dw_and_dh( | 43 | . draw_image_with_image_bitmap_and_dw_and_dh( |
| 26 | &upload.bitmap() | 44 | &upload.bitmap() |
| 27 | - , 0.0, 0.0 | ||
| 28 | - , canvas.width() as f64, canvas.height() as f64 ) | 45 | + , ox, oy, width, height ) |
| 29 | . unwrap(); | 46 | . unwrap(); |
| 30 | } | 47 | } |
| 31 | } | 48 | } |
Please
register
or
login
to post a comment