@@ -72,55 +72,6 @@ static void twin_sdl_damage(twin_screen_t *screen, twin_sdl_t *tx)
7272    twin_screen_damage (screen , 0 , 0 , width , height );
7373}
7474
75- static  bool  twin_sdl_read_events (int  file  maybe_unused ,
76-                                  twin_file_op_t  ops  maybe_unused ,
77-                                  void  * closure )
78- {
79-     twin_screen_t  * screen  =  SCREEN (closure );
80-     twin_sdl_t  * tx  =  PRIV (closure );
81- 
82-     SDL_Event  ev ;
83-     while  (SDL_PollEvent (& ev )) {
84-         twin_event_t  tev ;
85-         switch  (ev .type ) {
86-         case  SDL_WINDOWEVENT :
87-             if  (ev .window .event  ==  SDL_WINDOWEVENT_EXPOSED  || 
88-                 ev .window .event  ==  SDL_WINDOWEVENT_SHOWN ) {
89-                 twin_sdl_damage (screen , tx );
90-             }
91-             break ;
92-         case  SDL_QUIT :
93-             _twin_sdl_destroy (screen , tx );
94-             return  false;
95-         case  SDL_MOUSEBUTTONDOWN :
96-         case  SDL_MOUSEBUTTONUP :
97-             tev .u .pointer .screen_x  =  ev .button .x ;
98-             tev .u .pointer .screen_y  =  ev .button .y ;
99-             tev .u .pointer .button  = 
100-                 ((ev .button .state  >> 8 ) | (1  << (ev .button .button  -  1 )));
101-             tev .kind  =  ((ev .type  ==  SDL_MOUSEBUTTONDOWN ) ? TwinEventButtonDown 
102-                                                          : TwinEventButtonUp );
103-             twin_screen_dispatch (screen , & tev );
104-             break ;
105-         case  SDL_KEYDOWN :
106-         case  SDL_KEYUP :
107-             tev .u .key .key  =  ev .key .keysym .sym ;
108-             tev .kind  =  ((ev .key .type  ==  SDL_KEYDOWN ) ? TwinEventKeyDown 
109-                                                      : TwinEventKeyUp );
110-             twin_screen_dispatch (screen , & tev );
111-             break ;
112-         case  SDL_MOUSEMOTION :
113-             tev .u .pointer .screen_x  =  ev .motion .x ;
114-             tev .u .pointer .screen_y  =  ev .motion .y ;
115-             tev .kind  =  TwinEventMotion ;
116-             tev .u .pointer .button  =  ev .motion .state ;
117-             twin_screen_dispatch (screen , & tev );
118-             break ;
119-         }
120-     }
121-     return  true;
122- }
123- 
12475static  bool  twin_sdl_work (void  * closure )
12576{
12677    twin_screen_t  * screen  =  SCREEN (closure );
@@ -174,8 +125,6 @@ twin_context_t *twin_sdl_init(int width, int height)
174125    ctx -> screen  =  twin_screen_create (width , height , _twin_sdl_put_begin ,
175126                                     _twin_sdl_put_span , ctx );
176127
177-     twin_set_file (twin_sdl_read_events , 0 , TWIN_READ , ctx );
178- 
179128    twin_set_work (twin_sdl_work , TWIN_WORK_REDISPLAY , ctx );
180129
181130    return  ctx ;
@@ -195,6 +144,53 @@ static void twin_sdl_configure(twin_context_t *ctx)
195144    twin_screen_resize (ctx -> screen , width , height );
196145}
197146
147+ static  bool  twin_sdl_poll (twin_context_t  * ctx )
148+ {
149+     twin_screen_t  * screen  =  SCREEN (ctx );
150+     twin_sdl_t  * tx  =  PRIV (ctx );
151+ 
152+     SDL_Event  ev ;
153+     while  (SDL_PollEvent (& ev )) {
154+         twin_event_t  tev ;
155+         switch  (ev .type ) {
156+         case  SDL_WINDOWEVENT :
157+             if  (ev .window .event  ==  SDL_WINDOWEVENT_EXPOSED  || 
158+                 ev .window .event  ==  SDL_WINDOWEVENT_SHOWN ) {
159+                 twin_sdl_damage (screen , tx );
160+             }
161+             break ;
162+         case  SDL_QUIT :
163+             _twin_sdl_destroy (screen , tx );
164+             return  false;
165+         case  SDL_MOUSEBUTTONDOWN :
166+         case  SDL_MOUSEBUTTONUP :
167+             tev .u .pointer .screen_x  =  ev .button .x ;
168+             tev .u .pointer .screen_y  =  ev .button .y ;
169+             tev .u .pointer .button  = 
170+                 ((ev .button .state  >> 8 ) | (1  << (ev .button .button  -  1 )));
171+             tev .kind  =  ((ev .type  ==  SDL_MOUSEBUTTONDOWN ) ? TwinEventButtonDown 
172+                                                          : TwinEventButtonUp );
173+             twin_screen_dispatch (screen , & tev );
174+             break ;
175+         case  SDL_KEYDOWN :
176+         case  SDL_KEYUP :
177+             tev .u .key .key  =  ev .key .keysym .sym ;
178+             tev .kind  =  ((ev .key .type  ==  SDL_KEYDOWN ) ? TwinEventKeyDown 
179+                                                      : TwinEventKeyUp );
180+             twin_screen_dispatch (screen , & tev );
181+             break ;
182+         case  SDL_MOUSEMOTION :
183+             tev .u .pointer .screen_x  =  ev .motion .x ;
184+             tev .u .pointer .screen_y  =  ev .motion .y ;
185+             tev .kind  =  TwinEventMotion ;
186+             tev .u .pointer .button  =  ev .motion .state ;
187+             twin_screen_dispatch (screen , & tev );
188+             break ;
189+         }
190+     }
191+     return  true;
192+ }
193+ 
198194static  void  twin_sdl_exit (twin_context_t  * ctx )
199195{
200196    if  (!ctx )
@@ -209,5 +205,6 @@ static void twin_sdl_exit(twin_context_t *ctx)
209205const  twin_backend_t  g_twin_backend  =  {
210206    .init  =  twin_sdl_init ,
211207    .configure  =  twin_sdl_configure ,
208+     .poll  =  twin_sdl_poll ,
212209    .exit  =  twin_sdl_exit ,
213210};
0 commit comments