Skip to content

Commit 7631319

Browse files
committed
Ensure Renderer.logical_size is always initialized
1 parent d549fc5 commit 7631319

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

sdl2/ext/renderer.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,16 +341,24 @@ def __init__(self, target, backend=-1, logical_size=None,
341341
else:
342342
index = backend
343343

344+
_size = None
344345
if isinstance(target, Window):
345346
_renderer = render.SDL_CreateRenderer(target.window, index, flags)
347+
_size = target.size
346348
elif isinstance(target, video.SDL_Window):
347349
_renderer = render.SDL_CreateRenderer(target, index, flags)
350+
w, h = c_int(0), c_int(0)
351+
video.SDL_GetWindowSize(target, byref(w), byref(h))
352+
_size = (w.value, h.value)
348353
elif isinstance(target, SoftwareSprite):
349354
_renderer = render.SDL_CreateSoftwareRenderer(target.surface)
355+
_size = target.size
350356
elif isinstance(target, surface.SDL_Surface):
351357
_renderer = render.SDL_CreateSoftwareRenderer(target)
358+
_size = (target.w, target.h)
352359
elif "SDL_Surface" in str(type(target)):
353360
_renderer = render.SDL_CreateSoftwareRenderer(target.contents)
361+
_size = (target.contents.w, target.contents.h)
354362
else:
355363
raise TypeError("unsupported target type")
356364
if not _renderer:
@@ -359,6 +367,7 @@ def __init__(self, target, backend=-1, logical_size=None,
359367

360368
self.rendertarget = target
361369
self.color = (0, 0, 0, 0) # Set black as the default draw color
370+
self.logical_size = _size
362371
self._original_logical_size = self.logical_size
363372
if logical_size is not None:
364373
self.logical_size = logical_size
@@ -402,7 +411,7 @@ def logical_size(self):
402411
``(width, height)`` tuple.
403412
404413
"""
405-
w, h = c_int(), c_int()
414+
w, h = c_int(0), c_int(0)
406415
render.SDL_RenderGetLogicalSize(self.sdlrenderer, byref(w), byref(h))
407416
return w.value, h.value
408417

@@ -416,7 +425,7 @@ def logical_size(self, size):
416425
@property
417426
def color(self):
418427
""":obj:`~sdl2.ext.Color`: The current drawing color of the renderer."""
419-
r, g, b, a = Uint8(), Uint8(), Uint8(), Uint8()
428+
r, g, b, a = Uint8(0), Uint8(0), Uint8(0), Uint8(0)
420429
ret = render.SDL_GetRenderDrawColor(self.sdlrenderer, byref(r), byref(g),
421430
byref(b), byref(a))
422431
if ret < 0:

sdl2/test/sdl2ext_renderer_test.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def _online(x, y, pts):
7474
else:
7575
assert view[y][x] in c2, msg % (x, y, view[y][x], c2)
7676

77-
def test_Renderer(self):
77+
def test_init(self):
7878
sf = SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
7979

8080
# Create renderer with SDL_Surface
@@ -124,6 +124,31 @@ def test_Renderer(self):
124124
sdl2ext.Renderer("test")
125125
dogc()
126126

127+
def test_logical_size(self):
128+
sf = SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
129+
window = sdl2ext.Window("Test", size=(10, 10))
130+
sprite = sdl2ext.SoftwareSprite(sf.contents, True)
131+
132+
targets = {
133+
"SDL_Surface": sf.contents,
134+
"SDL_Surface_pointer": sf,
135+
"SoftwareSprite": sprite,
136+
"Window": window,
137+
"SDL_Window": window.window
138+
}
139+
for name, target in targets.items():
140+
target_name = name
141+
renderer = sdl2ext.Renderer(target)
142+
assert isinstance(renderer.sdlrenderer.contents, SDL_Renderer)
143+
assert renderer.logical_size == (10, 10)
144+
renderer.logical_size = (20, 30)
145+
assert renderer.logical_size == (20, 30)
146+
renderer.reset_logical_size()
147+
assert renderer.logical_size == (10, 10)
148+
renderer.destroy()
149+
150+
window.close()
151+
127152
def test_Texture(self):
128153
# Create renderer and test surface
129154
rendertarget = SDL_CreateRGBSurface(0, 100, 100, 32, 0, 0, 0, 0)

0 commit comments

Comments
 (0)