I’m trying to print text centred around a point.
At the moment my code offsets the x coordinate by half the width
of a string in pixels, calculated as (4* #s)-1.
This works fine for
alphanumeric text but is wrong when the text contains glyphs.
Is there a built in function to help achieve this?
Or do I need to examine every character when computing the pixel width of the text?
Unfortunately, you pretty much have to watch out for those double-wide glyphs.
I'd suggest either minimizing your use of glyphs or making a function that returns the proper width of a string.
Of course, a more ridiculous hack way could be something like this:
function center_text(string, y, c)
local x = 64 - (#string * 2)
if(c)color(c)
for i = 1, #string do
print(sub(string, i, i), x, y)
x += 4
end
end
function _draw()
cls(7)
color(8)
center_text("😐 hello, world! 😐 ", 60)
-- Note the extra space after each glyph
end |
I put this together in a minute, so it might not be the best.
Cunning!
I ended up taking the width of glyphs into account like this:
-- centered printing
-- width of a printed string
function printw(s)
if #s == 0 then
return 0
end
w = 0
for i = 1, #s do
if sub(s,i,i) >= "\x80" then
w += 7
else
w += 3
end
end
return w + #s - 1
end
-- print centered
function printc(s, x, y)
print(s, x - printw(s)/2, y)
end |
And that's working well
[Please log in to post a comment]



