about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2023-07-10 17:55:12 -0700
committerKartik K. Agaram <vc@akkartik.com>2023-07-10 17:55:12 -0700
commit8482be9472cf977f664cb3213eb886db02407c78 (patch)
tree5ec1c0db39f56b5879bcf38f5387825b39a3bcec
parenta995471ebc95411c45c2b6d656be4c9091c8b1a0 (diff)
parentbca7f8259802d6f6751dbe265dc0b27d7fac7589 (diff)
downloadview.love-8482be9472cf977f664cb3213eb886db02407c78.tar.gz
Merge lines.love
-rw-r--r--run.lua50
-rw-r--r--source.lua86
-rw-r--r--source_tests.lua35
3 files changed, 54 insertions, 117 deletions
diff --git a/run.lua b/run.lua
index b56a0d2..2030c93 100644
--- a/run.lua
+++ b/run.lua
@@ -55,21 +55,28 @@ end
 
 function run.load_settings()
   love.graphics.setFont(love.graphics.newFont(Settings.font_height))
-  -- determine default dimensions and flags
-  App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
-  -- set up desired window dimensions
+  -- set up desired window dimensions and make window resizable
+  _, _, App.screen.flags = App.screen.size()
   App.screen.flags.resizable = true
-  App.screen.flags.minwidth = math.min(App.screen.width, 200)
-  App.screen.flags.minheight = math.min(App.screen.height, 200)
   App.screen.width, App.screen.height = Settings.width, Settings.height
   App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
-  App.screen.move(Settings.x, Settings.y, Settings.displayindex)
+  run.set_window_position_from_settings(Settings)
   Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width-Margin_right, Settings.font_height, math.floor(Settings.font_height*1.3))
   Editor_state.filename = Settings.filename
   Editor_state.screen_top1 = Settings.screen_top
   Editor_state.cursor1 = Settings.cursor
 end
 
+function run.set_window_position_from_settings(settings)
+  local os = love.system.getOS()
+  if os == 'Linux' then
+    -- love.window.setPosition doesn't quite seem to do what is asked of it on Linux.
+    App.screen.move(settings.x, settings.y-37, settings.displayindex)
+  else
+    App.screen.move(settings.x, settings.y, settings.displayindex)
+  end
+end
+
 function run.initialize_default_settings()
   local font_height = 20
   love.graphics.setFont(love.graphics.newFont(font_height))
@@ -81,22 +88,17 @@ function run.initialize_default_settings()
 end
 
 function run.initialize_window_geometry(em_width)
-  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
-  App.screen.resize(0, 0)  -- maximize
+  -- Initialize window width/height and make window resizable.
+  --
+  -- I get tempted to have opinions about window dimensions here, but they're
+  -- non-portable:
+  --  - maximizing doesn't work on mobile and messes things up
+  --  - maximizing keeps the title bar on screen in Linux, but off screen on
+  --    Windows. And there's no way to get the height of the title bar.
+  -- It seems more robust to just follow LÖVE's default window size until
+  -- someone overrides it.
   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.minwidth = math.min(App.screen.width, 200)
-  App.screen.flags.minheight = math.min(App.screen.height, 200)
   App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
 end
 
@@ -148,12 +150,8 @@ function run.quit()
 end
 
 function run.settings()
-  if Settings == nil then
-    Settings = {}
-  end
-  if Current_app == 'run' then
-    Settings.x, Settings.y, Settings.displayindex = App.screen.position()
-  end
+  if Settings == nil then Settings = {} end
+  Settings.x, Settings.y, Settings.displayindex = App.screen.position()
   return {
     x=Settings.x, y=Settings.y, displayindex=Settings.displayindex,
     width=App.screen.width, height=App.screen.height,
diff --git a/source.lua b/source.lua
index 6f5ff0a..7e85bf8 100644
--- a/source.lua
+++ b/source.lua
@@ -121,8 +121,11 @@ end
 function source.load_settings()
   local settings = Settings.source
   love.graphics.setFont(love.graphics.newFont(settings.font_height))
-  source.resize_window_from_settings(settings)
---?   print('loading source position', settings.x, settings.y, settings.displayindex)
+  -- set up desired window dimensions and make window resizable
+  _, _, 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)
   Show_log_browser_side = settings.show_log_browser_side
   local right = App.screen.width - Margin_right
@@ -143,29 +146,14 @@ function source.load_settings()
   end
 end
 
-function source.resize_window_from_settings(settings)
+function source.set_window_position_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
+  if os == 'Linux' then
+    -- love.window.setPosition doesn't quite seem to do what is asked of it on Linux.
+    App.screen.move(settings.x, settings.y-37, settings.displayindex)
+  else
+    App.screen.move(settings.x, settings.y, settings.displayindex)
   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.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)
-  App.screen.resize(App.screen.width, App.screen.height, App.screen.flags)
-end
-
-function source.set_window_position_from_settings(settings)
-  -- love.window.setPosition doesn't quite seem to do what is asked of it on Linux.
-  App.screen.move(settings.x, settings.y-37, settings.displayindex)
 end
 
 function source.initialize_default_settings()
@@ -179,27 +167,18 @@ function source.initialize_default_settings()
 end
 
 function source.initialize_window_geometry(em_width)
-  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
-  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
+  -- Initialize window width/height and make window resizable.
+  --
+  -- I get tempted to have opinions about window dimensions here, but they're
+  -- non-portable:
+  --  - maximizing doesn't work on mobile and messes things up
+  --  - maximizing keeps the title bar on screen in Linux, but off screen on
+  --    Windows. And there's no way to get the height of the title bar.
+  -- It seems more robust to just follow LÖVE's default window size until
+  -- someone overrides it.
+  App.screen.width, App.screen.height, App.screen.flags = App.screen.size()
   App.screen.flags.resizable = true
-  App.screen.flags.minwidth = math.min(App.screen.width, 200)
-  App.screen.flags.minheight = math.min(App.screen.height, 200)
   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 = App.screen.position()
 end
 
 function source.resize(w, h)
@@ -290,11 +269,9 @@ function source.quit()
 end
 
 function source.settings()
-  if Current_app == 'source' then
---?     print('reading source window position')
-    Settings.source.x, Settings.source.y, Settings.source.displayindex = App.screen.position()
-  end
---?   print('saving source settings', Settings.source.x, Settings.source.y, Settings.source.displayindex)
+  if Settings == nil then Settings = {} end
+  if Settings.source == nil then Settings.source = {} end
+  Settings.source.x, Settings.source.y, Settings.source.displayindex = App.screen.position()
   File_navigation.cursors[Editor_state.filename] = {cursor1=Editor_state.cursor1, screen_top1=Editor_state.screen_top1}
   return {
     x=Settings.source.x, y=Settings.source.y, displayindex=Settings.source.displayindex,
@@ -377,20 +354,15 @@ function source.keychord_press(chord, key)
 --?     print('C-l')
     Show_log_browser_side = not Show_log_browser_side
     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.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.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)
-    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)
+      Editor_state.right = App.screen.width - Margin_right
+      Editor_state.width = Editor_state.right-Editor_state.left
+      Text.redraw_all(Editor_state)
     end
     return
   end
diff --git a/source_tests.lua b/source_tests.lua
index bf3ae3e..e3264bb 100644
--- a/source_tests.lua
+++ b/source_tests.lua
@@ -19,7 +19,6 @@ end
 
 function test_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'
@@ -34,41 +33,9 @@ function test_show_log_browser_side()
   check(Show_log_browser_side, 'check')
 end
 
-function test_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
-  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()
+function test_show_log_browser_side_splits_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()