Merge lines.love
This commit is contained in:
commit
2a36ce3c06
25
app.lua
25
app.lua
|
@ -154,6 +154,27 @@ function App.screen.init(dims)
|
|||
App.screen.height = dims.height
|
||||
end
|
||||
|
||||
-- operations on the LÖVE window within the monitor/display
|
||||
function App.screen.resize(width, height, flags)
|
||||
App.screen.width = width
|
||||
App.screen.height = height
|
||||
App.screen.flags = flags
|
||||
end
|
||||
|
||||
function App.screen.size()
|
||||
return App.screen.width, App.screen.height, App.screen.flags
|
||||
end
|
||||
|
||||
function App.screen.move(x,y, displayindex)
|
||||
App.screen.x = x
|
||||
App.screen.y = y
|
||||
App.screen.displayindex = displayindex
|
||||
end
|
||||
|
||||
function App.screen.position()
|
||||
return App.screen.x, App.screen.y, App.screen.displayindex
|
||||
end
|
||||
|
||||
function App.screen.print(msg, x,y)
|
||||
local screen_row = 'y'..tostring(y)
|
||||
--? print('drawing "'..msg..'" at y '..tostring(y))
|
||||
|
@ -379,6 +400,10 @@ function App.disable_tests()
|
|||
App.fake_mouse_press = nil
|
||||
App.fake_mouse_release = nil
|
||||
-- other methods dispatch to real hardware
|
||||
App.screen.resize = love.window.setMode
|
||||
App.screen.size = love.window.getMode
|
||||
App.screen.move = love.window.setPosition
|
||||
App.screen.position = love.window.getPosition
|
||||
App.screen.print = love.graphics.print
|
||||
App.newText = love.graphics.newText
|
||||
App.screen.draw = love.graphics.draw
|
||||
|
|
25
source.lua
25
source.lua
|
@ -45,7 +45,7 @@ function source.initialize_globals()
|
|||
index = 1,
|
||||
}
|
||||
|
||||
Menu_status_bar_height = nil -- initialized below
|
||||
Menu_status_bar_height = 5 + --[[line height in tests]] 15 + 5
|
||||
|
||||
-- a few text objects we can avoid recomputing unless the font changes
|
||||
Text_cache = {}
|
||||
|
@ -116,15 +116,15 @@ function source.load_settings()
|
|||
local settings = Settings.source
|
||||
love.graphics.setFont(love.graphics.newFont(settings.font_height))
|
||||
-- maximize window to determine maximum allowable dimensions
|
||||
love.window.setMode(0, 0) -- maximize
|
||||
Display_width, Display_height, App.screen.flags = love.window.getMode()
|
||||
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.flags.minwidth = math.min(Display_width, 200)
|
||||
App.screen.flags.minheight = math.min(Display_height, 200)
|
||||
App.screen.width, App.screen.height = settings.width, settings.height
|
||||
--? print('setting window from settings:', App.screen.width, App.screen.height)
|
||||
love.window.setMode(App.screen.width, App.screen.height, App.screen.flags)
|
||||
App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
|
||||
--? print('loading source position', settings.x, settings.y, settings.displayindex)
|
||||
source.set_window_position_from_settings(settings)
|
||||
Show_log_browser_side = settings.show_log_browser_side
|
||||
|
@ -156,19 +156,19 @@ end
|
|||
|
||||
function source.initialize_window_geometry(em_width)
|
||||
-- maximize window
|
||||
love.window.setMode(0, 0) -- maximize
|
||||
Display_width, Display_height, App.screen.flags = love.window.getMode()
|
||||
App.screen.resize(0, 0) -- maximize
|
||||
Display_width, Display_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.minwidth = math.min(App.screen.width, 200)
|
||||
App.screen.flags.minheight = math.min(App.screen.width, 200)
|
||||
love.window.setMode(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')
|
||||
if Settings == nil then Settings = {} end
|
||||
if Settings.source == nil then Settings.source = {} end
|
||||
Settings.source.x, Settings.source.y, Settings.source.displayindex = love.window.getPosition()
|
||||
Settings.source.x, Settings.source.y, Settings.source.displayindex = App.screen.position()
|
||||
end
|
||||
|
||||
function source.resize(w, h)
|
||||
|
@ -254,7 +254,7 @@ end
|
|||
function source.settings()
|
||||
if Current_app == 'source' then
|
||||
--? print('reading source window position')
|
||||
Settings.source.x, Settings.source.y, Settings.source.displayindex = love.window.getPosition()
|
||||
Settings.source.x, Settings.source.y, Settings.source.displayindex = App.screen.position()
|
||||
end
|
||||
local filename = Editor_state.filename
|
||||
if is_relative_path(filename) then
|
||||
|
@ -322,12 +322,15 @@ function source.keychord_pressed(chord, key)
|
|||
--? print('C-l')
|
||||
Show_log_browser_side = not Show_log_browser_side
|
||||
if Show_log_browser_side then
|
||||
App.screen.width = Log_browser_state.right + Margin_right
|
||||
App.screen.width = math.min(Display_width, App.screen.width*2)
|
||||
Editor_state.right = App.screen.width/2 - Margin_right
|
||||
Log_browser_state.left = App.screen.width/2 + Margin_left
|
||||
Log_browser_state.right = App.screen.width - Margin_right
|
||||
else
|
||||
App.screen.width = Editor_state.right + Margin_right
|
||||
end
|
||||
--? print('setting window:', App.screen.width, App.screen.height)
|
||||
love.window.setMode(App.screen.width, App.screen.height, App.screen.flags)
|
||||
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
|
||||
|
|
|
@ -127,7 +127,10 @@ end
|
|||
function edit.draw(State)
|
||||
State.button_handlers = {}
|
||||
App.color(Text_color)
|
||||
assert(#State.lines == #State.line_cache)
|
||||
if #State.lines ~= #State.line_cache then
|
||||
print(('line_cache is out of date; %d when it should be %d'):format(#State.line_cache, #State.lines))
|
||||
assert(false)
|
||||
end
|
||||
if not Text.le1(State.screen_top1, State.cursor1) then
|
||||
print(State.screen_top1.line, State.screen_top1.pos, State.screen_top1.posB, State.cursor1.line, State.cursor1.pos, State.cursor1.posB)
|
||||
assert(false)
|
||||
|
|
|
@ -7,7 +7,7 @@ function test_resize_window()
|
|||
check_eq(App.screen.width, 300, 'F - test_resize_window/baseline/width')
|
||||
check_eq(App.screen.height, 300, 'F - test_resize_window/baseline/height')
|
||||
check_eq(Editor_state.left, Test_margin_left, 'F - test_resize_window/baseline/left_margin')
|
||||
check_eq(Editor_state.right, 300 - Test_margin_right, 'F - test_resize_window/baseline/left_margin')
|
||||
check_eq(Editor_state.right, 300 - Test_margin_right, 'F - test_resize_window/baseline/right_margin')
|
||||
App.resize(200, 400)
|
||||
-- ugly; resize switches to real, non-test margins
|
||||
check_eq(App.screen.width, 200, 'F - test_resize_window/width')
|
||||
|
@ -18,6 +18,84 @@ function test_resize_window()
|
|||
-- TODO: how to make assertions about when App.update got past the early exit?
|
||||
end
|
||||
|
||||
function test_show_log_browser_side()
|
||||
io.write('\ntest_show_log_browser_side')
|
||||
App.screen.init{width=300, height=300}
|
||||
Display_width = App.screen.width
|
||||
Current_app = 'source'
|
||||
Editor_state = edit.initialize_test_state()
|
||||
Editor_state.filename = 'foo'
|
||||
Text.redraw_all(Editor_state)
|
||||
Log_browser_state = edit.initialize_test_state()
|
||||
Text.redraw_all(Log_browser_state)
|
||||
log_browser.parse(Log_browser_state)
|
||||
check(not Show_log_browser_side, 'F - test_show_log_browser_side/baseline')
|
||||
-- pressing ctrl+l shows log-browser side
|
||||
App.wait_fake_time(0.1)
|
||||
App.run_after_keychord('C-l')
|
||||
check(Show_log_browser_side, 'F - test_show_log_browser_side')
|
||||
end
|
||||
|
||||
function test_show_log_browser_side_doubles_window_width_if_possible()
|
||||
io.write('\ntest_show_log_browser_side_doubles_window_width_if_possible')
|
||||
-- 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
|
||||
App.wait_fake_time(0.1)
|
||||
App.run_after_keychord('C-l')
|
||||
-- window width is doubled
|
||||
check_eq(App.screen.width, 600, 'F - test_show_log_browser_side_doubles_window_width_if_possible/display:width')
|
||||
-- left side margins are unchanged
|
||||
check_eq(Editor_state.left, Margin_left, 'F - test_show_log_browser_side_doubles_window_width_if_possible/edit:left')
|
||||
check_eq(Editor_state.right, old_editor_right, 'F - test_show_log_browser_side_doubles_window_width_if_possible/edit:right')
|
||||
-- log browser margins are adjusted
|
||||
check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'F - test_show_log_browser_side_doubles_window_width_if_possible/log:left')
|
||||
check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'F - test_show_log_browser_side_doubles_window_width_if_possible/log:right')
|
||||
end
|
||||
|
||||
function test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width()
|
||||
io.write('\ntest_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width')
|
||||
-- initialize screen dimensions and indicate that it is maximized
|
||||
App.screen.init{width=300, height=300}
|
||||
Display_width = 300
|
||||
-- initialize source app with left side occupying more than half the display
|
||||
Current_app = 'source'
|
||||
Editor_state = edit.initialize_test_state()
|
||||
Editor_state.filename = 'foo'
|
||||
Editor_state.left = Margin_left
|
||||
Editor_state.right = 200
|
||||
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
|
||||
App.wait_fake_time(0.1)
|
||||
App.run_after_keychord('C-l')
|
||||
-- margins are now adjusted
|
||||
check_eq(Editor_state.left, Margin_left, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/edit:left')
|
||||
check_eq(Editor_state.right, App.screen.width/2 - Margin_right, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/edit:right')
|
||||
check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/log:left')
|
||||
check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/log:right')
|
||||
end
|
||||
|
||||
function test_drop_file()
|
||||
io.write('\ntest_drop_file')
|
||||
App.screen.init{width=Editor_state.left+300, height=300}
|
||||
|
|
Loading…
Reference in New Issue