{ import: sdl } { import: MiniCairo } { import: HostWindow } SDLWindow : HostWindow (sdl painter) SDLWindow new [ self := super new. sdl := SDL new. ] SDLWindow extent: extent [ sdl setVideoMode : extent x : extent y : 32 : SDL SDL_RESIZABLE. sdl setCaption: 'bottle' icon: 'bottle'. windowWidth := extent x rounded. windowHeight := extent y rounded. painter := self newPainter. ] SDLWindow swapBuffers: clipRectangle [ sdl flip ] SDLWindow painter [ ^ painter ] SDLWindow newPainter [ ^ (Cairo createImageSurfaceCreateForData: sdl pixels : windowWidth, windowHeight) translate: 0, windowHeight; scale: 1 , -1 " ^(Cairo withWinWindow: self) translate: (0".5") , (windowHeight" - 0.5"); scale: 1 , -1 " ] SDLWindow waitEvent [ | event | event := sdl waitEvent ifNil: [ ^nil ]. (event isKindOf: ResizeEvent) ifFalse: [event position y: windowHeight - event position y]. event window: self. ^ event ] SDLWindow quit [ SDL quit ]