fully justified text ?

Mathieu Chamagne's icon

I'm looking for a way to display fully justified text (flush left and right) in Max / Jitter.

ideally, I would want to display my text with gl objects (jit.gl.text2D / 3D) , but any solution to display justified text in Max (LCD, jit.lcd, jit.Mgraphic, JSUI, …) would be really helpful.

in fact, I'm very surprised by the lack of solution, documentation & post about it ;
any decent text editor or any software that can produce image containing text can do that very easily.
Programming full text justification in Max would really be a pain ; you'll need to know the width of each char depending of font style & size, and adjust "tracking" (intra-character spacing) accordingly, to fill a "page" width...

I can't believe that everybody who needs to display dynamic text in a Max / Jitter installation is content with only left/center/right text aligned…

any thought ?

many thanks in advance...

Mathieu

Mathieu Chamagne's icon

Come
    on
        list,
            I
                can't
                    be
                        the
                            only
                                text
                                    alignment
                                        maniac
                                            here
                                                !

does anybody have any tips on how to produce fully justified text in Jitter ?

alersito's icon

Maybe using Syphon and another external program?

Stephane Morisse's icon

I also thought there was some simple way to do this, but if Mathieu cries for help, this is hopeless for me !

Mathieu Chamagne's icon

Thanks for the advice, Alersito

but I don't think that syphon is an option for what I want to do ;
all my text are stored / generated in Max, and I would need to generate several blocks of justified text at once, in real time. Using Syphon + another software would imply sending my raw text via OSC to another software that would render my texts to texture -> send back to max (on several syphon channels ?) ...
I've checked the list of syphon-enabled softs, I can see only 2 candidates that *may* be able to make justified text : Quartz Composer & Processing
But I would then have to dig into one of these tools to do what I need...
!! that sounds a bit complicated to simply align a couple of words !!

I'm still thinking that there's something missing in Max/Jitter about text layout... isn't it ?
or am I missing something obvious that would let me display nice texts in Jitter ?

(and I'm just talking of simply text justification... I dare not even dream of things like that :
http://www.google.fr/search?q=text+layout&hl=fr&prmd=imvns&source=lnms&tbm=isch&sa=X&ei=wHfgT4PbCcqt8gPRvpWVDw&ved=0CFEQ_AUoAQ&biw=1280&bih=888
)

Mathieu

Peter Castine's icon

A good full justification is a few steps harder than left/right/centered. I did all of these as a CS undergrad, working with monospace text (it was the 80s, so that's all had on the university terminal pool:-) and getting a reasonable full justification was something not everybody got "right". So l/r/c tends to get implemented by more basic text tools, and justification tends to be in the domain of more "advanced" tools.

You could conceivably roll your own. There's a thread I started about a half-year ago that produced a combination of JavaScript and Jitter to calculate the width required by an arbitrary jit.gl.text2d string. So you could create a text2d for each word, calculate the widths (and requisite inter-word spacing) and position the objects to suit your desires.

It ain't a rose garden, but might get you through the night. Let me know if I should try to dig up that JScript.

Mathieu Chamagne's icon

Hi Peter, thanks for replying.
I couldn't find the thread you're talking about. but I'm sure your js / patch would be helpful :-) could you post a link, please ?

Max Patch
Copy patch and select New From Clipboard in Max.

exploring the new features of Max6, I've just discovered that jit.mgraphics has a very useful "text_measure" function, that could be a good starting point as well :

maybe it would be easier (at least in my case) to render the text with jit.mgraphics and display it as a texture in my gl context..

I'll give it a try.

Mathieu

Peter Castine's icon

Salut Mathieu,

This is the thread in question: Using jit.submatrix in Javascript. Basically it was a Javascript that set up a jit.gl.text2d and a jit.render, rendered to a jit.matrix, then used jit.findbounds to get the bounds. It took one or two attempts plus some help from others to get it working for what I needed, which was simpler than fully justified text.

Using jit.mgraphics.text_measure() is probably more elegant. It might have better performance, too (jit.gl.text2d and text3d both ate up a lot of CPU).

Vincent Goudard's icon

hi,

waking this thread again, as I have the same needs...

Mathieu, did your come up with a satisfying solution ? And if so, would you share it ? :)

In case this is useful to anyone, Max6 has a "bounds" attribute to most jitter object (including jit.text3d) that ease (both man and CPU wise) a little bit the task, compared to jit.findbounds !

But if there exist any ready-made solution, I'd be glad not to re-invent the wheel.

C74 fellows ? Any advice / promise on this topic ?