8383from __future__ import annotations
8484
8585import enum
86+ import functools
8687import warnings
8788from collections .abc import Callable , Iterator , Mapping
8889from typing import TYPE_CHECKING , Any , Final , Generic , Literal , NamedTuple , TypeVar
@@ -698,7 +699,6 @@ class WindowEvent(Event):
698699 "WindowExposed" ,
699700 "WindowMoved" ,
700701 "WindowResized" ,
701- "WindowSizeChanged" ,
702702 "WindowMinimized" ,
703703 "WindowMaximized" ,
704704 "WindowRestored" ,
@@ -715,13 +715,13 @@ class WindowEvent(Event):
715715
716716 @classmethod
717717 def from_sdl_event (cls , sdl_event : Any ) -> WindowEvent | Undefined :
718- if sdl_event .window . event not in cls .__WINDOW_TYPES :
718+ if sdl_event .type not in cls ._WINDOW_TYPES :
719719 return Undefined .from_sdl_event (sdl_event )
720- event_type : Final = cls .__WINDOW_TYPES [sdl_event .window . event ]
720+ event_type : Final = cls ._WINDOW_TYPES [sdl_event .type ]
721721 self : WindowEvent
722- if sdl_event .window . event == lib .SDL_EVENT_WINDOW_MOVED :
722+ if sdl_event .type == lib .SDL_EVENT_WINDOW_MOVED :
723723 self = WindowMoved (sdl_event .window .data1 , sdl_event .window .data2 )
724- elif sdl_event .window . event in (
724+ elif sdl_event .type in (
725725 lib .SDL_EVENT_WINDOW_RESIZED ,
726726 lib .SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED ,
727727 ):
@@ -734,7 +734,7 @@ def from_sdl_event(cls, sdl_event: Any) -> WindowEvent | Undefined:
734734 def __repr__ (self ) -> str :
735735 return f"tcod.event.{ self .__class__ .__name__ } (type={ self .type !r} )"
736736
737- __WINDOW_TYPES : Final = {
737+ _WINDOW_TYPES : Final = {
738738 lib .SDL_EVENT_WINDOW_SHOWN : "WindowShown" ,
739739 lib .SDL_EVENT_WINDOW_HIDDEN : "WindowHidden" ,
740740 lib .SDL_EVENT_WINDOW_EXPOSED : "WindowExposed" ,
@@ -785,10 +785,13 @@ class WindowResized(WindowEvent):
785785 Attributes:
786786 width (int): The current width of the window.
787787 height (int): The current height of the window.
788+
789+ .. versionchanged:: Unreleased
790+ Removed "WindowSizeChanged" type.
788791 """
789792
790- type : Final [Literal ["WindowResized" , "WindowSizeChanged" ]] # type: ignore[misc]
791- """WindowResized" or "WindowSizeChanged """
793+ type : Final [Literal ["WindowResized" ]] # type: ignore[misc]
794+ """Always "WindowResized". """
792795
793796 def __init__ (self , type : str , width : int , height : int ) -> None :
794797 super ().__init__ (type )
@@ -1130,6 +1133,15 @@ def from_sdl_event(cls, sdl_event: Any) -> ControllerDevice:
11301133 return cls (type , sdl_event .cdevice .which )
11311134
11321135
1136+ @functools .cache
1137+ def _find_event_name (index : int , / ) -> str :
1138+ """Return the SDL event name for this index."""
1139+ for attr in dir (lib ):
1140+ if attr .startswith ("SDL_EVENT_" ) and getattr (lib , attr ) == index :
1141+ return attr
1142+ return "???"
1143+
1144+
11331145class Undefined (Event ):
11341146 """This class is a place holder for SDL events without their own tcod.event class."""
11351147
@@ -1144,9 +1156,12 @@ def from_sdl_event(cls, sdl_event: Any) -> Undefined:
11441156
11451157 def __str__ (self ) -> str :
11461158 if self .sdl_event :
1147- return "<Undefined sdl_event.type=%i>" % self .sdl_event .type
1159+ return f "<Undefined sdl_event.type={ self . sdl_event . type } { _find_event_name ( self .sdl_event .type ) } >"
11481160 return "<Undefined>"
11491161
1162+ def __repr__ (self ) -> str :
1163+ return self .__str__ ()
1164+
11501165
11511166_SDL_TO_CLASS_TABLE : dict [int , type [Event ]] = {
11521167 lib .SDL_EVENT_QUIT : Quit ,
@@ -1157,7 +1172,6 @@ def __str__(self) -> str:
11571172 lib .SDL_EVENT_MOUSE_BUTTON_UP : MouseButtonUp ,
11581173 lib .SDL_EVENT_MOUSE_WHEEL : MouseWheel ,
11591174 lib .SDL_EVENT_TEXT_INPUT : TextInput ,
1160- # lib.SDL_EVENT_WINDOW_EVENT: WindowEvent,
11611175 lib .SDL_EVENT_JOYSTICK_AXIS_MOTION : JoystickAxis ,
11621176 lib .SDL_EVENT_JOYSTICK_BALL_MOTION : JoystickBall ,
11631177 lib .SDL_EVENT_JOYSTICK_HAT_MOTION : JoystickHat ,
@@ -1176,9 +1190,11 @@ def __str__(self) -> str:
11761190
11771191def _parse_event (sdl_event : Any ) -> Event :
11781192 """Convert a C SDL_Event* type into a tcod Event sub-class."""
1179- if sdl_event .type not in _SDL_TO_CLASS_TABLE :
1180- return Undefined .from_sdl_event (sdl_event )
1181- return _SDL_TO_CLASS_TABLE [sdl_event .type ].from_sdl_event (sdl_event )
1193+ if sdl_event .type in _SDL_TO_CLASS_TABLE :
1194+ return _SDL_TO_CLASS_TABLE [sdl_event .type ].from_sdl_event (sdl_event )
1195+ if sdl_event .type in WindowEvent ._WINDOW_TYPES :
1196+ return WindowEvent .from_sdl_event (sdl_event )
1197+ return Undefined .from_sdl_event (sdl_event )
11821198
11831199
11841200def get () -> Iterator [Any ]:
@@ -1198,10 +1214,7 @@ def get() -> Iterator[Any]:
11981214 return
11991215 sdl_event = ffi .new ("SDL_Event*" )
12001216 while lib .SDL_PollEvent (sdl_event ):
1201- if sdl_event .type in _SDL_TO_CLASS_TABLE :
1202- yield _SDL_TO_CLASS_TABLE [sdl_event .type ].from_sdl_event (sdl_event )
1203- else :
1204- yield Undefined .from_sdl_event (sdl_event )
1217+ yield _parse_event (sdl_event )
12051218
12061219
12071220def wait (timeout : float | None = None ) -> Iterator [Any ]:
@@ -1425,9 +1438,6 @@ def ev_windowmoved(self, event: tcod.event.WindowMoved, /) -> T | None:
14251438 def ev_windowresized (self , event : tcod .event .WindowResized , / ) -> T | None :
14261439 """Called when the window is resized."""
14271440
1428- def ev_windowsizechanged (self , event : tcod .event .WindowResized , / ) -> T | None :
1429- """Called when the system or user changes the size of the window."""
1430-
14311441 def ev_windowminimized (self , event : tcod .event .WindowEvent , / ) -> T | None :
14321442 """Called when the window is minimized."""
14331443
0 commit comments