bugfix: Windows pushing title bar off screen
I'm learning the hard way that resizing the window is a big deal. Only do this when someone explicitly requests it, otherwise follow LÖVE's defaults. Therefore we're also going to stop trying to be smart when showing the log browser. Leave window resizing to manual operations. Now initialization looks a lot more similar for the run and source apps.
This commit is contained in:
parent
3f52063d02
commit
a8747478ff
26
run.lua
26
run.lua
|
@ -55,9 +55,8 @@ end
|
||||||
|
|
||||||
function run.load_settings()
|
function run.load_settings()
|
||||||
love.graphics.setFont(love.graphics.newFont(Settings.font_height))
|
love.graphics.setFont(love.graphics.newFont(Settings.font_height))
|
||||||
-- determine default dimensions and flags
|
-- set up desired window dimensions and make window resizable
|
||||||
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
_, _, App.screen.flags = App.screen.size()
|
||||||
-- set up desired window dimensions
|
|
||||||
App.screen.flags.resizable = true
|
App.screen.flags.resizable = true
|
||||||
App.screen.width, App.screen.height = Settings.width, Settings.height
|
App.screen.width, App.screen.height = Settings.width, Settings.height
|
||||||
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
||||||
|
@ -89,19 +88,16 @@ function run.initialize_default_settings()
|
||||||
end
|
end
|
||||||
|
|
||||||
function run.initialize_window_geometry(em_width)
|
function run.initialize_window_geometry(em_width)
|
||||||
local os = love.system.getOS()
|
-- Initialize window width/height and make window resizable.
|
||||||
if os == 'Android' or os == 'iOS' then
|
--
|
||||||
-- maximizing on iOS breaks text rendering: https://github.com/deltadaedalus/vudu/issues/7
|
-- I get tempted to have opinions about window dimensions here, but they're
|
||||||
-- no point second-guessing window dimensions on mobile
|
-- non-portable:
|
||||||
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
-- - maximizing doesn't work on mobile and messes things up
|
||||||
return
|
-- - maximizing keeps the title bar on screen in Linux, but off screen on
|
||||||
end
|
-- Windows. And there's no way to get the height of the title bar.
|
||||||
-- maximize window
|
-- It seems more robust to just follow LÖVE's default window size until
|
||||||
App.screen.resize(0, 0) -- maximize
|
-- someone overrides it.
|
||||||
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
||||||
-- shrink height slightly to account for window decoration
|
|
||||||
App.screen.height = App.screen.height-100
|
|
||||||
App.screen.width = 40*em_width
|
|
||||||
App.screen.flags.resizable = true
|
App.screen.flags.resizable = true
|
||||||
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
||||||
end
|
end
|
||||||
|
|
63
source.lua
63
source.lua
|
@ -121,8 +121,11 @@ end
|
||||||
function source.load_settings()
|
function source.load_settings()
|
||||||
local settings = Settings.source
|
local settings = Settings.source
|
||||||
love.graphics.setFont(love.graphics.newFont(settings.font_height))
|
love.graphics.setFont(love.graphics.newFont(settings.font_height))
|
||||||
source.resize_window_from_settings(settings)
|
-- set up desired window dimensions and make window resizable
|
||||||
--? print('loading source position', settings.x, settings.y, settings.displayindex)
|
_, _, App.screen.flags = App.screen.size()
|
||||||
|
App.screen.flags.resizable = true
|
||||||
|
App.screen.width, App.screen.height = settings.width, settings.height
|
||||||
|
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
||||||
source.set_window_position_from_settings(settings)
|
source.set_window_position_from_settings(settings)
|
||||||
Show_log_browser_side = settings.show_log_browser_side
|
Show_log_browser_side = settings.show_log_browser_side
|
||||||
local right = App.screen.width - Margin_right
|
local right = App.screen.width - Margin_right
|
||||||
|
@ -143,24 +146,6 @@ function source.load_settings()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function source.resize_window_from_settings(settings)
|
|
||||||
local os = love.system.getOS()
|
|
||||||
if os == 'Android' or os == 'iOS' then
|
|
||||||
-- maximizing on iOS breaks text rendering: https://github.com/deltadaedalus/vudu/issues/7
|
|
||||||
-- no point second-guessing window dimensions on mobile
|
|
||||||
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
|
||||||
return
|
|
||||||
end
|
|
||||||
-- maximize window to determine maximum allowable dimensions
|
|
||||||
App.screen.resize(0, 0) -- maximize
|
|
||||||
Display_width, Display_height, App.screen.flags = App.screen.size()
|
|
||||||
-- set up desired window dimensions
|
|
||||||
App.screen.flags.resizable = true
|
|
||||||
App.screen.width, App.screen.height = settings.width, settings.height
|
|
||||||
--? print('setting window from settings:', App.screen.width, App.screen.height)
|
|
||||||
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
|
||||||
end
|
|
||||||
|
|
||||||
function source.set_window_position_from_settings(settings)
|
function source.set_window_position_from_settings(settings)
|
||||||
local os = love.system.getOS()
|
local os = love.system.getOS()
|
||||||
if os == 'Linux' then
|
if os == 'Linux' then
|
||||||
|
@ -182,19 +167,16 @@ function source.initialize_default_settings()
|
||||||
end
|
end
|
||||||
|
|
||||||
function source.initialize_window_geometry(em_width)
|
function source.initialize_window_geometry(em_width)
|
||||||
local os = love.system.getOS()
|
-- Initialize window width/height and make window resizable.
|
||||||
if os == 'Android' or os == 'iOS' then
|
--
|
||||||
-- maximizing on iOS breaks text rendering: https://github.com/deltadaedalus/vudu/issues/7
|
-- I get tempted to have opinions about window dimensions here, but they're
|
||||||
-- no point second-guessing window dimensions on mobile
|
-- non-portable:
|
||||||
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
-- - maximizing doesn't work on mobile and messes things up
|
||||||
return
|
-- - maximizing keeps the title bar on screen in Linux, but off screen on
|
||||||
end
|
-- Windows. And there's no way to get the height of the title bar.
|
||||||
-- maximize window
|
-- It seems more robust to just follow LÖVE's default window size until
|
||||||
App.screen.resize(0, 0) -- maximize
|
-- someone overrides it.
|
||||||
Display_width, Display_height, App.screen.flags = App.screen.size()
|
App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
|
||||||
-- shrink height slightly to account for window decoration
|
|
||||||
App.screen.height = Display_height-100
|
|
||||||
App.screen.width = 40*em_width
|
|
||||||
App.screen.flags.resizable = true
|
App.screen.flags.resizable = true
|
||||||
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
||||||
print('initializing source position')
|
print('initializing source position')
|
||||||
|
@ -378,20 +360,15 @@ function source.keychord_press(chord, key)
|
||||||
--? print('C-l')
|
--? print('C-l')
|
||||||
Show_log_browser_side = not Show_log_browser_side
|
Show_log_browser_side = not Show_log_browser_side
|
||||||
if Show_log_browser_side then
|
if Show_log_browser_side then
|
||||||
App.screen.width = math.min(Display_width, App.screen.width*2)
|
|
||||||
Editor_state.right = App.screen.width/2 - Margin_right
|
Editor_state.right = App.screen.width/2 - Margin_right
|
||||||
|
Editor_state.width = Editor_state.right-Editor_state.left
|
||||||
|
Text.redraw_all(Editor_state)
|
||||||
Log_browser_state.left = App.screen.width/2 + Margin_left
|
Log_browser_state.left = App.screen.width/2 + Margin_left
|
||||||
Log_browser_state.right = App.screen.width - Margin_right
|
Log_browser_state.right = App.screen.width - Margin_right
|
||||||
else
|
else
|
||||||
App.screen.width = Editor_state.right + Margin_right
|
Editor_state.right = App.screen.width - Margin_right
|
||||||
end
|
Editor_state.width = Editor_state.right-Editor_state.left
|
||||||
--? print('setting window:', App.screen.width, App.screen.height)
|
Text.redraw_all(Editor_state)
|
||||||
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
|
||||||
--? print('done setting window')
|
|
||||||
-- try to restore position if possible
|
|
||||||
-- if the window gets wider the window manager may not respect this
|
|
||||||
if not App.run_tests then
|
|
||||||
source.set_window_position_from_settings(Settings.source)
|
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,6 @@ end
|
||||||
|
|
||||||
function test_show_log_browser_side()
|
function test_show_log_browser_side()
|
||||||
App.screen.init{width=300, height=300}
|
App.screen.init{width=300, height=300}
|
||||||
Display_width = App.screen.width
|
|
||||||
Current_app = 'source'
|
Current_app = 'source'
|
||||||
Editor_state = edit.initialize_test_state()
|
Editor_state = edit.initialize_test_state()
|
||||||
Editor_state.filename = 'foo'
|
Editor_state.filename = 'foo'
|
||||||
|
@ -34,41 +33,9 @@ function test_show_log_browser_side()
|
||||||
check(Show_log_browser_side, 'check')
|
check(Show_log_browser_side, 'check')
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_show_log_browser_side_doubles_window_width_if_possible()
|
function test_show_log_browser_side_splits_window_width()
|
||||||
-- initialize screen dimensions to half width
|
|
||||||
App.screen.init{width=300, height=300}
|
|
||||||
Display_width = App.screen.width*2
|
|
||||||
-- initialize source app with left side occupying entire window (half the display)
|
|
||||||
Current_app = 'source'
|
|
||||||
Editor_state = edit.initialize_test_state()
|
|
||||||
Editor_state.filename = 'foo'
|
|
||||||
Editor_state.left = Margin_left
|
|
||||||
Editor_state.right = App.screen.width - Margin_right
|
|
||||||
local old_editor_right = Editor_state.right
|
|
||||||
Text.redraw_all(Editor_state)
|
|
||||||
Log_browser_state = edit.initialize_test_state()
|
|
||||||
-- log browser has some arbitrary margins
|
|
||||||
Log_browser_state.left = 200 + Margin_left
|
|
||||||
Log_browser_state.right = 400
|
|
||||||
Text.redraw_all(Log_browser_state)
|
|
||||||
log_browser.parse(Log_browser_state)
|
|
||||||
-- display log browser
|
|
||||||
Current_time = Current_time + 0.1
|
|
||||||
App.run_after_keychord('C-l')
|
|
||||||
-- window width is doubled
|
|
||||||
check_eq(App.screen.width, 600, 'display:width')
|
|
||||||
-- left side margins are unchanged
|
|
||||||
check_eq(Editor_state.left, Margin_left, 'edit:left')
|
|
||||||
check_eq(Editor_state.right, old_editor_right, 'edit:right')
|
|
||||||
-- log browser margins are adjusted
|
|
||||||
check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'log:left')
|
|
||||||
check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'log:right')
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width()
|
|
||||||
-- initialize screen dimensions and indicate that it is maximized
|
-- initialize screen dimensions and indicate that it is maximized
|
||||||
App.screen.init{width=300, height=300}
|
App.screen.init{width=300, height=300}
|
||||||
Display_width = 300
|
|
||||||
-- initialize source app with left side occupying more than half the display
|
-- initialize source app with left side occupying more than half the display
|
||||||
Current_app = 'source'
|
Current_app = 'source'
|
||||||
Editor_state = edit.initialize_test_state()
|
Editor_state = edit.initialize_test_state()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user