blockworx_editor/shape/
image.rs1use crate::theme::Style;
2use blockworx_geom::{Rect, Vec2};
3use blockworx_paint::Renderer;
4
5use blockworx_doc::block_model::Asset;
6
7use crate::{
8 render::draw_block_image,
9 shape::{BaseShape, block::resize_rect},
10 state::RenderMode,
11};
12
13#[derive(Clone, Copy)]
20pub struct Artwork<'a> {
21 pub rect: Rect,
22 pub asset: Option<&'a Asset>,
23}
24
25impl BaseShape for Artwork<'_> {
26 fn gui_rect(&self) -> Rect {
27 self.rect
28 }
29
30 fn constrain_resize_delta(&self, delta: Vec2) -> Vec2 {
31 delta
32 }
33
34 fn resizable(&self) -> bool {
35 true
36 }
37
38 fn render_ng<R: Renderer>(&self, mode: RenderMode, painter: &mut Style<'_, R>) {
39 let bbox = self.rect;
40 match mode {
41 RenderMode::Moving { delta } => {
42 draw_block_image(bbox.translate(delta), self.asset, painter);
43 }
44 RenderMode::Selected { .. } => {
45 draw_block_image(bbox, self.asset, painter);
46 crate::render::draw_selection_frame(bbox, None, painter);
47 }
48 RenderMode::Resizing { mode, delta } => {
49 let resized = resize_rect(&bbox, mode, delta);
50 draw_block_image(resized, self.asset, painter);
51 crate::render::draw_selection_frame(resized, Some(mode), painter);
52 }
53 _ => draw_block_image(bbox, self.asset, painter),
56 }
57 }
58}