Some comments (at last) :

> this is the big FontManager refactoring patch I already mentioned a
> couple of times. It's primary purpose is to make the font implementation
> more portable (or: portable at all), allowing alternative/derived
> implementations to be plugged in. The general architecture breaks down
> as follows:

Plugging in alternate architectures is somewhat interesting but the refactoring
priority I see is that the FontManager class which has grown too large and
needs to be "downsized" This is done, which is OK, and the most important
part of how this is done is to separate out the platform, and that's partly
handled but, not as much as I'd like.  For example : SunFontManager.java :
getDefaultPlatformFont() seems like a perfect candidate for pushing
down into the platform code.
The FontConfigManager class should go with it into the X11 side of the code.


It would be nice if each of these new classes had its charter documented
at the top, in a class comment.
SunFontManager
DefaultFontManager
X11FontManager
Win32FontManager
FontConfigManager
FontUtiltities
FontManagerFactory
FontScaler

I guess previously we had an X11/Win32GE instance for API reasons, but when the
font code was moved out to the FontManager subclasses it maybe wasn't
needed to make that also have an instance?

Is DefaultFontManager really necessary?? Seems not to me.

Also a number of changes appear unrelated, eg :
make/java/nio/Makefile
make/java/nio/spp.sh
src/share/classes/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java
src/share/classes/com/sun/jmx/mbeanserver/MBeanIntrospector.java

make/sun/font/mapfile-vers
The disappearance of these seems strange  ..
  40                 Java_sun_font_FontManager_getFont2D;
  41                 Java_sun_font_FontManager_setFont2D;
  42                 Java_sun_font_FontManager_isCreatedFont;
  43                 Java_sun_font_FontManager_setCreatedFont;
 .. ah, I see these are now using reflection In FontUtilities
Hmm. I don't think this change should be made
1) As it stands it'll get a SecurityException
2) I'm very dubious about changing the accessibility of these internal methods
Looks like a potential security hole.
3) I'd want to such a change separately anyway to test its relative performance.

src/share/classes/java/awt/Component.java, and
src/windows/classes/sun/awt/windows/WToolkit.java
This was left in for a licensee, I'd be inclined to leave it alone
unless removing it has definite benefits.
2770         // REMIND: PlatformFont flag should be obsolete soon...
2771         if (sun.font.FontManager.usePlatformFontMetrics()) {
2772             if (peer != null &&
2773                 !(peer instanceof LightweightPeer)) {
2774                 return peer.getFontMetrics(font);
2775             }
2776         }
2777         return sun


We don't need these and similar changes, since they aren't pre-defined constants
 :
isSolaris->IS_SOLARIS, isLinux->IS_LINUX

ie all caps is just for pre-defined constants, not ones determined at run time.

Cmap.java
Please try to keep lines <=80 chars, eg line 411 here :
 410             if (FontUtilities.isLogging()) {
 411                 FontUtilities.getLogger().warning("Cmap subtable overflows
buffer.");
 412             }
 413         }

BTW code conventions are at
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

CompositeFont.java
 57     private SunFontManager fm = null;

I don't see why every comp-font needs a ptr to this singleton.

PhysicalStrike.java
- 29 import java.awt.GraphicsEnvironment;
this isn't used

====

I'm not sure about the movement of addToPool() to TrueTypeFont.java
Theoretically its independent of the font format, and could apply
to any FileFont subclass.
also the file closer shut down hook isn't needed except for created
fonts from tmp files, so that shouldn't be started unless needed.


FontManager.java has a lot of "TODO" comments

Why is FontManagerForSGE needed?
ie why cannot SunFontManager be the class in which these are defined.

Win32FontManager :
  22     // FIXME: Windows build still needs to be abstracted from
  23     // SunGraphicEnvironment
  24
 What does that mean?

  25     // please, don't reference sgEnv in any other code in this class
  26     // use getGraphicsEnvironment.
  27     @Deprecated
This doesn't seem an appropriate use of deprecated.

  28     private static SunGraphicsEnvironment sgEnv = null;
  29

-phil.
Roman Kennke wrote:
Hi,

this is the big FontManager refactoring patch I already mentioned a
couple of times. It's primary purpose is to make the font implementation
more portable (or: portable at all), allowing alternative/derived
implementations to be plugged in. The general architecture breaks down
as follows:

- FontManager: is now a relatively small interface. This is the part
that the AWT API classes (esp. java.awt.Font) talk to.
- FontManagerForSGE: A subinterface of FontManager.
SunGraphicsEnvironment uses this. If you implement a backend based on
SGE, then you also need to implement this. Otherwise you can go with
plain FontManager.
- SunFontManager: A base implementation of FontManager(ForSGE). This has
all the shared code, a lot of stuff that was previously in FontManager
has been moved there.
- X11FontManager, Win32FontManager: The platform specific stuff went
there.
- FontManagerFactory: Creates FontManager instance according to a
property or default.
- SunGraphicsEnvironment: Almost all font-related code has been moved
out of this class.
- FontUtilities: A new utility class. A couple of things from
FontManager went there, i.e. logging, access tricks (get/setFont2D()),
OS determination and general shared stuff.

For the most part, this was only moving around code, without changing
functionality. However, in some places it was necessary or seemed useful
to change some things:

- in sunFont.c we can now call the real isDisplayLocal() on the graphics
environment.
- in TrueTypeFont, the handling of the channel pool has been improved.
Before, the cleanup-hook was only initialized when somebody called
Font.createFont(), now it gets initialized whenever a channel is added
to the pool. Is slightly cleaner than before (although I guess it
doesn't matter much, since modern OSes cleanup resources quite well
anyway).
- the FontManager.usePlatformFontMetrics() for windows flag has been
removed. I don't know if this is feasible, but the comments seemed to
indicate that this was the plan anyway. Might break some obscure apps
that rely on buggy code.

These are all functional changes I can think of from the top off my
head.

The webrev for this is here:

http://kennke.org/~roman/fontmanager/webrev/

The raw patch can also be downloaded somewhere in the webrev.

I'd be happy to hear your comments soon. Note that I did only very basic
testing on Windows. It is hellish to setup a build on windows,
especially when you don't have the resources to buy the necessary
licenses... Would be nice if somebody could test the stuff on Windows a
bit more. I hope that this patch is feasible to be included in OpenJDK
mainline, or that we can make it so...

Cheers, Roman

Reply via email to