Quebra de Linha

1,134 views
Skip to first unread message

Jeremias Queiroga

unread,
Aug 10, 2010, 1:52:47 PM8/10/10
to lua...@googlegroups.com
Alguém sabe me dizer se tem como efetuar quebra de linha de um texto com '\n' e escrever com canvas:drawTest(), sem ter que criar várias string e escrever separadamente?

------------------------------------------------------------
Jeremias Queiroga

Francisco Sant'anna

unread,
Aug 10, 2010, 3:01:38 PM8/10/10
to lua...@googlegroups.com
2010/8/10 Jeremias Queiroga <jqca...@gmail.com>
Alguém sabe me dizer se tem como efetuar quebra de linha de um texto com '\n' e escrever com canvas:drawTest(), sem ter que criar várias string e escrever separadamente?

Não tem como.
Mas você pode criar uma "drawRichText" que faz isso "parseando" a string e usando measureText/drawText por trás.

--
Francisco Sant'Anna
http://www.lua.inf.puc-rio.br/~francisco/

Jeremias Queiroga

unread,
Aug 10, 2010, 3:06:11 PM8/10/10
to lua...@googlegroups.com
e Será q tem como criar uma região com Scrool? No qual possamos rolar pra cima, baixo ou para os lados?
------------------------------------------------------------
Jeremias Queiroga


2010/8/10 Francisco Sant'anna <francisco...@gmail.com>

Francisco Sant'anna

unread,
Aug 10, 2010, 3:13:28 PM8/10/10
to lua...@googlegroups.com
2010/8/10 Jeremias Queiroga <jqca...@gmail.com>
e Será q tem como criar uma região com Scrool? No qual possamos rolar pra cima, baixo ou para os lados?

Sim, é possível com as operações primitivas disponíveis, mas não é tão simples quanto o "\n".


Roger Nogueira

unread,
Aug 10, 2010, 3:09:50 PM8/10/10
to lua...@googlegroups.com
testa desta forma:

Info = {
    'texto texto texto texto texto texto texto texto texto',
    'texto texto texto texto texto texto texto texto texto',
    'texto texto texto texto texto texto texto texto texto',
    'texto.'
}

[]'s

Roger

2010/8/10 Jeremias Queiroga <jqca...@gmail.com>
Alguém sabe me dizer se tem como efetuar quebra de linha de um texto com '\n' e escrever com canvas:drawTest(), sem ter que criar várias string e escrever separadamente?

------------------------------------------------------------
Jeremias Queiroga

--

Jeremias Queiroga

unread,
Aug 10, 2010, 3:17:02 PM8/10/10
to lua...@googlegroups.com
Francisco, 

Você tem algum exemplo ou a API dessas operações primitivas pra que eu possa criar uma janela com scrool... pois se eu tenho um texto maior que a regiao eu perco boa parte do texto.
------------------------------------------------------------
Jeremias Queiroga


2010/8/10 Francisco Sant'anna <francisco...@gmail.com>
2010/8/10 Jeremias Queiroga <jqca...@gmail.com>
--

Francisco Sant'anna

unread,
Aug 10, 2010, 3:37:52 PM8/10/10
to lua...@googlegroups.com


2010/8/10 Jeremias Queiroga <jqca...@gmail.com>

Francisco, 

Você tem algum exemplo ou a API dessas operações primitivas pra que eu possa criar uma janela com scrool... pois se eu tenho um texto maior que a regiao eu perco boa parte do texto.

cberaldi

unread,
Nov 30, 2012, 1:19:17 PM11/30/12
to lua...@googlegroups.com
Tbm estou enfrentando o mesmo problema, tentei acessar o link da API e o mesmo esta fora do ar, teria alguma outra maneira de ter acesso a essa API?

Manoel Campos da Silva Filho

unread,
Nov 30, 2012, 2:39:06 PM11/30/12
to lua...@googlegroups.com
Já fiz isso. A função está em beta ainda, mas divido a string em várias partes procurando pelo \n :). Segue código em anexo e explicação abaixo:

Use a função breakString do módulo "util" em anexo.
Ela recebe uma string e o máximo de caracteres
que a mesma deve ter por linha. A função retorna uma tabela (vetor) onde cada 
item será uma linha da string.

Usando o código abaixo vc descobre a largura de uma caractere qualquer.
Usei o W pois é um caractere largo, assim, se tenho uma largura X e divido
pela largura do W (a largura é considerada para o estilo e tamanho de fonte atual),
saberei quantos caracteres caberão no máximo na região definida (obviamente não é tão preciso pois cada caractere em uma fonte não mono-espaçada tem sua própria largura):

--largura e algura do canvas (região do lua)
local w, h = canvas:attrSize()

--largura e altura de um caractere qualquer (pode trocar o 
--caractere para tentar ajustar melhor)
local tw, th = canvas:measureText("W")

--Descubro quantos caracteres caberá na região
--(Pode subtrair um valor desejado para criar uma margem.
--Substraia com valores diferente até ajustar como deseja)
local totalCharPorLinha = (w / tw)

Agora é só chamar a função:

linhas = util.breakString(texto, totalCharPorLinha)
--imprimi as linhas depois de quebrar
for i, linha in ipairs(linhas) do
    print(linha)
end

Para saber quantas linhas vai caber na área, e
assim descobrir quantas páginas terá,
usará fórmula semelhante a que mostrei acima
(os valores de altura e largura do canvas e de um caractere
já tem em w, h, tw, th ).

A função se preocupa em não quebrar palavras no meio, somente
quando encontrar \n ou espaço, no entanto, também não deixa
a linha exceder o limite de caracteres especificado.


logo 
Manoel Campos Silva Fh, Me
IFTO - Instituto Federal do Tocantins



2012/11/30 cberaldi <cber...@gmail.com>

--

Manoel Campos da Silva Filho

unread,
Nov 30, 2012, 2:41:07 PM11/30/12
to lua...@googlegroups.com
Faltou o anexo :)



logo 
Manoel Campos Silva Fh, Me
IFTO - Instituto Federal do Tocantins



2012/11/30 Manoel Campos da Silva Filho <manoel...@gmail.com>
util.lua.tar.gz

Mateus Jordani

unread,
Jun 11, 2013, 12:31:11 PM6/11/13
to lua...@googlegroups.com
jqcaraujo
    ou alguem chegou a fazer da maneira que o manoel campos postou???
deu certo??
eu tentei mas algo esta dando erro que nao aparece nenhum texto na hora de rodar.
o que teve que modificar ou adicionar??
no for principalmente??
e com relacao ao print.. deve ser substituido pelo canvas:drawText() no caso da tv digital certo???
obrigado
abraço

Manoel Campos da Silva Filho

unread,
Jun 12, 2013, 4:20:44 PM6/12/13
to lua...@googlegroups.com

Sim, deve usar drawText

--
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para lua-br+un...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 
Reply all
Reply to author
Forward
0 new messages