split mouse_pressed events between Text and Drawing
This commit is contained in:
parent
222a11a8dd
commit
92bd6839c7
20
drawing.lua
20
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
|
||||
|
|
24
main.lua
24
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
|
||||
|
|
13
text.lua
13
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,16 +160,20 @@ function Text.nearest_cursor_pos(line, x, hint)
|
|||
if x > max_x then
|
||||
return #line+1
|
||||
end
|
||||
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 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)
|
||||
local currxmin = Text.cursor_x(line, curr)
|
||||
|
|
Loading…
Reference in New Issue