first test!
This commit is contained in:
parent
8aa72be226
commit
46d4c4de10
56
file.lua
56
file.lua
|
@ -102,3 +102,59 @@ function store_drawing(outfile, drawing)
|
|||
end
|
||||
outfile:write('```\n')
|
||||
end
|
||||
|
||||
-- for tests
|
||||
function load_array(a)
|
||||
local result = {}
|
||||
local next_line = ipairs(a)
|
||||
local i,line = 0, ''
|
||||
while true do
|
||||
i,line = next_line(a, i)
|
||||
if i == nil then break end
|
||||
if line == '```lines' then -- inflexible with whitespace since these files are always autogenerated
|
||||
table.insert(result, load_drawing_from_array(next_line, a, i))
|
||||
else
|
||||
table.insert(result, {mode='text', data=line})
|
||||
end
|
||||
end
|
||||
if #result == 0 then
|
||||
table.insert(result, {mode='text', data=''})
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function load_drawing_from_array(iter, a, i)
|
||||
local drawing = {mode='drawing', h=256/2, points={}, shapes={}, pending={}}
|
||||
local line
|
||||
while true do
|
||||
i, line = iter(a, i)
|
||||
assert(i)
|
||||
if line == '```' then break end
|
||||
local shape = json.decode(line)
|
||||
if shape.mode == 'freehand' then
|
||||
-- no changes needed
|
||||
elseif shape.mode == 'line' or shape.mode == 'manhattan' then
|
||||
local name = shape.p1.name
|
||||
shape.p1 = Drawing.insert_point(drawing.points, shape.p1.x, shape.p1.y)
|
||||
drawing.points[shape.p1].name = name
|
||||
name = shape.p2.name
|
||||
shape.p2 = Drawing.insert_point(drawing.points, shape.p2.x, shape.p2.y)
|
||||
drawing.points[shape.p2].name = name
|
||||
elseif shape.mode == 'polygon' or shape.mode == 'rectangle' or shape.mode == 'square' then
|
||||
for i,p in ipairs(shape.vertices) do
|
||||
local name = p.name
|
||||
shape.vertices[i] = Drawing.insert_point(drawing.points, p.x,p.y)
|
||||
drawing.points[shape.vertices[i]].name = name
|
||||
end
|
||||
elseif shape.mode == 'circle' or shape.mode == 'arc' then
|
||||
local name = shape.center.name
|
||||
shape.center = Drawing.insert_point(drawing.points, shape.center.x,shape.center.y)
|
||||
drawing.point[shape.center].name = name
|
||||
else
|
||||
print(shape.mode)
|
||||
assert(false)
|
||||
end
|
||||
table.insert(drawing.shapes, shape)
|
||||
end
|
||||
return drawing
|
||||
end
|
||||
|
|
43
text.lua
43
text.lua
|
@ -23,7 +23,7 @@ function Text.draw(line, line_width, line_index)
|
|||
for _, f in ipairs(line.fragments) do
|
||||
local frag, frag_text = f.data, f.text
|
||||
-- render fragment
|
||||
local frag_width = math.floor(frag_text:getWidth()*Zoom)
|
||||
local frag_width = math.floor(App.width(frag_text)*Zoom)
|
||||
if x + frag_width > line_width then
|
||||
assert(x > 25) -- no overfull lines
|
||||
if line_index > Screen_top1.line or pos > Screen_top1.pos then
|
||||
|
@ -47,7 +47,7 @@ function Text.draw(line, line_width, line_index)
|
|||
if Debug_new_render then print('checking to draw', pos, Screen_top1.pos) end
|
||||
if line_index > Screen_top1.line or pos >= Screen_top1.pos then
|
||||
if Debug_new_render then print('drawing '..frag) end
|
||||
love.graphics.draw(frag_text, x,y, 0, Zoom)
|
||||
App.screen.draw(frag_text, x,y, 0, Zoom)
|
||||
end
|
||||
-- render cursor if necessary
|
||||
local frag_len = utf8.len(frag)
|
||||
|
@ -78,13 +78,32 @@ function Text.draw_cursor(x, y)
|
|||
Cursor_y = y+math.floor(15*Zoom)
|
||||
end
|
||||
|
||||
function test_draw_text()
|
||||
App.screen.init{width=120, height=60}
|
||||
Lines = load_array{'abc', 'def', 'ghi'}
|
||||
Line_width = 120
|
||||
Cursor1 = {line=1, pos=1}
|
||||
Screen_top1 = {line=1, pos=1}
|
||||
Screen_bottom1 = {}
|
||||
Zoom = 1
|
||||
App.draw()
|
||||
local screen_top_margin = 15 -- pixels
|
||||
local line_height = 15 -- pixels
|
||||
local y = screen_top_margin
|
||||
App.screen.check(y, 'abc', 'F - test_draw_text/screen:1')
|
||||
y = y + line_height
|
||||
App.screen.check(y, 'def', 'F - test_draw_text/screen:2')
|
||||
y = y + line_height
|
||||
App.screen.check(y, 'ghi', 'F - test_draw_text/screen:3')
|
||||
end
|
||||
|
||||
function Text.compute_fragments(line, line_width)
|
||||
line.fragments = {}
|
||||
local x = 25
|
||||
-- try to wrap at word boundaries
|
||||
for frag in line.data:gmatch('%S*%s*') do
|
||||
local frag_text = love.graphics.newText(love.graphics.getFont(), frag)
|
||||
local frag_width = math.floor(frag_text:getWidth()*Zoom)
|
||||
local frag_text = App.newText(love.graphics.getFont(), frag)
|
||||
local frag_width = math.floor(App.width(frag_text)*Zoom)
|
||||
--? print('x: '..tostring(x)..'; '..tostring(line_width-x)..'px to go')
|
||||
--? print('frag: ^'..frag..'$ is '..tostring(frag_width)..'px wide')
|
||||
if x + frag_width > line_width then
|
||||
|
@ -95,13 +114,13 @@ function Text.compute_fragments(line, line_width)
|
|||
local b = Text.nearest_cursor_pos(frag, line_width - x)
|
||||
--? print('space for '..tostring(b)..' graphemes')
|
||||
local frag1 = string.sub(frag, 1, b)
|
||||
local frag1_text = love.graphics.newText(love.graphics.getFont(), frag1)
|
||||
local frag1_width = math.floor(frag1_text:getWidth()*Zoom)
|
||||
local frag1_text = App.newText(love.graphics.getFont(), frag1)
|
||||
local frag1_width = math.floor(frag1App.width(_text)*Zoom)
|
||||
--? print('inserting '..frag1..' of width '..tostring(frag1_width)..'px')
|
||||
table.insert(line.fragments, {data=frag1, text=frag1_text})
|
||||
frag = string.sub(frag, b+1)
|
||||
frag_text = love.graphics.newText(love.graphics.getFont(), frag)
|
||||
frag_width = math.floor(frag_text:getWidth()*Zoom)
|
||||
frag_text = App.newText(love.graphics.getFont(), frag)
|
||||
frag_width = math.floor(App.width(frag_text)*Zoom)
|
||||
end
|
||||
x = 25 -- new line
|
||||
end
|
||||
|
@ -479,14 +498,14 @@ end
|
|||
|
||||
function Text.cursor_x(line_data, cursor_pos)
|
||||
local line_before_cursor = line_data:sub(1, cursor_pos-1)
|
||||
local text_before_cursor = love.graphics.newText(love.graphics.getFont(), line_before_cursor)
|
||||
return 25 + math.floor(text_before_cursor:getWidth()*Zoom)
|
||||
local text_before_cursor = App.newText(love.graphics.getFont(), line_before_cursor)
|
||||
return 25 + math.floor(App.width(text_before_cursor)*Zoom)
|
||||
end
|
||||
|
||||
function Text.cursor_x2(s, cursor_pos)
|
||||
local s_before_cursor = s:sub(1, cursor_pos-1)
|
||||
local text_before_cursor = love.graphics.newText(love.graphics.getFont(), s_before_cursor)
|
||||
return math.floor(text_before_cursor:getWidth()*Zoom)
|
||||
local text_before_cursor = App.newText(love.graphics.getFont(), s_before_cursor)
|
||||
return math.floor(App.width(text_before_cursor)*Zoom)
|
||||
end
|
||||
|
||||
function Text.to2(pos1)
|
||||
|
|
Loading…
Reference in New Issue