Merge pull request #8385 from radarhere/dib_hwnd

Cast Dib handle to int
This commit is contained in:
Hugo van Kemenade 2024-09-16 19:29:12 +03:00 committed by GitHub
commit f85c8dc345
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 8 deletions

View File

@ -60,6 +60,18 @@ class TestImageWinDib:
with pytest.raises(ValueError): with pytest.raises(ValueError):
ImageWin.Dib(mode) ImageWin.Dib(mode)
def test_dib_hwnd(self) -> None:
mode = "RGBA"
size = (128, 128)
wnd = 0
dib = ImageWin.Dib(mode, size)
hwnd = ImageWin.HWND(wnd)
dib.expose(hwnd)
dib.draw(hwnd, (0, 0) + size)
assert isinstance(dib.query_palette(hwnd), int)
def test_dib_paste(self) -> None: def test_dib_paste(self) -> None:
# Arrange # Arrange
im = hopper() im = hopper()

View File

@ -98,14 +98,15 @@ class Dib:
HDC or HWND instance. In PythonWin, you can use HDC or HWND instance. In PythonWin, you can use
``CDC.GetHandleAttrib()`` to get a suitable handle. ``CDC.GetHandleAttrib()`` to get a suitable handle.
""" """
handle_int = int(handle)
if isinstance(handle, HWND): if isinstance(handle, HWND):
dc = self.image.getdc(handle) dc = self.image.getdc(handle_int)
try: try:
self.image.expose(dc) self.image.expose(dc)
finally: finally:
self.image.releasedc(handle, dc) self.image.releasedc(handle_int, dc)
else: else:
self.image.expose(handle) self.image.expose(handle_int)
def draw( def draw(
self, self,
@ -124,14 +125,15 @@ class Dib:
""" """
if src is None: if src is None:
src = (0, 0) + self.size src = (0, 0) + self.size
handle_int = int(handle)
if isinstance(handle, HWND): if isinstance(handle, HWND):
dc = self.image.getdc(handle) dc = self.image.getdc(handle_int)
try: try:
self.image.draw(dc, dst, src) self.image.draw(dc, dst, src)
finally: finally:
self.image.releasedc(handle, dc) self.image.releasedc(handle_int, dc)
else: else:
self.image.draw(handle, dst, src) self.image.draw(handle_int, dst, src)
def query_palette(self, handle: int | HDC | HWND) -> int: def query_palette(self, handle: int | HDC | HWND) -> int:
""" """
@ -148,14 +150,15 @@ class Dib:
:return: The number of entries that were changed (if one or more entries, :return: The number of entries that were changed (if one or more entries,
this indicates that the image should be redrawn). this indicates that the image should be redrawn).
""" """
handle_int = int(handle)
if isinstance(handle, HWND): if isinstance(handle, HWND):
handle = self.image.getdc(handle) handle = self.image.getdc(handle_int)
try: try:
result = self.image.query_palette(handle) result = self.image.query_palette(handle)
finally: finally:
self.image.releasedc(handle, handle) self.image.releasedc(handle, handle)
else: else:
result = self.image.query_palette(handle) result = self.image.query_palette(handle_int)
return result return result
def paste( def paste(