[comp.sys.amiga] TextLength

bryce@COGSCI.BERKELEY.EDU.UUCP (06/16/87)

In article <> ewhac@well.UUCP (Leo 'Bols Ewhac' Schwab) typed:
>In article <>
>>
>>    There is a graphics library function called TextLength().  This will
>>count how many pixels a string of characters requires.  Is there a way to
>>count how many CHARACTERS will fit in a specified number of PIXELS?
>>(PROPORTIONAL characters, please!)
>>
>	[random garbage deleted]
>	No, wait.  What if you had some 'm's in there?  They're a bit wider
>than most, so that would take us back down to maybe 42.
>	No, that won't work either.  What if they all were upper-case 'W's?
>They're real wide.  You'd only get about -- gee, I don't know -- 21 of those
>on a line?
>
>	Say, just how is this routine going to know how many proportional
>characters are going to fit in a specified number of pixels unless it knows
>what the characters are?  Looks like an intractable problem to me.

No, you have a graphics function that takes a character string...

>	Seriously, it's not possible to know how many proportional
> characters are going to fit into a specified number of pixels until you try
> it.  [comment]
>	Your best recourse is to run the string you're interested in
> printing through TextLength() and see if it'll fit.  If it's too big, search
> backwards from the end for the first space, cut it there, and try again.

Yes, yes.  Not a very ideal situation eh??  I use and *hate* that method
now.  The amount of processing that adds is silly!  *KLUDGE*.  BTW:  I
said characters, not words. 
A better recourse is to take some stab at how many characters will fit by
using the average width of the proportional font, try that with TextLength(),
then do a binary search to the actual value. 

And, in a future version of the operating system, see to it that a new function
is implemented;


number=TextFit(rastport,string,count,pixels),GfxBase
d0	       a1	a0     d0.w  d1.w    a6
;Count how many of the string's characters will fit in the space given.


This would only require *two* passes of the string.  Cleanly
word-wrapping proportional text is desirable for some applications.

More functions like TextCharClip() could do the counting and drawing in
one swoop.

         Ack!  (NAK,EOT,SOH)
 |\ /|  .
 {o O} .  bryce@cogsci.berkeley.EDU -or- ucbvax!cogsci!bryce
 ( " ) 
   U      Single tasking?  Just say *NO!*

Today's trivia: There are 482 library calls that come as standard equipment
with every V1.2 Amiga.  (Source: 1.2, Gamma 1, fd.files)