83
83
from __future__ import annotations
84
84
85
85
import enum
86
+ import functools
86
87
import warnings
87
88
from collections .abc import Callable , Iterator , Mapping
88
89
from typing import TYPE_CHECKING , Any , Final , Generic , Literal , NamedTuple , TypeVar
@@ -698,7 +699,6 @@ class WindowEvent(Event):
698
699
"WindowExposed" ,
699
700
"WindowMoved" ,
700
701
"WindowResized" ,
701
- "WindowSizeChanged" ,
702
702
"WindowMinimized" ,
703
703
"WindowMaximized" ,
704
704
"WindowRestored" ,
@@ -715,13 +715,13 @@ class WindowEvent(Event):
715
715
716
716
@classmethod
717
717
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 :
719
719
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 ]
721
721
self : WindowEvent
722
- if sdl_event .window . event == lib .SDL_EVENT_WINDOW_MOVED :
722
+ if sdl_event .type == lib .SDL_EVENT_WINDOW_MOVED :
723
723
self = WindowMoved (sdl_event .window .data1 , sdl_event .window .data2 )
724
- elif sdl_event .window . event in (
724
+ elif sdl_event .type in (
725
725
lib .SDL_EVENT_WINDOW_RESIZED ,
726
726
lib .SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED ,
727
727
):
@@ -734,7 +734,7 @@ def from_sdl_event(cls, sdl_event: Any) -> WindowEvent | Undefined:
734
734
def __repr__ (self ) -> str :
735
735
return f"tcod.event.{ self .__class__ .__name__ } (type={ self .type !r} )"
736
736
737
- __WINDOW_TYPES : Final = {
737
+ _WINDOW_TYPES : Final = {
738
738
lib .SDL_EVENT_WINDOW_SHOWN : "WindowShown" ,
739
739
lib .SDL_EVENT_WINDOW_HIDDEN : "WindowHidden" ,
740
740
lib .SDL_EVENT_WINDOW_EXPOSED : "WindowExposed" ,
@@ -785,10 +785,13 @@ class WindowResized(WindowEvent):
785
785
Attributes:
786
786
width (int): The current width of the window.
787
787
height (int): The current height of the window.
788
+
789
+ .. versionchanged:: Unreleased
790
+ Removed "WindowSizeChanged" type.
788
791
"""
789
792
790
- type : Final [Literal ["WindowResized" , "WindowSizeChanged" ]] # type: ignore[misc]
791
- """WindowResized" or "WindowSizeChanged """
793
+ type : Final [Literal ["WindowResized" ]] # type: ignore[misc]
794
+ """Always "WindowResized". """
792
795
793
796
def __init__ (self , type : str , width : int , height : int ) -> None :
794
797
super ().__init__ (type )
@@ -1130,6 +1133,15 @@ def from_sdl_event(cls, sdl_event: Any) -> ControllerDevice:
1130
1133
return cls (type , sdl_event .cdevice .which )
1131
1134
1132
1135
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
+
1133
1145
class Undefined (Event ):
1134
1146
"""This class is a place holder for SDL events without their own tcod.event class."""
1135
1147
@@ -1144,9 +1156,12 @@ def from_sdl_event(cls, sdl_event: Any) -> Undefined:
1144
1156
1145
1157
def __str__ (self ) -> str :
1146
1158
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 ) } >"
1148
1160
return "<Undefined>"
1149
1161
1162
+ def __repr__ (self ) -> str :
1163
+ return self .__str__ ()
1164
+
1150
1165
1151
1166
_SDL_TO_CLASS_TABLE : dict [int , type [Event ]] = {
1152
1167
lib .SDL_EVENT_QUIT : Quit ,
@@ -1157,7 +1172,6 @@ def __str__(self) -> str:
1157
1172
lib .SDL_EVENT_MOUSE_BUTTON_UP : MouseButtonUp ,
1158
1173
lib .SDL_EVENT_MOUSE_WHEEL : MouseWheel ,
1159
1174
lib .SDL_EVENT_TEXT_INPUT : TextInput ,
1160
- # lib.SDL_EVENT_WINDOW_EVENT: WindowEvent,
1161
1175
lib .SDL_EVENT_JOYSTICK_AXIS_MOTION : JoystickAxis ,
1162
1176
lib .SDL_EVENT_JOYSTICK_BALL_MOTION : JoystickBall ,
1163
1177
lib .SDL_EVENT_JOYSTICK_HAT_MOTION : JoystickHat ,
@@ -1176,9 +1190,11 @@ def __str__(self) -> str:
1176
1190
1177
1191
def _parse_event (sdl_event : Any ) -> Event :
1178
1192
"""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 )
1182
1198
1183
1199
1184
1200
def get () -> Iterator [Any ]:
@@ -1198,10 +1214,7 @@ def get() -> Iterator[Any]:
1198
1214
return
1199
1215
sdl_event = ffi .new ("SDL_Event*" )
1200
1216
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 )
1205
1218
1206
1219
1207
1220
def wait (timeout : float | None = None ) -> Iterator [Any ]:
@@ -1425,9 +1438,6 @@ def ev_windowmoved(self, event: tcod.event.WindowMoved, /) -> T | None:
1425
1438
def ev_windowresized (self , event : tcod .event .WindowResized , / ) -> T | None :
1426
1439
"""Called when the window is resized."""
1427
1440
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
-
1431
1441
def ev_windowminimized (self , event : tcod .event .WindowEvent , / ) -> T | None :
1432
1442
"""Called when the window is minimized."""
1433
1443
0 commit comments