pybevy_sprite/
texture_slicer.rs1use bevy::sprite::TextureSlicer;
2use pyo3::prelude::*;
3
4use crate::{
5 border_rect::PyBorderRect,
6 slice_scale_mode::{PySliceScaleMode, PySliceScaleModeInner},
7};
8
9#[pyclass(name = "TextureSlicer", frozen, eq)]
10#[derive(Debug, Clone, PartialEq)]
11pub struct PyTextureSlicer {
12 border: PyBorderRect,
13 center_scale_mode: PySliceScaleModeInner,
14 sides_scale_mode: PySliceScaleModeInner,
15 max_corner_scale: f32,
16}
17
18#[pymethods]
19impl PyTextureSlicer {
20 #[new]
21 #[pyo3(signature = (
22 border = PyBorderRect::new(pybevy_math::PyVec2::ZERO, pybevy_math::PyVec2::ZERO),
23 center_tile = false,
24 center_stretch_value = 1.0,
25 sides_tile = false,
26 sides_stretch_value = 1.0,
27 max_corner_scale = 1.0,
28 center_scale_mode = None,
29 sides_scale_mode = None
30 ))]
31 pub fn new(
32 border: PyBorderRect,
33 center_tile: bool,
34 center_stretch_value: f32,
35 sides_tile: bool,
36 sides_stretch_value: f32,
37 max_corner_scale: f32,
38 center_scale_mode: Option<PySliceScaleMode>,
39 sides_scale_mode: Option<PySliceScaleMode>,
40 ) -> Self {
41 let center_scale_mode = if let Some(mode) = center_scale_mode {
42 mode.inner
43 } else if center_tile {
44 PySliceScaleModeInner::Tile {
45 stretch_value: center_stretch_value,
46 }
47 } else {
48 PySliceScaleModeInner::Stretch
49 };
50
51 let sides_scale_mode = if let Some(mode) = sides_scale_mode {
52 mode.inner
53 } else if sides_tile {
54 PySliceScaleModeInner::Tile {
55 stretch_value: sides_stretch_value,
56 }
57 } else {
58 PySliceScaleModeInner::Stretch
59 };
60
61 Self {
62 border,
63 center_scale_mode,
64 sides_scale_mode,
65 max_corner_scale,
66 }
67 }
68
69 #[getter]
70 pub fn border(&self) -> PyBorderRect {
71 self.border.clone()
72 }
73
74 #[getter]
75 pub fn max_corner_scale(&self) -> f32 {
76 self.max_corner_scale
77 }
78
79 #[getter]
80 pub fn center_scale_mode(&self) -> PySliceScaleMode {
81 PySliceScaleMode {
82 inner: self.center_scale_mode,
83 }
84 }
85
86 #[getter]
87 pub fn sides_scale_mode(&self) -> PySliceScaleMode {
88 PySliceScaleMode {
89 inner: self.sides_scale_mode,
90 }
91 }
92
93 pub fn __repr__(&self) -> String {
94 format!(
95 "TextureSlicer(border={:?}, center={:?}, sides={:?}, max_corner_scale={})",
96 self.border, self.center_scale_mode, self.sides_scale_mode, self.max_corner_scale
97 )
98 }
99}
100
101impl From<PyTextureSlicer> for TextureSlicer {
102 fn from(slicer: PyTextureSlicer) -> Self {
103 TextureSlicer {
104 border: slicer.border.into(),
105 center_scale_mode: slicer.center_scale_mode.into(),
106 sides_scale_mode: slicer.sides_scale_mode.into(),
107 max_corner_scale: slicer.max_corner_scale,
108 }
109 }
110}
111
112impl From<TextureSlicer> for PyTextureSlicer {
113 fn from(slicer: TextureSlicer) -> Self {
114 PyTextureSlicer {
115 border: slicer.border.into(),
116 center_scale_mode: slicer.center_scale_mode.into(),
117 sides_scale_mode: slicer.sides_scale_mode.into(),
118 max_corner_scale: slicer.max_corner_scale,
119 }
120 }
121}