about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2023-09-15 23:56:49 -0700
committerKartik K. Agaram <vc@akkartik.com>2023-09-15 23:56:49 -0700
commit09c76c82c2a415839ad0d50d9fc14e883caeae6e (patch)
tree104401a62623498d9cf9eabe50159e6eec1668f3
parent1a88b4a2907a78fd4a1febf32c74d0305aff6ba0 (diff)
parent715c6fd32fadf8b14f4755cc31bacfb21c7f7dac (diff)
downloadtext.love-09c76c82c2a415839ad0d50d9fc14e883caeae6e.tar.gz
Merge lines.love
-rw-r--r--commands.lua4
-rw-r--r--drawing.lua9
-rw-r--r--edit.lua2
-rw-r--r--log_browser.lua10
-rw-r--r--source.lua4
-rw-r--r--source_edit.lua32
-rw-r--r--source_text.lua8
7 files changed, 40 insertions, 29 deletions
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