Closed Bug 96609 Opened 23 years ago Closed 13 years ago

Tracker - add GetDimensions() in GFX

Categories

(Core Graveyard :: GFX, defect)

defect
Not set
normal

Tracking

(Not tracked)

RESOLVED WONTFIX
Future

People

(Reporter: rbs, Assigned: dcone)

References

Details

Attachments

(2 files)

The fix for bug 20394 (and related) requires the support of the following methods in the nsIRenderingContext API. ============================================================================ NS_IMETHOD GetDimensions(const char* aString, PRUint32 aLength, nsDimensions& aDimensions) = 0; NS_IMETHOD GetDimensions(const PRUnichar* aString, PRUint32 aLength, nsDimensions& aDimensions, PRInt32* aFontID = nsnull) = 0; nsDimensions is the struct to fill. It is described below. Basically, since font-switching may arise when rendering a piece of (i18n) Unicode string, what is needed is to also return the max ascent and max descent of all the fonts involved. For a string in ASCII, there is no font-switching and thus: GetDimensions(const char* aString, ...) is: aDimensions.width = GetWidth(aString) with the current font aDimensions.ascent = the current font's ascent aDimensions.descent = the current font's descent For a string in Unicode, font-switching may arise and thus: GetDimensions(const PRUnichar* aString, ...) is: while (font-switching) { aDimensions.width += GetWidth(substring) with the current font aDimensions.ascent = max{aDimensions.ascent, current font's ascent} aDimensions.descent = max{aDimensions.descent, current font's descent} } This is basically what is needed, but it has to be in the dialect expected by each platform :-( Together with these, two trivial methods DrawString2(ASCII/Unicode) are also needed. Unlike DrawString(), these new methods will draw a string without tampering with the aY parameter supplied by the caller. They are aimed at allowing to draw muliple piece of string from different fonts in separate calls, yet while still keeping them baseline-aligned. The DrawString2() are obtained from DrawString() in a trivial manner and it is anticipated that they will replace DrawString() once the switch to GetDimensions() is over and callers fixed. An example of a patch to hook GetDimensions() is attached to bug 95721: http://bugzilla.mozilla.org/showattachment.cgi?attach_id=46317 This bug is currently blocking my font changes that could potentially solve: - bug 30910 - Pref for minimum font size - bug 32536 - text gets wrong font size - bug 61883 - Smarter default prefs for the 5 basic CSS fonts - bug 74186 - Unable to choose different size for serif and sans-serif fonts - bug 96535 - Font sizes too large for Japanese UI (and perhaps other bugs as well, and despite the intensive testing, introduce a few regressions of its own, in all fairness -- there is no denying the software life cycle :-) ============================================================================ /* Struct used to represent the overall extent of a string whose rendering may involve switching between different fonts that have different metrics. */ struct nsDimensions { // max ascent amongst all the fonts needed to represent the string nscoord ascent; // max descent amongst all the fonts needed to represent the string nscoord descent; // width of the string nscoord width; nsDimensions() { Clear(); } /* Set all member data to zero */ void Clear() { ascent = descent = width = 0; } /* Append another dimension */ void operator += (const nsDimensions& aOther) { if (ascent < aOther.ascent) ascent = aOther.ascent; if (descent < aOther.descent) descent = aOther.descent; width += aOther.width; } };
Blocks: 74186
Depends on: 95721
Blocks: 20394
Blocks: 96535
Depends on: 100868, 100871
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla0.9.6
Attached patch patch for qt (deleted) — Splinter Review
Attached patch fix-up patch for photon (deleted) — Splinter Review
The above patches (together with those recently checked in for OS/2 and BeoS) should bring the ports back in the loop, or at least provide enough head start to plaform gurus to fix typos. I haven't touched Motif because it seems to be there only for historical reasons. I mostly saw empty stubs checked in there since 1999.
I have checked-in the two patches listed above.
Target Milestone: mozilla0.9.6 → mozilla1.0
With the recent fix for GfxMac in bug 100868, the three main platforms are now in parity. Only postscript printing (GfxPS) remains missing.
Re-assigning to dcone
Assignee: kmcclusk → dcone
Status: ASSIGNED → NEW
Target Milestone: mozilla1.0 → mozilla1.1
retargeting
Target Milestone: mozilla1.1alpha → Future
Not a blocker.
Severity: blocker → normal
Product: Core → Core Graveyard
The need for this internal change has long since been obviated by other internal changes.
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: