diff --git a/edit.lua b/edit.lua index b1f837b..8759b1a 100644 --- a/edit.lua +++ b/edit.lua @@ -23,7 +23,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: @@ -83,6 +83,7 @@ function edit.initialize_state(top, left, right, font_height, line_height) -- c current_drawing_mode = 'line', -- one of the available shape modes 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), @@ -158,6 +159,7 @@ end -- return y drawn until function edit.draw(State) 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)) @@ -550,7 +552,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 @@ -567,7 +569,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 c158bef..df08f28 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 and line drawings 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 3f0926f..f13f567 100644 --- a/run.lua +++ b/run.lua @@ -56,14 +56,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)) end function run.set_window_position_from_settings(settings) @@ -78,11 +78,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 8bb0c7a..3f785f7 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