Skip to content

Commit 8e0e1e7

Browse files
authored
Int rect properties (#2482)
* int rect props * fix tests and impors * Update Camera2D viewport.viewport to viewport.lbwh_int * Update orthographic viewport to lbwh_int * Update perspective viewport to lbwh_int * Update default viewport to lbwh_int * Update surface viewport to lbwh_int * Update camera tests to lbwh_int * oops missed one * Update cameras to lbwh_int
1 parent 91769e2 commit 8e0e1e7

File tree

11 files changed

+40
-26
lines changed

11 files changed

+40
-26
lines changed

arcade/camera/camera_2d.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ def use(self) -> None:
262262
_projection = generate_orthographic_matrix(self.projection_data, self.zoom)
263263
_view = generate_view_matrix(self.view_data)
264264

265-
self._window.ctx.viewport = self.viewport.viewport
266-
self._window.ctx.scissor = None if not self.scissor else self.scissor.viewport
265+
self._window.ctx.viewport = self.viewport.lbwh_int
266+
self._window.ctx.scissor = None if not self.scissor else self.scissor.lbwh_int
267267
self._window.projection = _projection
268268
self._window.view = _view
269269

@@ -295,7 +295,7 @@ def project(self, world_coordinate: Point) -> Vec2:
295295

296296
return project_orthographic(
297297
world_coordinate,
298-
self.viewport.viewport,
298+
self.viewport.lbwh_int,
299299
_view,
300300
_projection,
301301
)
@@ -318,7 +318,7 @@ def unproject(self, screen_coordinate: Point) -> Vec3:
318318

319319
_projection = generate_orthographic_matrix(self.projection_data, self.zoom)
320320
_view = generate_view_matrix(self.view_data)
321-
return unproject_orthographic(screen_coordinate, self.viewport.viewport, _view, _projection)
321+
return unproject_orthographic(screen_coordinate, self.viewport.lbwh_int, _view, _projection)
322322

323323
def equalise(self) -> None:
324324
"""

arcade/camera/default.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def use(self) -> None:
6060
"""
6161
self._ctx.current_camera = self
6262

63-
self._ctx.viewport = self.viewport.viewport # get the integer 4-tuple LBWH
63+
self._ctx.viewport = self.viewport.lbwh_int # get the integer 4-tuple LBWH
6464

6565
self._ctx.view_matrix = Mat4()
6666
self._ctx.projection_matrix = self._projection_matrix
@@ -121,7 +121,7 @@ def use(self) -> None:
121121
cache's the window viewport to determine the projection matrix.
122122
"""
123123

124-
viewport = self.viewport.viewport
124+
viewport = self.viewport.lbwh_int
125125
# If the viewport is correct and the default camera is in use,
126126
# then don't waste time resetting the view and projection matrices
127127
if self._ctx.viewport == viewport and self._ctx.current_camera == self:

arcade/camera/orthographic.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ def use(self) -> None:
126126
_projection = generate_orthographic_matrix(self._projection, self._view.zoom)
127127
_view = generate_view_matrix(self._view)
128128

129-
self._window.ctx.viewport = self.viewport.viewport
130-
self._window.ctx.scissor = None if not self.scissor else self.scissor.viewport
129+
self._window.ctx.viewport = self.viewport.lbwh_int
130+
self._window.ctx.scissor = None if not self.scissor else self.scissor.lbwh_int
131131
self._window.projection = _projection
132132
self._window.view = _view
133133

@@ -165,7 +165,7 @@ def project(self, world_coordinate: Point) -> Vec2:
165165

166166
return project_orthographic(
167167
world_coordinate,
168-
self.viewport.viewport,
168+
self.viewport.lbwh_int,
169169
_view,
170170
_projection,
171171
)
@@ -188,4 +188,4 @@ def unproject(self, screen_coordinate: Point) -> Vec3:
188188

189189
_projection = generate_orthographic_matrix(self._projection, self._view.zoom)
190190
_view = generate_view_matrix(self._view)
191-
return unproject_orthographic(screen_coordinate, self.viewport.viewport, _view, _projection)
191+
return unproject_orthographic(screen_coordinate, self.viewport.lbwh_int, _view, _projection)

arcade/camera/perspective.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ def use(self) -> None:
162162
_projection = generate_perspective_matrix(self._projection, self._view.zoom)
163163
_view = generate_view_matrix(self._view)
164164

165-
self._window.ctx.viewport = self.viewport.viewport
166-
self._window.ctx.scissor = None if not self.scissor else self.scissor.viewport
165+
self._window.ctx.viewport = self.viewport.lbwh_int
166+
self._window.ctx.scissor = None if not self.scissor else self.scissor.lbwh_int
167167
self._window.projection = _projection
168168
self._window.view = _view
169169

@@ -196,7 +196,7 @@ def project(self, world_coordinate: Point) -> Vec2:
196196
_projection = generate_perspective_matrix(self._projection, self._view.zoom)
197197
_view = generate_view_matrix(self._view)
198198

199-
pos = project_perspective(Vec3(x, y, z), self.viewport.viewport, _view, _projection)
199+
pos = project_perspective(Vec3(x, y, z), self.viewport.lbwh_int, _view, _projection)
200200

201201
return pos
202202

@@ -228,5 +228,5 @@ def unproject(self, screen_coordinate: Point) -> Vec3:
228228
_projection = generate_perspective_matrix(self._projection, self._view.zoom)
229229
_view = generate_view_matrix(self._view)
230230

231-
pos = unproject_perspective(Vec3(x, y, z), self.viewport.viewport, _view, _projection)
231+
pos = unproject_perspective(Vec3(x, y, z), self.viewport.lbwh_int, _view, _projection)
232232
return pos

arcade/gui/surface.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ def limit(self, rect: Rect | None = None):
207207
round(w * self._pixel_ratio),
208208
round(h * self._pixel_ratio),
209209
)
210-
self.fbo.viewport = viewport_rect.viewport
210+
self.fbo.viewport = viewport_rect.lbwh_int
211211

212212
self._cam.projection.rect = LBWH(0, 0, w, h)
213213
self._cam.viewport = viewport_rect

arcade/types/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
from arcade.types.vector_like import AnchorPoint
8080

8181
# Rectangles
82-
from arcade.types.rect import ViewportParams
82+
from arcade.types.rect import IntRectParams
8383
from arcade.types.rect import RectParams
8484
from arcade.types.rect import RectKwargs
8585

@@ -100,6 +100,7 @@
100100
"AsFloat",
101101
"BufferProtocol",
102102
"Color",
103+
"IntRectParams",
103104
"IPoint",
104105
"PathOr",
105106
"PathOrTexture",
@@ -118,7 +119,6 @@
118119
"XYWH",
119120
"XYRR",
120121
"Viewport",
121-
"ViewportParams",
122122
"RectParams",
123123
"RectKwargs",
124124
"Box",

arcade/types/rect.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from arcade.types.vector_like import AnchorPoint, Point2
1212

1313
RectParams = tuple[AsFloat, AsFloat, AsFloat, AsFloat]
14-
ViewportParams = tuple[int, int, int, int]
14+
IntRectParams = tuple[int, int, int, int]
1515

1616

1717
class RectKwargs(TypedDict):
@@ -624,10 +624,25 @@ def xyrr(self) -> RectParams:
624624
return (self.x, self.y, self.width / 2, self.height / 2)
625625

626626
@property
627-
def viewport(self) -> ViewportParams:
628-
"""Provides a tuple in the format of (left, bottom, width, height), coerced to integers."""
627+
def lbwh_int(self) -> IntRectParams:
628+
"""Provides a tuple in the format of (left, bottom, width, height), casted to ints."""
629629
return (int(self.left), int(self.bottom), int(self.width), int(self.height))
630630

631+
@property
632+
def lrbt_int(self) -> IntRectParams:
633+
"""Provides a tuple in the format of (left, right, bottom, top), casted to ints."""
634+
return (int(self.left), int(self.right), int(self.bottom), int(self.top))
635+
636+
@property
637+
def xywh_int(self) -> IntRectParams:
638+
"""Provides a tuple in the format of (x, y, width, height), casted to ints."""
639+
return (int(self.x), int(self.y), int(self.width), int(self.height))
640+
641+
@property
642+
def xyrr_int(self) -> RectParams:
643+
"""Provides a tuple in the format of (x, y, width / 2, height / 2), casted to ints."""
644+
return (int(self.x), int(self.y), int(self.width) / 2, int(self.height) / 2)
645+
631646
@classmethod
632647
def from_kwargs(cls, **kwargs: AsFloat) -> Rect:
633648
"""Creates a new Rect from keyword arguments. Throws ValueError if not enough are provided.
@@ -803,7 +818,7 @@ def Viewport(left: int, bottom: int, width: int, height: int) -> Rect:
803818

804819

805820
__all__ = [
806-
"ViewportParams",
821+
"IntRectParams",
807822
"RectParams",
808823
"RectKwargs",
809824
"Rect",

tests/unit/camera/test_camera2d.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def test_camera2d_init_uses_render_target_size(window: Window, width, height):
9999
assert ortho_camera.viewport_width == width
100100
assert ortho_camera.viewport_height == height
101101

102-
assert ortho_camera.viewport.viewport == (0, 0, width, height)
102+
assert ortho_camera.viewport.lbwh_int == (0, 0, width, height)
103103
assert ortho_camera.viewport_left == 0
104104
assert ortho_camera.viewport_right == width
105105
assert ortho_camera.viewport_bottom == 0
@@ -116,7 +116,7 @@ def test_camera2d_from_camera_data_uses_render_target_size(window: Window, width
116116
assert ortho_camera.viewport_width == width
117117
assert ortho_camera.viewport_height == height
118118

119-
assert ortho_camera.viewport.viewport == (0, 0, width, height)
119+
assert ortho_camera.viewport.lbwh_int == (0, 0, width, height)
120120
assert ortho_camera.viewport_left == 0
121121
assert ortho_camera.viewport_right == width
122122
assert ortho_camera.viewport_bottom == 0

tests/unit/camera/test_viewport_projector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ def test_viewport_projector_unproject(window: Window, wrld_pos: Point):
2020
@pytest.mark.parametrize("viewport", [LBWH(0.0, 0.0, 100, 200), LBWH(100, 100, 20, 40), LBWH(300, 20, 20, 700)])
2121
def test_viewport_projector_viewport(window: Window, viewport: Rect):
2222
cam = camera.default.ViewportProjector()
23-
assert cam.viewport.viewport == window.ctx.viewport
23+
assert cam.viewport.lbwh_int == window.ctx.viewport
2424
cam.viewport = viewport
2525
assert cam.viewport == viewport

tests/unit/rect/test_rect_creation_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def test_kwargtangle_none_args():
121121
_ = Rect.from_kwargs(left=0, bottom=0, width=None, height=0)
122122

123123
with pytest.raises(ValueError):
124-
_ = Rect.from_kwargs(left=0, botto=None, width=0, height=0)
124+
_ = Rect.from_kwargs(left=0, bottom=None, width=0, height=0)
125125

126126
with pytest.raises(ValueError):
127127
_ = Rect.from_kwargs(left=None, bottom=0, width=0, height=0)

0 commit comments

Comments
 (0)