On Jul 25, 2007, at 02:25, Manuel Mall wrote:
On Wednesday 25 July 2007 05:17, Andreas L Delmelle wrote:
Anyone have any objections, for instance, to change the default
behaviour of FontInfo.fontLookup(String[], ...) to something like the
below code? Should we add a getFontInstances() method too, or rather,
since the below method is only used by CommonFont, maybe merge it
into such a getFontInstances() method, that would return Font[]?
To Manuel in particular: what would be most convenient from your
point of view? Is it OK if each LM gets a set of Fonts (or mere
triplet-keys), instead of only one, upon the call to getFontState()?
LMs tend to call these methods only once typically in their initialize
method. A quick search shows that getCommonFont() is called only 8
times in the LMs and in each case the call is the same:
font =
<fobj>.getCommonFont().getFontState(<fobj>.getFOEventHandler
().getFontInfo(),
this);
In summary LMs are not really interested in the CommonFont object as
such. They only use it to get to the Font object (or now we want a
list
of Font objects) applicable to them. But the LMs would like a Font
object not a Triplet.
OK, just wondering because the FontInfo instance that CommonFont uses
to do the lookup ultimately gets passed in by the LM. Maybe in some
cases it could be a more efficient use of resources to have
CommonFont.getFontState() return only the compact triplet-objects in
an array, which the LM can then later feed to the getFontInstance()
method of the FontInfo it has access to. If I remember correctly from
studying the fonts package, getFontInstance() would also actually
*load* the font if that is not yet done at the point the method is
called. If a user were to specify 20 font-families, they would all be
loaded even when only one of them is actually used. Can't remember
exactly if Adrian's auto-detection patch changed this in any way.
So, IMO the least impact change is to simply add font[]
getFontStates(...) to CommonFont. How it is implemented internally
doesn't really worry me.
We can even make it a bit more flexible, I think.
Make it FontTriplet[] as a return type, and add the getFontInstances
(FontTriplet[],...) method to FontInfo.
That way, the LM can ask all Font instances at once (if it wants/
needs to), or just the first one to initialize from and create the
others only if necessary.
IOW, the code in the LM could come to look like:
//init()
fontkeys = <fobj>.getCommonFont().getFontState
(<fobj>.getFOEventHandler().getFontInfo());
//instantiate the fonts, one ...
initfont = <fobj>.getFOEventHandler().getFontInfo.getFontInstance
(fontkeys[0], this);
...
//other_method()
//... by one
fallbackfont = <fobj>.getFOEventHandler().getFontInfo
().getFontInstance(fontkeys[x], this);
//or if desired, create them all at once
//preferably not used for large sets of unloaded fonts (?)
allfonts = <fobj>.getFOEventHandler().getFontInfo().getFontInstances
(fontkeys, this);
WDYT?
Thanks for the feedback.
Cheers
Andreas