about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2023-12-29 14:29:18 -0800
committerKartik K. Agaram <vc@akkartik.com>2023-12-29 14:29:18 -0800
commit6bd2086b51251ee469b4c9d937624e3be4d97410 (patch)
treee5a73641ef7ad6b7329c5f63fec1ab08cf74546f
parent2b1c48c08e55247cac35c9cb4cdbd1ae10b91fd9 (diff)
parentaa6bfb4b15ea75fa289b78cacc7de38f41daf69a (diff)
downloadtext.love-6bd2086b51251ee469b4c9d937624e3be4d97410.tar.gz
Merge lines.love
-rw-r--r--edit.lua11
-rw-r--r--log_browser.lua2
-rw-r--r--reference.md4
-rw-r--r--run.lua10
-rw-r--r--source.lua10
-rw-r--r--source_edit.lua11
6 files changed, 25 insertions, 23 deletions
diff --git a/edit.lua b/edit.lua
index e4325f4..e28a493 100644
--- a/edit.lua
+++ b/edit.lua
@@ -10,7 +10,7 @@ Margin_right = 25
 edit = {}
 
 -- run in both tests and a real run
-function edit.initialize_state(top, left, right, font_height, line_height)  -- currently always draws to bottom of screen
+function edit.initialize_state(top, left, right, font, font_height, line_height)  -- currently always draws to bottom of screen
   local result = {
     lines = {{data=''}},  -- array of strings
 
@@ -47,6 +47,7 @@ function edit.initialize_state(top, left, right, font_height, line_height)  -- c
     cursor_x = 0,
     cursor_y = 0,
 
+    font = font,
     font_height = font_height,
     line_height = line_height,
 
@@ -67,7 +68,7 @@ function edit.initialize_state(top, left, right, font_height, line_height)  -- c
     search_backup = nil,  -- stuff to restore when cancelling search
   }
   return result
-end  -- App.initialize_state
+end  -- edit.initialize_state
 
 function edit.check_locs(State)
   -- if State is inconsistent (i.e. file changed by some other program),
@@ -99,6 +100,7 @@ end
 
 -- return y drawn until
 function edit.draw(State)
+  love.graphics.setFont(State.font)
   App.color(Text_color)
   assert(#State.lines == #State.line_cache, ('line_cache is out of date; %d elements when it should be %d'):format(#State.line_cache, #State.lines))
   assert(Text.le1(State.screen_top1, State.cursor1), ('screen_top (line=%d,pos=%d) is below cursor (line=%d,pos=%d)'):format(State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos))
@@ -384,7 +386,7 @@ end
 
 function edit.update_font_settings(State, font_height)
   State.font_height = font_height
-  love.graphics.setFont(love.graphics.newFont(State.font_height))
+  State.font = love.graphics.newFont(State.font_height)
   State.line_height = math.floor(font_height*1.3)
 end
 
@@ -401,7 +403,8 @@ function edit.initialize_test_state()
       15,  -- top margin
       Test_margin_left,
       App.screen.width - Test_margin_right,
-      14,  -- font height assuming default LÖVE font
+      love.graphics.getFont(),
+      14,
       15)  -- line height
 end
 
diff --git a/log_browser.lua b/log_browser.lua
index b6195b9..dabec2b 100644
--- a/log_browser.lua
+++ b/log_browser.lua
@@ -6,7 +6,7 @@
 -- functions to render them into the log_render namespace.
 
 function source.initialize_log_browser_side()
-  Log_browser_state = edit.initialize_state(Margin_top, Editor_state.right + Margin_right + Margin_left, (Editor_state.right+Margin_right)*2, Editor_state.font_height, Editor_state.line_height)
+  Log_browser_state = edit.initialize_state(Margin_top, Editor_state.right + Margin_right + Margin_left, (Editor_state.right+Margin_right)*2, Editor_state.font, Editor_state.font_height, Editor_state.line_height)
   Log_browser_state.filename = 'log'
   load_from_disk(Log_browser_state)  -- TODO: pay no attention to Fold
   log_browser.parse(Log_browser_state)
diff --git a/reference.md b/reference.md
index 74698ba..2bc9d03 100644
--- a/reference.md
+++ b/reference.md
@@ -190,8 +190,8 @@ There's much more I could include here; check out [the LÖVE manual](https://lov
 The text-editor widget includes extremely thorough automated tests to give you
 early warning if you break something.
 
-* `state = edit.initialize_state(top, left, right, font_height, line_height)` --
-  returns an object that can be used to render an interactive editor widget
+* `state = edit.initialize_state(top, left, right, font, font_height, line_height)`
+  -- returns an object that can be used to render an interactive editor widget
   for text starting at `y=top` on the app window, between `x=left` and
   `x=right`. Wraps long lines at word boundaries where possible, or in the
   middle of words (no hyphenation yet) when it must.
diff --git a/run.lua b/run.lua
index 6e91c3f..307505d 100644
--- a/run.lua
+++ b/run.lua
@@ -54,14 +54,14 @@ function print_and_log(s)
 end
 
 function run.load_settings()
-  love.graphics.setFont(love.graphics.newFont(Settings.font_height))
+  local font = love.graphics.newFont(Settings.font_height)
   -- 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)
   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 = edit.initialize_state(Margin_top, Margin_left, App.screen.width-Margin_right, font, 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
@@ -79,11 +79,9 @@ end
 
 function run.initialize_default_settings()
   local font_height = 20
-  love.graphics.setFont(love.graphics.newFont(font_height))
+  local font = love.graphics.newFont(font_height)
   run.initialize_window_geometry()
-  Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width-Margin_right)
-  Editor_state.font_height = font_height
-  Editor_state.line_height = math.floor(font_height*1.3)
+  Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width-Margin_right, font, font_height, math.floor(font_height*1.3))
   Settings = run.settings()
 end
 
diff --git a/source.lua b/source.lua
index f2ea79b..88453c3 100644
--- a/source.lua
+++ b/source.lua
@@ -114,7 +114,7 @@ end
 
 function source.load_settings()
   local settings = Settings.source
-  love.graphics.setFont(love.graphics.newFont(settings.font_height))
+  local font = love.graphics.newFont(settings.font_height)
   -- set up desired window dimensions and make window resizable
   _, _, App.screen.flags = App.screen.size()
   App.screen.flags.resizable = true
@@ -126,7 +126,7 @@ function source.load_settings()
   if Show_log_browser_side then
     right = App.screen.width/2 - Margin_right
   end
-  Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*App.width('m'), right, settings.font_height, math.floor(settings.font_height*1.3))
+  Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*App.width('m'), right, font, settings.font_height, math.floor(settings.font_height*1.3))
   Editor_state.filename = settings.filename
   Editor_state.filename = basename(Editor_state.filename)  -- migrate settings that used full paths; we now support only relative paths within the app
   if settings.cursors then
@@ -152,12 +152,10 @@ end
 
 function source.initialize_default_settings()
   local font_height = 20
-  love.graphics.setFont(love.graphics.newFont(font_height))
+  local font = love.graphics.newFont(font_height)
   source.initialize_window_geometry()
-  Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*App.width('m'), App.screen.width-Margin_right)
+  Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*App.width('m'), App.screen.width-Margin_right, font, font_height, math.floor(font_height*1.3))
   Editor_state.filename = 'run.lua'
-  Editor_state.font_height = font_height
-  Editor_state.line_height = math.floor(font_height*1.3)
 end
 
 function source.initialize_window_geometry()
diff --git a/source_edit.lua b/source_edit.lua
index 0af9949..f58d7e3 100644
--- a/source_edit.lua
+++ b/source_edit.lua
@@ -25,7 +25,7 @@ Same_point_distance = 4  -- pixel distance at which two points are considered th
 edit = {}
 
 -- run in both tests and a real run
-function edit.initialize_state(top, left, right, font_height, line_height)  -- currently always draws to bottom of screen
+function edit.initialize_state(top, left, right, font, font_height, line_height)  -- currently always draws to bottom of screen
   local result = {
     -- a line is either text or a drawing
     -- a text is a table with:
@@ -85,6 +85,7 @@ function edit.initialize_state(top, left, right, font_height, line_height)  -- c
     current_drawing_mode = 'line',
     previous_drawing_mode = nil,  -- extra state for some ephemeral modes like moving/deleting/naming points
 
+    font = font,
     font_height = font_height,
     line_height = line_height,
 
@@ -105,7 +106,7 @@ function edit.initialize_state(top, left, right, font_height, line_height)  -- c
     search_backup = nil,  -- stuff to restore when cancelling search
   }
   return result
-end  -- App.initialize_state
+end  -- edit.initialize_state
 
 function edit.check_locs(State)
   -- if State is inconsistent (i.e. file changed by some other program),
@@ -157,6 +158,7 @@ end
 
 function edit.draw(State, hide_cursor, show_line_numbers)
   State.button_handlers = {}
+  love.graphics.setFont(State.font)
   App.color(Text_color)
   assert(#State.lines == #State.line_cache, ('line_cache is out of date; %d elements when it should be %d'):format(#State.line_cache, #State.lines))
   assert(Text.le1(State.screen_top1, State.cursor1), ('screen_top (line=%d,pos=%d) is below cursor (line=%d,pos=%d)'):format(State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos))
@@ -552,7 +554,7 @@ end
 
 function edit.update_font_settings(State, font_height)
   State.font_height = font_height
-  love.graphics.setFont(love.graphics.newFont(State.font_height))
+  State.font = love.graphics.newFont(State.font_height)
   State.line_height = math.floor(font_height*1.3)
 end
 
@@ -569,7 +571,8 @@ function edit.initialize_test_state()
       15,  -- top margin
       Test_margin_left,
       App.screen.width - Test_margin_right,
-      14,  -- font height assuming default LÖVE font
+      love.graphics.getFont(),
+      14,
       15)  -- line height
 end