diff --git a/commands.lua b/commands.lua index 512992d..4a0d24a 100644 --- a/commands.lua +++ b/commands.lua @@ -129,8 +129,8 @@ end function navigate_to_file(s) move_candidate_to_front(s) - local candidate = guess_source(s..'.lua') - source.switch_to_file(candidate) + source.switch_to_file(s..'.lua') + love.window.setTitle('lines.love - source - '..Editor_state.filename) reset_file_navigator() end diff --git a/drawing.lua b/drawing.lua index 5af25fb..a98f5b2 100644 --- a/drawing.lua +++ b/drawing.lua @@ -191,8 +191,9 @@ function Drawing.draw_pending_shape(drawing, top, left,right) if mx < 0 or mx >= 256 or my < 0 or my >= drawing.h then return end + local r = round(geom.dist(center.x, center.y, mx, my)) local cx,cy = px(center.x), py(center.y) - love.graphics.circle('line', cx,cy, geom.dist(cx,cy, App.mouse_x(),App.mouse_y())) + love.graphics.circle('line', cx,cy, Drawing.pixels(r, width)) elseif shape.mode == 'arc' then local center = drawing.points[shape.center] if mx < 0 or mx >= 256 or my < 0 or my >= drawing.h then @@ -248,6 +249,12 @@ function Drawing.update(State) if State.lines.current_drawing == nil then return end local drawing = State.lines.current_drawing local line_cache = State.line_cache[State.lines.current_drawing_index] + if line_cache.starty == nil then + -- some event cleared starty just this frame + -- draw in this frame will soon set starty + -- just skip this frame + return + end assert(drawing.mode == 'drawing') local pmx, pmy = App.mouse_x(), App.mouse_y() local mx = Drawing.coord(pmx-State.left, State.width) diff --git a/edit.lua b/edit.lua index 446d76d..3819d06 100644 --- a/edit.lua +++ b/edit.lua @@ -233,11 +233,13 @@ end function edit.mouse_wheel_move(State, dx,dy) if dy > 0 then State.cursor1 = {line=State.screen_top1.line, pos=State.screen_top1.pos} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(dy) do Text.up(State) end elseif dy < 0 then State.cursor1 = {line=State.screen_bottom1.line, pos=State.screen_bottom1.pos} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(-dy) do Text.down(State) end diff --git a/log_browser.lua b/log_browser.lua index 078db06..6432d85 100644 --- a/log_browser.lua +++ b/log_browser.lua @@ -35,7 +35,6 @@ function log_browser.parse(State) if rest then line.data = rest end - line.filename = guess_source(line.filename) line.line_number = tonumber(line.line_number) if line.data:sub(1,1) == '{' then local data = json.decode(line.data) @@ -75,15 +74,6 @@ function table.shallowcopy(x) return {unpack(x)} end -function guess_source(filename) - local possible_source = filename:gsub('%.lua$', '%.splua') - if file_exists(possible_source) then - return possible_source - else - return filename - end -end - function log_browser.draw(State, hide_cursor) assert(#State.lines == #State.line_cache) local mouse_line_index = log_browser.line_index(State, App.mouse_x(), App.mouse_y()) diff --git a/source.lua b/source.lua index 4d4e7fd..f2ea79b 100644 --- a/source.lua +++ b/source.lua @@ -74,7 +74,7 @@ function source.initialize() -- keep a few blank lines around: https://merveilles.town/@akkartik/110084833821965708 - love.window.setTitle('text.love - source') + love.window.setTitle('text.love - source - '..Editor_state.filename) @@ -237,7 +237,7 @@ function source.switch_to_file(filename) end function source.draw() - edit.draw(Editor_state, --[[hide cursor?]] Show_file_navigator) + edit.draw(Editor_state, --[[hide cursor?]] Show_file_navigator, --[[show line numbers]] true) if Show_log_browser_side then -- divider App.color(Divider_color) diff --git a/source_edit.lua b/source_edit.lua index 78c7f4d..506aa41 100644 --- a/source_edit.lua +++ b/source_edit.lua @@ -89,7 +89,7 @@ function edit.initialize_state(top, left, right, font_height, line_height) -- c line_height = line_height, top = top, - left = math.floor(left), + left = math.floor(left), -- left margin for text; line numbers go to the left of this right = math.floor(right), width = right-left, @@ -115,7 +115,7 @@ function edit.check_locs(State) or not edit.cursor_on_text(State) or not Text.le1(State.screen_top1, State.cursor1) then State.screen_top1 = {line=1, pos=1} - edit.put_cursor_on_first_text_line(State) + edit.put_cursor_on_next_text_line(State) end end @@ -131,16 +131,20 @@ function edit.cursor_on_text(State) and State.lines[State.cursor1.line].mode == 'text' end -function edit.put_cursor_on_first_text_line(State) - for i,line in ipairs(State.lines) do - if line.mode == 'text' then - State.cursor1 = {line=i, pos=1} - break - end +function edit.put_cursor_on_next_text_line(State) + while true do + if State.cursor1.line >= #State.lines then + break + end + if State.lines[State.cursor1.line].mode == 'text' then + break + end + State.cursor1.line = State.cursor1.line+1 + State.cursor1.pos = 1 end end -function edit.draw(State, hide_cursor) +function edit.draw(State, hide_cursor, show_line_numbers) State.button_handlers = {} App.color(Text_color) if #State.lines ~= #State.line_cache then @@ -169,7 +173,11 @@ function edit.draw(State, hide_cursor) end if line.data == '' then -- button to insert new drawing - button(State, 'draw', {x=4, y=y+4, w=12,h=12, color={1,1,0}, + local buttonx = State.left-Margin_left+4 + if show_line_numbers then + buttonx = 4 -- HACK: position draw buttons at a fixed x on screen + end + button(State, 'draw', {x=buttonx, y=y+4, w=12,h=12, color={1,1,0}, icon = icon.insert_drawing, onpress1 = function() Drawing.before = snapshot(State, line_index-1, line_index) @@ -183,7 +191,7 @@ function edit.draw(State, hide_cursor) end, }) end - y, screen_bottom1.pos = Text.draw(State, line_index, y, startpos, hide_cursor) + y, screen_bottom1.pos = Text.draw(State, line_index, y, startpos, hide_cursor, show_line_numbers) --? print('=> y', y) elseif line.mode == 'drawing' then y = y+Drawing_padding_top @@ -329,11 +337,13 @@ end function edit.mouse_wheel_move(State, dx,dy) if dy > 0 then State.cursor1 = {line=State.screen_top1.line, pos=State.screen_top1.pos} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(dy) do Text.up(State) end elseif dy < 0 then State.cursor1 = {line=State.screen_bottom1.line, pos=State.screen_bottom1.pos} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(-dy) do Text.down(State) end diff --git a/source_text.lua b/source_text.lua index 68b560e..df36266 100644 --- a/source_text.lua +++ b/source_text.lua @@ -3,7 +3,7 @@ Text = {} -- draw a line starting from startpos to screen at y between State.left and State.right -- return y for the next line, and position of start of final screen line drawn -function Text.draw(State, line_index, y, startpos, hide_cursor) +function Text.draw(State, line_index, y, startpos, hide_cursor, show_line_numbers) local line = State.lines[line_index] local line_cache = State.line_cache[line_index] line_cache.starty = y @@ -12,8 +12,10 @@ function Text.draw(State, line_index, y, startpos, hide_cursor) local final_screen_line_starting_pos = startpos -- track value to return Text.populate_screen_line_starting_pos(State, line_index) Text.populate_link_offsets(State, line_index) - App.color(Line_number_color) - love.graphics.print(line_index, State.left-Line_number_width*App.width('m')+10,y) + if show_line_numbers then + App.color(Line_number_color) + love.graphics.print(line_index, State.left-Line_number_width*App.width('m')+10,y) + end initialize_color() assert(#line_cache.screen_line_starting_pos >= 1) for i=1,#line_cache.screen_line_starting_pos do