From 92bd6839c769b70e75c37c363a13789c8c0823e6 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 17 May 2022 22:53:09 -0700 Subject: [PATCH] split mouse_pressed events between Text and Drawing --- drawing.lua | 20 ++++++++++++++++++++ main.lua | 24 ++++-------------------- text.lua | 27 ++++++++++++++++++++------- 3 files changed, 44 insertions(+), 27 deletions(-) diff --git a/drawing.lua b/drawing.lua index 9592587..fad062f 100644 --- a/drawing.lua +++ b/drawing.lua @@ -49,6 +49,26 @@ function Drawing.draw(line, y) Drawing.draw_pending_shape(16,line.y, line) end +function Drawing.in_drawing(drawing, x,y) + return y >= drawing.y and y < drawing.y + Drawing.pixels(drawing.h) and x >= 16 and x < 16+Drawing_width +end + +function Drawing.mouse_pressed(drawing, x,y, button) + if Current_drawing_mode == 'freehand' then + drawing.pending = {mode=Current_drawing_mode, points={{x=Drawing.coord(x-16), y=Drawing.coord(y-drawing.y)}}} + elseif Current_drawing_mode == 'line' or Current_drawing_mode == 'manhattan' then + local j = Drawing.insert_point(drawing.points, Drawing.coord(x-16), Drawing.coord(y-drawing.y)) + drawing.pending = {mode=Current_drawing_mode, p1=j} + elseif Current_drawing_mode == 'polygon' then + local j = Drawing.insert_point(drawing.points, Drawing.coord(x-16), Drawing.coord(y-drawing.y)) + drawing.pending = {mode=Current_drawing_mode, vertices={j}} + elseif Current_drawing_mode == 'circle' then + local j = Drawing.insert_point(drawing.points, Drawing.coord(x-16), Drawing.coord(y-drawing.y)) + drawing.pending = {mode=Current_drawing_mode, center=j} + end + Lines.current = drawing +end + function Drawing.keychord_pressed(chord) if chord == 'C-=' then Drawing_width = Drawing_width/Zoom diff --git a/main.lua b/main.lua index 36ff345..17c5e4f 100644 --- a/main.lua +++ b/main.lua @@ -158,28 +158,12 @@ function love.mousepressed(x,y, button) for line_index,line in ipairs(Lines) do if line.mode == 'text' then - -- move cursor - if x >= 16 and y >= line.y and y < line.y+15*Zoom then - Cursor_line = line_index - Cursor_pos = Text.nearest_cursor_pos(line.data, x, 1) + if Text.in_line(line, x,y) then + Text.move_cursor(line_index, line, x) end elseif line.mode == 'drawing' then - local drawing = line - local x, y = love.mouse.getX(), love.mouse.getY() - if y >= drawing.y and y < drawing.y + Drawing.pixels(drawing.h) and x >= 16 and x < 16+Drawing_width then - if Current_drawing_mode == 'freehand' then - drawing.pending = {mode=Current_drawing_mode, points={{x=Drawing.coord(x-16), y=Drawing.coord(y-drawing.y)}}} - elseif Current_drawing_mode == 'line' or Current_drawing_mode == 'manhattan' then - local j = Drawing.insert_point(drawing.points, Drawing.coord(x-16), Drawing.coord(y-drawing.y)) - drawing.pending = {mode=Current_drawing_mode, p1=j} - elseif Current_drawing_mode == 'polygon' then - local j = Drawing.insert_point(drawing.points, Drawing.coord(x-16), Drawing.coord(y-drawing.y)) - drawing.pending = {mode=Current_drawing_mode, vertices={j}} - elseif Current_drawing_mode == 'circle' then - local j = Drawing.insert_point(drawing.points, Drawing.coord(x-16), Drawing.coord(y-drawing.y)) - drawing.pending = {mode=Current_drawing_mode, center=j} - end - Lines.current = drawing + if Drawing.in_drawing(line, x, y) then + Drawing.mouse_pressed(line, x,y, button) end end end diff --git a/text.lua b/text.lua index d46edca..6888fda 100644 --- a/text.lua +++ b/text.lua @@ -143,6 +143,15 @@ function Text.keychord_pressed(chord) end end +function Text.in_line(line, x,y) + return x >= 16 and y >= line.y and y < line.y+15*Zoom +end + +function Text.move_cursor(line_index, line, x, hint) + Cursor_line = line_index + Cursor_pos = Text.nearest_cursor_pos(line.data, x) +end + function Text.nearest_cursor_pos(line, x, hint) if x == 0 then return 1 @@ -151,15 +160,19 @@ function Text.nearest_cursor_pos(line, x, hint) if x > max_x then return #line+1 end - local currx = Text.cursor_x(line, hint) - if currx > x-2 and currx < x+2 then - return hint + if hint then + local currx = Text.cursor_x(line, hint) + if currx > x-2 and currx < x+2 then + return hint + end end local left, right = 1, #line+1 - if currx > x then - right = hint - else - left = hint + if hint then + if currx > x then + right = hint + else + left = hint + end end while left < right-1 do local curr = math.floor((left+right)/2)