mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-29 05:49:19 +00:00
878 lines
36 KiB
Plaintext
878 lines
36 KiB
Plaintext
FontMgr Release Notes
|
||
First created on: 3/20/92 12:52:34 PM
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
|
||
3/20/92 12:52:41 PM
|
||
|
||
File: FontMgr.a,42
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1025041
|
||
|
||
> Release notes for this change:
|
||
|
||
Clean up GetFONDForSizeAndStyle. The new version is much easier to read and understand, which
|
||
should make life for future generations happier.
|
||
|
||
> What was tested:
|
||
|
||
Opened and closed all suitcases in the Finder, viewing each font, making sure that TrueType was
|
||
used for TrueType fonts, and bitmap fonts were used for specific sizes, and that the correct styles
|
||
were being used. Typed a bunch of text into MacWrite II, making sure that the correct font, size,
|
||
and styles appeared. Made sure that TrueType was used when using a font size that didn’t have a
|
||
bitmap available.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
3/25/92 5:45:13 PM
|
||
|
||
File: OutlineMetrics.a,12
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1023489
|
||
|
||
> Release notes for this change:
|
||
|
||
•BLT: Fix OutlineMetrics in 32 bit mode. A code path exists where the contour entry bit was not
|
||
cleared from the high byte of the glyph offset before it is added to the glyphArray pointer, causing
|
||
a bus error when OutlineMetrics is called.
|
||
|
||
> What was tested:
|
||
|
||
OutlineMetrics is called by the LaserWriter LS driver, so this crash occurs pretty frequently on
|
||
that printer. With this change, it no longer crashes.
|
||
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
3/31/92 2:23:30 PM
|
||
|
||
File: FontMgr.a,44
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1024665
|
||
|
||
> Release notes for this change:
|
||
|
||
Change all one deep Resource Manager calls back to their n deep counterparts. The reason the
|
||
calls were made one deep in the first place was to make sure that an incorrect font was not
|
||
accidentally fetched. Now that every font resource is ensured a unique resource ID, this will not
|
||
happen, so it’s OK to use the n deep calls. This change effectively reverts the LoadNewStrike
|
||
routine (with all it’s myriad entry points) back to the way it was before there was a Fonts folder.
|
||
|
||
|
||
> What was tested:
|
||
|
||
PageMaker uses a special font to draw it’s tools. Because the Font Manager was changed to use
|
||
one deep calls, PageMaker’s tool window would get trashed and use Geneva to draw the tools under
|
||
some circumstances. By going back to the n deep calls, PageMaker’s tools are never trashed.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
4/1/92 10:25:24 AM
|
||
|
||
File: BassPatches.a,16
|
||
Owner: Yosuke Kurita
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
File: DiskCacheExtensions.proto,3
|
||
Owner: Yosuke Kurita
|
||
Project: MainProj∫Toolbox∫FontMgr∫DiskCache∫Prototype∫
|
||
|
||
File: DiskCacheExtensions.c,4
|
||
Owner: Yosuke Kurita
|
||
Project: MainProj∫Toolbox∫FontMgr∫DiskCache∫Source∫
|
||
|
||
File: PartialFontExtensions.proto,3
|
||
Owner: Yosuke Kurita
|
||
Project: MainProj∫Toolbox∫FontMgr∫PartialFont∫Prototype∫
|
||
|
||
File: PartialFontExtensions.c,4
|
||
Owner: Yosuke Kurita
|
||
Project: MainProj∫Toolbox∫FontMgr∫PartialFont∫Source∫
|
||
|
||
Radar bug: #1023997
|
||
|
||
> Release notes for this change:
|
||
|
||
InitializePartialFonts and InitializeDiskCache should be pascal function.
|
||
|
||
> What was tested:
|
||
|
||
Kanji TrueType works fine with a new ‘Two-Byte Script Extension’.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
5/3/92 2:05:12 PM
|
||
|
||
File: Bass
|
||
Owner: John Harvey
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1028023
|
||
|
||
> Release notes for this change:
|
||
|
||
Changing JSR to newSfnt to a trap call. The reason for doing this is to give
|
||
distributors like Elex in Korea at least some way to kind of copy protect their fonts.
|
||
Now that NewSFNT is called via the trap, when Elex localizes they can patch NewSFNT and
|
||
have it look for a dongle whenever a user wants to select one of their copy protected
|
||
fonts. I’m not kidding myself that this is a very reliable or universal way to
|
||
copy-protect these things, but it is better than nothing, and requires minimal effort on
|
||
our part.
|
||
|
||
> What was tested:
|
||
|
||
Ran this build with a debugging break set for the NewSFNT trap. Made sure it was being
|
||
called where expected.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
5/4/92 6:05:52 PM
|
||
|
||
File: FontMgr.a,47
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1029119
|
||
|
||
> Release notes for this change:
|
||
|
||
Color fonts no longer work under Cube-E. This happened because the new code for the
|
||
Fonts folder that accumulates all the font resources for a given ID happened to search
|
||
for a style match with a word compare. However, the high byte of the style word is used
|
||
for colour information, and the requesting routine does not explicitly ask for colour.
|
||
So when something calls FMSwapFont for a font that happens to have color, the routine
|
||
GetBestFONDForSizeAndStyle never finds an exact match because the style word in the FOND
|
||
resource contains a color byte whereas the style word that was passed to FMSwapFont did
|
||
not. The change was to only compare against the low byte of the style word, ignoring the
|
||
color information.
|
||
|
||
> What was tested:
|
||
|
||
Color fonts draw properly with the change. Before, they would always show up as
|
||
Helvetica. (Why Helvetica? I dunno…)
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
5/8/92 2:00:12 PM
|
||
|
||
File: FontFolderPatches.a,14
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1029253
|
||
|
||
> Release notes for this change:
|
||
|
||
Because the fonts in the Fonts folder stay open, there are more open files when the
|
||
Finder launches in Cube-E than there were in 7.0, or 7.0.1. If you have just enough font
|
||
files in the Fonts folder, extra volumes fail to mount because there are not enough FCBs
|
||
left to open the catalog and extents files for those volumes. Changed the code that
|
||
opens the fonts in the fonts folder to expand the FCB list after the fonts have been
|
||
opened so that there will be as many free FCBs after fonts have been open as there were
|
||
before.
|
||
|
||
> What was tested:
|
||
|
||
The MacsBug “file” dcmd reports how many files are open, how many FCBs are allocated, how
|
||
many are used, and how many are free. Compared the number of free FCBs from before the
|
||
fonts were opened to the number of free FCBs after fonts were opened. There were less,
|
||
of course. Then compared the number of free FCBs after the FCB list was expanded to the
|
||
number free before fonts were opened, and the numbers match.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/2/92 6:50:15 PM
|
||
|
||
File: FontMgr.a,48
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1030818
|
||
|
||
> Release notes for this change:
|
||
|
||
A bad branch instruction wound up treating essentially all TrueType fonts as double byte
|
||
fonts, except for Roman. This broke Arabic and Hebrew TrueType fonts, since they are not
|
||
double byte fonts. When using an ‘sfnt’ resource to draw text, the Font Manager first
|
||
calls fs_LowestPPEM which returns the smallest point size that TrueType should be used
|
||
for. If the size to be drawn is smaller than this size, the Font Manager goes back and
|
||
tries to find a bit map of that size. What was happening was that fs_LowestPPEM goes
|
||
through some contortions to get this information for a double byte TrueType font. One
|
||
thing it requires is a fragment table, which is set up by WorldScript II. If WorldScript
|
||
II is not installed, this table is not allocated, and fs_LowestPPEM bails, returning
|
||
garbage for the smallest point size, in this case, $2702. Since we’re trying to draw a
|
||
12 point Hebrew character, and 12 is smaller than 9986, it doesn’t use the TrueType font.
|
||
If the TrueType font was the only size available for the desired font family, the
|
||
application font is subsituted. Just think. All of this happens because the code was
|
||
branching on greater than or equal to Korean, instead of just equal to Korean.
|
||
|
||
> What was tested:
|
||
|
||
The easiest test is to have a Hebrew/Arabic suitcase with only TrueType in it. Drop this
|
||
into the Fonts folder, and open KeyCaps. Pick this font from the menu. The application
|
||
font will be used instead of the right font. By changing the branch, the TrueType font
|
||
is used as it should be.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/3/92 7:33:56 PM
|
||
|
||
File: FontMgr.a,49
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1031058
|
||
|
||
> Release notes for this change:
|
||
|
||
Normally, the font association table in a ‘FOND’ resource is structured such that for a
|
||
given point size, the entry for the plain font comes before the entries for any stylistic
|
||
variations. The candidate caching code saves information about the fonts in the font
|
||
family, keeping a record of the plain font, and a record for all the styles. It assumes
|
||
that the font assocation table followed the normal ordering. Of course, we’re talking
|
||
about Macintosh developers here, who are a breed apart and there’s always ONE person that
|
||
doesn’t follow the standard. Add a check so that if one of these screwy ‘FOND’s is
|
||
encountered, the record for the styles is split across the record for the plain entry.
|
||
What I’m saying is that the cache entries used to look like: [Info for plain][Info for
|
||
styles]. For a screwy ‘FOND’, it will look like: [Info for styles][Info for plain][Info
|
||
for more styles].
|
||
|
||
|
||
> What was tested:
|
||
|
||
The Japanese version of the EZVision application (which is some music program) has one of
|
||
these backwards ‘FOND’ resources. Without the change, the application font is ultimately
|
||
subsituted for their font. With their change, their font is used. Additional checks
|
||
were made via the Views control panel to make sure that this change did not affect
|
||
standard ‘FOND’s, most notable, the italic Geneva used for alias file names.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/5/92 9:06:54 PM
|
||
|
||
File: FontMgr.a,50
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1031450
|
||
|
||
> Release notes for this change:
|
||
|
||
RealFont should return false if a bitmap size isn’t available, and the requested size is
|
||
lower than the lowest size TrueType will be used for, as returned by the fsLowestPPEM
|
||
function. Added code which checks this lower limit when a TrueType font is found.
|
||
|
||
> What was tested:
|
||
|
||
RealFont used to always return true, so if you use MacDraw II, or MacDraw Pro, and add 1
|
||
through 7 to the Size menu, they would all be outlined. However, most TrueType fonts
|
||
have a lowestPPEM of 9, and the rest of a lowestPPEM of 6, so 1 through 5 should never be
|
||
outlined. This is the case with this change. Also looked at several fonts that do not
|
||
have TrueType versions to make sure that only those sizes were outlined.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/8/92 9:45:07 PM
|
||
|
||
File: DrawText.a,75
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫
|
||
|
||
File: QDciPatchROM.a,132
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫Patches∫
|
||
|
||
File: QuickDrawPatches.a,21
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫Patches∫
|
||
|
||
File: Patterns.a,14
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫
|
||
|
||
File: QDUtil.a,21
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫
|
||
|
||
File: ScaleBlt.a,7
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫
|
||
|
||
File: Stretch.a,64
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫QuickDraw∫
|
||
|
||
File: FontMgr.a,51
|
||
Owner: Shannon A. Holland
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1031825
|
||
|
||
> Release notes for this change:
|
||
|
||
Sped up drawing to 16 and 32 bit screens by putting these through the appropriate
|
||
ScaleBlt cases (a 16 bit ScaleBlt loop was added for this purpose). Also added a special
|
||
case loop for 1->16 and 1->32 (from Sean Callahan) in ScaleBlt as well as a general
|
||
indexed->indexed loop. Changed the meaning of multColor to be a bitfield where bit 0
|
||
means the source is black and white only. This allows us to take fast colorizing cases
|
||
for text. MakeScaleTbl was changed so that when colorizing it checks if it needs to to
|
||
invert the background color and does so appropriately. Changed the Font manager so that
|
||
it no longer marks synthetic fonts created with an arithmetic transfer mode as color
|
||
fonts.
|
||
|
||
> What was tested:
|
||
|
||
Checked colorized text drawing to all bit depths for II and IIci ROMs.
|
||
Checked srcCopy and notSrcCopy CopyBits cases for indexed->indexed and indexed->direct
|
||
for II and IIci ROMs (along with clipping and alignment cases).
|
||
Tested inversion of background colour to 1 bit destinations when fg and bg colours are
|
||
different but map to the same index.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/12/92 2:17:05 PM
|
||
|
||
File: FontMgr.a,52
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1032393
|
||
|
||
> Release notes for this change:
|
||
|
||
RealFont needs to set the current resource map before calling LoadSplineFontResource to
|
||
gaurantee that the ‘snft’ resource will always be successfully loaded. The ‘sfnt’ needs
|
||
to be loaded to keep the fragment table code inside of fsLowestPPEM happy when
|
||
EvenBetterBusError is installed.
|
||
|
||
When getting a ‘FOND’ out of the candidate list, set CurMap to be the file that the
|
||
‘FOND’ came from for the duration of the call to LoadSplineFontResource.
|
||
|
||
> What was tested:
|
||
|
||
This bug occurs when RealFont is trying to determine if a TrueType font can be used for a
|
||
particular point size, but the file that the TrueType font comes from is above the
|
||
current resource map in the resource chain. This situation causes LoadSplineFontResource
|
||
to fail and pass NIL to fsLowestPPEM which doesn’t handle NILs very well. With
|
||
EvenBetterBusError is installed, the routine GetSplineDirectory will crash with a bus
|
||
error as it dereferences what it thinks is a handle to a TrueType font. This crash no
|
||
longer occurs with this fix.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/22/92 8:01:48 PM
|
||
|
||
File: Bass
|
||
Owner: John Harvey
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
File: DoubleByteSupport.a,2
|
||
Owner: John Harvey
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
File: MacExtra.c,13
|
||
Owner: John Harvey
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1033107
|
||
|
||
> Release notes for this change:
|
||
|
||
International TrueType fonts (i.e. fonts with a cmap whose specific ID != smRoman) were
|
||
not working at all.
|
||
|
||
A long time ago I made a change in Bass_Cache.c that was supposed to first search for the
|
||
cmap with the real script ID and if that failed try to find a cmap with 0 as its specific
|
||
ID. Unfortunately, that was not all there was to the problem.
|
||
|
||
When Gidi tried a a Hebrew font with a cmap 5 table. The font didn’t work at all. That
|
||
was because a routine called GetEncodingTable which bassCache.c was calling to get the
|
||
scriptID always returned 0 if the font wasn’t a CJK font. So GetEncodingTable was fixed
|
||
to return the correct script ID for all fonts. In addition, since bassCache didn’t
|
||
really want an encodingtable a changed the call to GetEncodingTable to a call to the
|
||
script manager routine Font2RealScript. Finally, in MacExtra.c a routine called
|
||
Map256Chars still calls GetEncodingTable and then calls GetFontMapIndex to get the index
|
||
to the correct cmap. This routine was changed to first call GetFontMapInfo with the
|
||
scriptID returned by GetEncodingTable. If that fails and the scriptID is not Roman we
|
||
try again with smRoman has the script ID. That is to allow for old cmap 0 Arabic and
|
||
Hebrew fonts.
|
||
|
||
> What was tested:
|
||
|
||
Tested with cmap 0 and cmap 5 hebrew fonts. They both worked.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/23/92 11:40:14 AM
|
||
|
||
File: FontMgr.a,53
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1031450
|
||
|
||
> Release notes for this change:
|
||
|
||
The previous change to RealFont added a call to fs_LowestPPEM to determine if TrueType
|
||
can be used for a particular point size. The point size is kept in register D2, but D2
|
||
can be trashed by Toolbox calls. Like fs_LowestPPEM. Save and restore D2 around the
|
||
call to fs_LowestPPEM.
|
||
|
||
> What was tested:
|
||
|
||
The previous change to RealFont was made so that RealFont would return false for point
|
||
sizes that do not have a bit map, and is smaller than the smallest point size that the
|
||
TrueType version would be used for. For Roman fonts, fs_LowestPPEM happens to not trash
|
||
D2 so everything worked. For double byte TrueType fonts, D2 is trashed, so RealFont
|
||
winds up thinking that every point size is available. For example, with Japanese as a
|
||
primary script, MacWrite II would think that 7 point Hon Mincho was a valid point size,
|
||
and would outline the 7 in it’s Size menu. 7 should not be outlined because the Hon
|
||
Mincho suitcase does not have a 7 point size, and the smallest size that TrueType Hon
|
||
Mincho will be used for is 25 point. By saving and restoring D2 around the call to
|
||
fs_LowestPPEM, RealFont now returns the correct result for double byte fonts. In the
|
||
MacWrite II example, the 7 in the Size menu is not outlined.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/23/92 10:31:58 PM
|
||
|
||
File: FontMgr.a,54
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1031203
|
||
|
||
> Release notes for this change:
|
||
|
||
Suitcase has a patch on GetResource which makes the Resource Manager search from the top
|
||
of the resource chain for resources if Suitcase is the current resource map. In
|
||
GetCandidateFONDs, the assumption is made that a resource will always be lower in the
|
||
resource chain than the current resource map. Suitcase’s patch breaks this assumption.
|
||
Add a check to see if the end of the resource chain is reached before the font resource
|
||
is found. (This used to be in there, but I took it out, since I assumed that if I found
|
||
the resource, it had to be below the current map in the chain.)
|
||
|
||
> What was tested:
|
||
|
||
Suitcase tended to bus error during boot because of this bug when it’s trying to show
|
||
it’s icon, because _InitGraf will try to load Chicago. With this fix, the machine will
|
||
successfully boot.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/28/92 3:34:14 PM
|
||
|
||
File: Sys.r,320
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Make∫
|
||
|
||
File: FontFolderPatches.a,17
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1033906
|
||
|
||
> Release notes for this change:
|
||
|
||
Althought the Fonts folder code only supports 128 font files in the Fonts folder, the
|
||
Finder allows more files to be placed in the folder. The Finder will display an alert in
|
||
this condition warning the user that some fonts will not be available, but the user is
|
||
not warned that this condition will persist after the machine is restarted.
|
||
|
||
The code that opens font files at startup time has been modified to display a
|
||
notification telling the user that some fonts will not be available if more than 128 font
|
||
files are in the Fonts folder.
|
||
|
||
> What was tested:
|
||
|
||
Since I didn’t have 128 font files handy, I reduced the maximum number of font files down
|
||
to 10 to make sure that the alert is displayed when the maximum number is exceeded. I
|
||
also verified that the alert is not displayed when fewer than the maximum number of
|
||
suitcases are in the Fonts folder.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/29/92 7:05:25 PM
|
||
|
||
File: FontMgr.a,55
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1031203
|
||
|
||
> Release notes for this change:
|
||
|
||
Dean is a bonehead. The last change to this file, version 54, tried to prevent a crash
|
||
caused by hitting the end of the resource chain before the resource map containing the
|
||
‘FOND’ resource was found. Unfortunately, in this change, I forgot to loop back if the
|
||
end of the resource chain wasn’t reached. Add this branch.
|
||
|
||
> What was tested:
|
||
|
||
The symptom of Dean’s stupidity is that if you’re installing over b8, when the Installer
|
||
is installing the fonts, the progress text will appear in the font that’s being installed
|
||
instead of the system font. This is because it uses the first resource map it finds
|
||
because it’s not looping to find the correct one, and our fonts happen to be numbered the
|
||
same. With this change, the progress text is back to displaying in the system font when
|
||
fonts are being installed.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
6/30/92 1:12:22 PM
|
||
|
||
File: FontMgr.a,56
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1034346
|
||
|
||
> Release notes for this change:
|
||
|
||
In GetCandidateFONDs, if the font number passed in is applFont, get the application font
|
||
number out of ApFontID. This way, people calling RealFont with the application font will
|
||
work correctly.
|
||
|
||
> What was tested:
|
||
|
||
OnCue II calls RealFont(applFont, …). The Font Manager then tries to get a ‘FOND’
|
||
resource of ID 1, which doesn’t exist, so it winds up subsituting in Chicago, and things
|
||
look ugly. With the change, the Font Manager switches in the value in ApFontID if it
|
||
determines that the font number it was passed was the generic application font ID. With
|
||
this change, OnCue II’s Standard File replacement comes up in Geneva 9, like it’s
|
||
supposed to.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/2/92 7:27:44 PM
|
||
|
||
File: FontMgr.a,57
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1034530
|
||
|
||
> Release notes for this change:
|
||
|
||
The Font Manager holds width tables for the fonts it uses. These tables are kept in
|
||
purgeable handles in the system heap. When the Font Manager needs a width table that has
|
||
been purged, it reallocates the memory, then builds it again. The memory is allocated
|
||
using the ReallocHandle routine. Like the rest of the memory manager, it sucks, and
|
||
allocates the memory out of the current heap, instead of the system heap. If the heap
|
||
that the width table was allocated in goes away, the next time the Font Manager needs to
|
||
use that width table, it will crash. Set the heap to be the system heap for this call to
|
||
ReallocHandle, then restore it to the current heap.
|
||
|
||
> What was tested:
|
||
|
||
The Translation Manager creates a sub-zone in the system zone for the translators, which
|
||
might be leaky. Some translators may call GetFontInfo to determine how to lay out the
|
||
text in a document. This may cause a width table to be reallocated in the translator
|
||
sub-heap. This heap is only around for the duration of the translation. Once this heap
|
||
goes away, the Font Manager has an invalid handle for the width table, and will crash.
|
||
By forcing ReallocHandle to allocate the memory from the system heap, this crash can
|
||
never occur.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/4/92 5:27:05 PM
|
||
|
||
File: fontPrivate.a,26
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Internal∫Asm∫
|
||
|
||
File: BassPatches.a,17
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
File: PartialFontExtensions.c,7
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫PartialFont∫Source∫
|
||
|
||
Radar bug: #1034875
|
||
|
||
> Release notes for this change:
|
||
|
||
The partial TrueType code in Cube-E assumes that the partial font zone is always present.
|
||
This is not the case in the base system. If this code ever executes, it will dereference
|
||
nil, and if EvenBetterBusError is installed, crash. Normally this code doesn’t execute,
|
||
since Roman ‘sfnt’ resources will be able to load into memory successfully, and the
|
||
partial font code is not executed. However, in low memory situations, if the ‘sfnt’
|
||
fails to load, the partial font code will kick in and do strange things because there is
|
||
no partial font zone. To get around this, create a small, 5K partial font zone for the
|
||
base system for these low memory situations. This also provides a degredation case.
|
||
|
||
> What was tested:
|
||
|
||
Excel would crash with a bus error in the partial font code if the partial font zone does
|
||
not exist. With this change, Excel does not crash. Since WorldScript II creates a
|
||
partial font zone as well, I added a check to see if a partial font zone already exists.
|
||
If it does, and the existing zone is smaller than the requested zone size, the existing
|
||
zone is destroyed and a new one created. I verified that the base system’s 5K zone is
|
||
replaced by WorldScript II’s 150K zone when that script extension is installed.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/8/92 6:54:14 PM
|
||
|
||
File: FontMgr.a,58
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1035322
|
||
|
||
> Release notes for this change:
|
||
|
||
GetBestFONDForSizeAndStyle searches all the ‘FOND’ resources for the requested font
|
||
family for an exact match for the requested size and style. While it’s doing this
|
||
search, it remembers other sizes and styles that can be used as alternates in case it
|
||
doesn’t find the exact match. If this routine finds more than one ‘FOND’ that meets it’s
|
||
criteria for alternates, it will use the most recent one it finds. The problem is that
|
||
if an application wishes to override a particular font, this won’t work any more, since
|
||
the application’s font will be the first one found. Add some code to
|
||
GetBestFONDForSizeAndStyle to use the first ‘FOND’ that meets the alternate criteria.
|
||
|
||
> What was tested:
|
||
|
||
A good way of seeing this in action is to renumber Courier to be 3, which is Geneva’s
|
||
family number, then paste the Courier ‘FOND’ and ‘sfnt’ into TeachText. Then convince
|
||
TeachText to draw with 43 point fonts instead of 12 point. With Cube-E b9, TeachText
|
||
will draw with 43 Geneva. With this fix, TeachText will draw with 43 point Courier
|
||
(which the Font Manager thinks is Geneva because we changed the family ID). This is
|
||
supposedly the right thing to do.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/11/92 7:43:53 PM
|
||
|
||
File: FontMgr.a,59
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1035746
|
||
|
||
> Release notes for this change:
|
||
|
||
The Font Manager marks ‘FOND’ resource non-purgeable as it is using them, and restores
|
||
the previous handle state when it’s done. The new routine GetBestFONDForSizeAndStyle
|
||
places a new ‘FOND’ resource in the LastFOND global without marking it non-purgeable.
|
||
Since this is the ‘FOND’ that the Font Manager will be using, it is possible that the
|
||
‘FOND’ will be purged out from underneath FMSwapFont. Add code to
|
||
GetBestFONDForSizeAndStyle to make the ‘FOND’ it places in LastFOND non-purgeable.
|
||
|
||
> What was tested:
|
||
|
||
John Connolly’s QuickDraw test tool no longer crashes with an illegal instruction with
|
||
this fix.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/17/92 2:45:48 PM
|
||
|
||
File: FontMgr.a,60
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1036422
|
||
|
||
> Release notes for this change:
|
||
|
||
RealFont uses a dereferenced candidate list without locking it. Later on, it calls
|
||
LoadSplineFontResource, which could move the candidate list. Lock the candidate list
|
||
while RealFont is walking it.
|
||
|
||
> What was tested:
|
||
|
||
This is the bug that causes PageMaker to crash in MenuEnable now and then. This takes a
|
||
long time to reproduce, so I didn’t test against this case (but I’m willing to bet quite
|
||
a bit that it’s fixed). I did check to make sure that RealFont continues to work when it
|
||
is called, and that I didn’t create a stack imbalance, or set the return value in the
|
||
wronge place, etc.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/20/92 12:47:28 PM
|
||
|
||
File: FontMgr.a,61
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1035869
|
||
|
||
> Release notes for this change:
|
||
|
||
People who don’t follow the rules are boneheads. There are ‘FOND’ resources out there
|
||
that have no font association table, which causes the Font Manager to barf. Added checks
|
||
to GetCandidateFONDs and GetFONDForSizeAndStyle to bail early if there are no entries in
|
||
the font association table.
|
||
|
||
> What was tested:
|
||
|
||
Mutilated a ‘FOND’ resource to not have a font assocation table. Without this fix, the
|
||
System Heap gets trashed because the Font Manager writes off the end of what it thinks is
|
||
a font association table. With this fix, the Font Manager eventually finds the font it
|
||
wants by going through the ancient search by ‘FONT’ loop.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/21/92 6:45:10 PM
|
||
|
||
File: FontMgr.a,62
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1036674
|
||
|
||
> Release notes for this change:
|
||
|
||
I’m a bonehead. After restoring the zone after the call to ReallocHandle in FMSwapFont,
|
||
the condition code from ReallocHandle gets blown away because writing to memory resets
|
||
the condition code. Added a test of D0 to reset the condition code to be the same as it
|
||
was when it returned from ReallocHandle so the following branch works.
|
||
|
||
> What was tested:
|
||
|
||
Added a debugger break after restoring the zone to ensure that the branch is only taken
|
||
when the call to ReallocHandle fails.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/24/92 6:31:48 PM
|
||
|
||
File: FontMgr.a,63
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1037497
|
||
|
||
> Release notes for this change:
|
||
|
||
Styled fonts were not being drawn in their own typeface. This is because the new code
|
||
which tries to match QuickDraw’s request wasn’t handling the case where QuickDraw thinks
|
||
it’s a plain font, but the ‘FOND’ says that the font is styled. Added code to remember
|
||
alternate candidates for this case.
|
||
|
||
> What was tested:
|
||
|
||
Garamond Condensed Italic was being drawn in Geneva because the ‘FOND’ says that the font
|
||
is an italic font, but QuickDraw is drawing it as a plain font. With this change, this
|
||
font draws in its own typeface.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
7/31/92 4:04:53 PM
|
||
|
||
File: FontMgr.a,64
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1037497
|
||
|
||
> Release notes for this change:
|
||
|
||
The last change had a bug which caused an infinite loop if QuickDraw wants a size that
|
||
doesn’t exist, and there is no other style to fall back on. Add some code which knows
|
||
how to get out of this case.
|
||
|
||
> What was tested:
|
||
|
||
MacWrite II would infinite loop if you try to use the Cyrillic fonts at a size that
|
||
doesn’t exist. This fix fixes this problem.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
8/6/92 6:10:45 PM
|
||
|
||
File: FontMgr.a,65
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1039067, 1039047
|
||
|
||
> Release notes for this change:
|
||
|
||
This is another Dean is a bonehead bug. This happens only if you copy the application
|
||
font into the destination suitcase, and the Finder updates some windows after the Mover
|
||
progress dialog goes away. In the Font Manager, if a styled bitmap was being used as a
|
||
QuickDraw plain face, GetFONDForSizeAndStyle would return the saved ‘FOND’ from the wrong
|
||
register, and wind up nilling out the resource chain. Fixed for f5.
|
||
|
||
|
||
> What was tested:
|
||
|
||
This is the bug where the Finder restarts or crashes after moving fonts in the Fonts
|
||
folder to a suitcase outside the Fonts folder. With this fix, everything works fine.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
8/7/92 1:15:16 PM
|
||
|
||
File: FontMgr.a,66
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1039047 1039067
|
||
|
||
> Release notes for this change:
|
||
|
||
The last change was done only for bitmapped fonts. It should have been done for TrueType
|
||
fonts as well. Now, whenever a styled font of any type is being used as a plain face,
|
||
the requested style is changed to be non-plain so that the code later on will pick up the
|
||
‘FOND’ with the correct font from the right register instead of using nil, which does odd
|
||
things to the Resource Manager.
|
||
|
||
> What was tested:
|
||
|
||
This extra change was needed because a document using N Helvetica Narrow was crashing
|
||
when it was being printed. (Don’t ask me how it ever showed up on the screen, though…)
|
||
With this additional (one line) addition, this document can be printed.
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
8/13/92 2:52:56 PM
|
||
|
||
File: FontMgr.a,67
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1039692
|
||
|
||
> Release notes for this change:
|
||
|
||
Dean’s still a bonehead. Let’s hope that the third time is a charm. The original
|
||
problem was that the new Font Manager code to deal with the Fonts folder wasn’t handling
|
||
the case when QuickDraw is requesting plain, but there is only a styled font available.
|
||
The visible result of this was that styled fonts would show up in Geneva. Code was added
|
||
to handle this case, but this code had a bug which caused the Font Manager to return the
|
||
font from the wrong register, causing the resource chain to get trashed. This was the
|
||
problem where the Finder restarted when copying suitcases from the Fonts folder to
|
||
another suitcase. In fixing this problem, I made the Font Manager stop it’s search for
|
||
an exact match too soon. It stopped when it found an alternate instead. The visible
|
||
result of this bug was that Finder windows were refreshed in Geneva italic. This is the
|
||
problem that this change is fixing.
|
||
|
||
> What was tested:
|
||
|
||
I’m getting really tired of working on this code. Brian and I drew a huge flow chart of
|
||
how the Font Manager is supposed to pick a font. Then we went through the code to make
|
||
sure that it’s doing it this way. Once we were satisfied that everything was working
|
||
correctly, we ran the new system and made sure that styled fonts showed up properly. (We
|
||
tried Swing and Zeal.) Then we made sure that copying fonts out of the Fonts folder into
|
||
another suitcase doesn’t crash. Then we made sure that when the Finder windows get
|
||
updated properly. Everything finally seems to work!
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
8/17/92 6:29:23 PM
|
||
|
||
File: FontMgr.a,68
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
Radar bug: #1039825
|
||
|
||
> Release notes for this change:
|
||
|
||
The alternate font code should keep looking for an exact match instead of leaving and
|
||
trying to use a font. This causes a bus error if two alternates were found before an
|
||
exact match was found because GetFONDForSizeAndStyle would leave, trying to use the exact
|
||
match, which wasn’t found. Change the code to look for an exact match instead of bailing
|
||
early.
|
||
|
||
> What was tested:
|
||
|
||
When the user seperates a suitcase with plain and multiple styles, and puts these all
|
||
into the Fonts folder, the machine will crash with a bus error any time the plain font is
|
||
used. (Bookman is what I used.) With this change, the machine won’t crash.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|
||
9/2/92 12:05:18 PM
|
||
|
||
File: fontPrivate.a,29
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Internal∫Asm∫
|
||
|
||
File: FontMgr.a,70
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫FontMgr∫
|
||
|
||
File: ResourceMgrExtensions.a,61
|
||
Owner: Dean Yu
|
||
Project: MainProj∫Toolbox∫ResourceMgr∫
|
||
|
||
Radar bug:
|
||
|
||
> Release notes for this change:
|
||
|
||
Converting some equates into record structures.
|
||
|
||
> What was tested:
|
||
|
||
No object change.
|
||
|
||
----------------------------------------------------------•----------------------------------------------------------
|