setting and keybinding for fullscreen mode

This commit is contained in:
multiSnow 2022-12-04 03:07:00 +08:00
parent 7a2b5f8475
commit 592cd7fedf
No known key found for this signature in database
GPG Key ID: 78D698D00CCDD6C4
5 changed files with 36 additions and 1 deletions

View File

@ -87,6 +87,10 @@ def validate(conf):
f'user_interface.faststep should not be negative: {conf.user_interface.faststep}'
assert isinstance(conf.user_interface.screensaver,bool),\
f'wrong type for user_interface.screensaver: {conf.user_interface.screensaver!r}'
assert isinstance(conf.user_interface.startfs,bool),\
f'wrong type for user_interface.startfs: {conf.user_interface.startfs!r}'
assert isinstance(conf.user_interface.realfs,bool),\
f'wrong type for user_interface.realfs: {conf.user_interface.realfs!r}'
# thumbnail
assert isinstance(conf.thumbnail.size,int),\

View File

@ -56,6 +56,10 @@ tiling = false
faststep = 20
# whether to enable screensaver while {progname.lower()} is running
screensaver = true
# whether to start in fullscreen mode
startfs = false
# whether to change videomode in fullscreen mode
realfs = false
[thumbnail]
# thumbnail size as {{size}}x{{size}}
@ -183,6 +187,8 @@ quit = [['SDLK_q'],['SDLK_CTRL','SDLK_q']]
clear = []
# toggle rtl mode
rtl = []
# toggle fullscreen
fullscreen = [['SDLK_f']]
# enter tiling mode
tiling = [['SDLK_t']]

View File

@ -233,6 +233,8 @@ def SDLUI_Process(sender,receiver,config):
'enabled' if window.renderer.vsync else 'disabled')
assert verb(__name__,'\n'.join(window.renderer.available_pixfmts))
window.resize(*config.style.size)
window.fullscreen_change_videomode=config.user_interface.realfs
window.fullscreen=config.user_interface.startfs
window.show()
window.renderer.clear()
window.update()

View File

@ -38,6 +38,8 @@ def execute_hci_action(mode,action,env,args=None):
env.clear()
case (None,'rtl'):
env.double_right=not env.double_right
case (None,'fullscreen'):
env.window.fullscreen=not env.window.fullscreen
case (None,'tiling'):
env.action_view_tiling()
case (None,'canvas'):

View File

@ -28,7 +28,7 @@ class Window(Widget):
'_pos_x','_pos_y',
'_size_w','_size_w_max','_size_w_min',
'_size_h','_size_h_max','_size_h_min',
'_default_flags',
'_default_flags','_fs','_fs_flag',
'_renderer','_renderer_driver',
'_renderer_vsync','_renderer_drivers',
'_window',
@ -45,6 +45,8 @@ class Window(Widget):
self._size_h_min=-1
self._default_flags=SDL_WINDOW_HIDDEN|SDL_WINDOW_BORDERLESS|\
SDL_WINDOW_RESIZABLE|SDL_WINDOW_ALLOW_HIGHDPI
self._fs=False
self._fs_flag=SDL_WINDOW_FULLSCREEN_DESKTOP
self._context=runsdlP(
SDL_CreateWindow,
str2bytes(title),self._pos_x,self._pos_y,
@ -186,6 +188,25 @@ class Window(Widget):
self._size_h_min=-1
runsdl(SDL_SetWindowMinimumSize,self,self.min_width,value)
@property
def fullscreen(self):
return self._fs
@fullscreen.setter
def fullscreen(self,value):
status=not not self.fullscreen
if (not not value)==status:return
self._fs=not status
runsdl(SDL_SetWindowFullscreen,self,0 if status else self._fs_flag)
@property
def fullscreen_change_videomode(self):
return self._fs_flag==SDL_WINDOW_FULLSCREEN
@fullscreen_change_videomode.setter
def fullscreen_change_videomode(self,value):
self._fs_flag=SDL_WINDOW_FULLSCREEN_DESKTOP if not value else SDL_WINDOW_FULLSCREEN
@property
def screensaver(self):
return runsdl(SDL_IsScreenSaverEnabled,errval=false)==SDL_TRUE