mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Try to get Os/2 building again with mathml
This commit is contained in:
parent
c8b6a8863f
commit
89c06838f1
@ -2317,6 +2317,158 @@ NS_IMETHODIMP nsRenderingContextOS2 :: DrawString(const nsString& aString,
|
|||||||
return DrawString(aString.get(), aString.Length(), aX, aY, aFontID, aSpacing);
|
return DrawString(aString.get(), aString.Length(), aX, aY, aFontID, aSpacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MOZ_MATHML
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsRenderingContextOS2::GetBoundingMetrics(const char* aString,
|
||||||
|
PRUint32 aLength,
|
||||||
|
nsBoundingMetrics& aBoundingMetrics)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
NS_PRECONDITION(mFontMetrics,"Something is wrong somewhere");
|
||||||
|
|
||||||
|
aBoundingMetrics.Clear();
|
||||||
|
if (!mFontMetrics) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
SetupFontAndColor();
|
||||||
|
|
||||||
|
// set glyph transform matrix to identity
|
||||||
|
MAT2 mat2;
|
||||||
|
FIXED zero, one;
|
||||||
|
zero.fract = 0; one.fract = 0;
|
||||||
|
zero.value = 0; one.value = 1;
|
||||||
|
mat2.eM12 = mat2.eM21 = zero;
|
||||||
|
mat2.eM11 = mat2.eM22 = one;
|
||||||
|
|
||||||
|
// measure the string
|
||||||
|
nscoord descent;
|
||||||
|
GLYPHMETRICS gm;
|
||||||
|
DWORD len = GetGlyphOutline(mDC, aString[0], GGO_METRICS, &gm, 0, nsnull, &mat2);
|
||||||
|
if (GDI_ERROR == len) {
|
||||||
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
}
|
||||||
|
// flip sign of descent for cross-platform compatibility
|
||||||
|
descent = -(nscoord(gm.gmptGlyphOrigin.y) - nscoord(gm.gmBlackBoxY));
|
||||||
|
aBoundingMetrics.leftBearing = gm.gmptGlyphOrigin.x;
|
||||||
|
aBoundingMetrics.rightBearing = gm.gmptGlyphOrigin.x + gm.gmBlackBoxX;
|
||||||
|
aBoundingMetrics.ascent = gm.gmptGlyphOrigin.y;
|
||||||
|
aBoundingMetrics.descent = gm.gmptGlyphOrigin.y - gm.gmBlackBoxY;
|
||||||
|
aBoundingMetrics.width = gm.gmCellIncX;
|
||||||
|
|
||||||
|
if (1 < aLength) {
|
||||||
|
// loop over each glyph to get the ascent and descent
|
||||||
|
PRUint32 i;
|
||||||
|
for (i = 1; i < aLength; i++) {
|
||||||
|
len = GetGlyphOutline(mDC, aString[i], GGO_METRICS, &gm, 0, nsnull, &mat2);
|
||||||
|
if (GDI_ERROR == len) {
|
||||||
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
}
|
||||||
|
// flip sign of descent for cross-platform compatibility
|
||||||
|
descent = -(nscoord(gm.gmptGlyphOrigin.y) - nscoord(gm.gmBlackBoxY));
|
||||||
|
if (aBoundingMetrics.ascent < gm.gmptGlyphOrigin.y)
|
||||||
|
aBoundingMetrics.ascent = gm.gmptGlyphOrigin.y;
|
||||||
|
if (aBoundingMetrics.descent > descent)
|
||||||
|
aBoundingMetrics.descent = descent;
|
||||||
|
}
|
||||||
|
// get the final rightBearing and width. Possible kerning is taken into account.
|
||||||
|
SIZE size;
|
||||||
|
::GetTextExtentPoint32(mDC, aString, aLength, &size);
|
||||||
|
aBoundingMetrics.width = size.cx;
|
||||||
|
aBoundingMetrics.rightBearing = size.cx - gm.gmCellIncX + gm.gmBlackBoxX;
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert to app units
|
||||||
|
aBoundingMetrics.leftBearing = NSToCoordRound(float(aBoundingMetrics.leftBearing) * mP2T);
|
||||||
|
aBoundingMetrics.rightBearing = NSToCoordRound(float(aBoundingMetrics.rightBearing) * mP2T);
|
||||||
|
aBoundingMetrics.width = NSToCoordRound(float(aBoundingMetrics.width) * mP2T);
|
||||||
|
aBoundingMetrics.ascent = NSToCoordRound(float(aBoundingMetrics.ascent) * mP2T);
|
||||||
|
aBoundingMetrics.descent = NSToCoordRound(float(aBoundingMetrics.descent) * mP2T);
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
#endif
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
struct GetBoundingMetricsData {
|
||||||
|
HDC mDC; // IN
|
||||||
|
HFONT mFont; // IN/OUT (running)
|
||||||
|
nsBoundingMetrics* mBoundingMetrics; // IN/OUT (running)
|
||||||
|
PRBool mFirstTime; // IN/OUT (set once)
|
||||||
|
nsresult mStatus; // OUT
|
||||||
|
};
|
||||||
|
|
||||||
|
static PRBool PR_CALLBACK
|
||||||
|
do_GetBoundingMetrics(const nsFontSwitch* aFontSwitch,
|
||||||
|
const PRUnichar* aSubstring,
|
||||||
|
PRUint32 aSubstringLength,
|
||||||
|
void* aData)
|
||||||
|
{
|
||||||
|
nsFontWin* fontWin = aFontSwitch->mFontWin;
|
||||||
|
|
||||||
|
GetBoundingMetricsData* data = (GetBoundingMetricsData*)aData;
|
||||||
|
if (data->mFont != fontWin->mFont) {
|
||||||
|
data->mFont = fontWin->mFont;
|
||||||
|
::SelectObject(data->mDC, data->mFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsBoundingMetrics rawbm;
|
||||||
|
data->mStatus = fontWin->GetBoundingMetrics(data->mDC, aSubstring, aSubstringLength, rawbm);
|
||||||
|
if (NS_FAILED(data->mStatus)) {
|
||||||
|
return PR_FALSE; // stop now
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->mFirstTime) {
|
||||||
|
data->mFirstTime = PR_FALSE;
|
||||||
|
*data->mBoundingMetrics = rawbm;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*data->mBoundingMetrics += rawbm;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PR_TRUE; // don't stop till the end
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsRenderingContextOS2::GetBoundingMetrics(const PRUnichar* aString,
|
||||||
|
PRUint32 aLength,
|
||||||
|
nsBoundingMetrics& aBoundingMetrics,
|
||||||
|
PRInt32* aFontID)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
aBoundingMetrics.Clear();
|
||||||
|
if (!mFontMetrics) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
SetupFontAndColor();
|
||||||
|
|
||||||
|
nsFontMetricsWin* metrics = (nsFontMetricsWin*)mFontMetrics;
|
||||||
|
GetBoundingMetricsData data = {mDC, mCurrFont, &aBoundingMetrics, PR_TRUE, NS_OK};
|
||||||
|
|
||||||
|
nsresult rv = metrics->ResolveForwards(mDC, aString, aLength, do_GetBoundingMetrics, &data);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
rv = data.mStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert to app units
|
||||||
|
aBoundingMetrics.leftBearing = NSToCoordRound(float(aBoundingMetrics.leftBearing) * mP2T);
|
||||||
|
aBoundingMetrics.rightBearing = NSToCoordRound(float(aBoundingMetrics.rightBearing) * mP2T);
|
||||||
|
aBoundingMetrics.width = NSToCoordRound(float(aBoundingMetrics.width) * mP2T);
|
||||||
|
aBoundingMetrics.ascent = NSToCoordRound(float(aBoundingMetrics.ascent) * mP2T);
|
||||||
|
aBoundingMetrics.descent = NSToCoordRound(float(aBoundingMetrics.descent) * mP2T);
|
||||||
|
|
||||||
|
if (mCurrFont != data.mFont) {
|
||||||
|
// If the font was changed along the way, restore our font
|
||||||
|
::SelectObject(mDC, mCurrFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aFontID) *aFontID = 0;
|
||||||
|
|
||||||
|
return rv;
|
||||||
|
#endif
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
#endif // MOZ_MATHML
|
||||||
|
|
||||||
// Image drawing: just proxy on to the image object, so no worries yet.
|
// Image drawing: just proxy on to the image object, so no worries yet.
|
||||||
NS_IMETHODIMP nsRenderingContextOS2::DrawImage( nsIImage *aImage, nscoord aX, nscoord aY)
|
NS_IMETHODIMP nsRenderingContextOS2::DrawImage( nsIImage *aImage, nscoord aX, nscoord aY)
|
||||||
{
|
{
|
||||||
|
@ -193,7 +193,6 @@ public:
|
|||||||
|
|
||||||
NS_IMETHOD CreateDrawingSurface(HPS aPS, nsDrawingSurface &aSurface, nsIWidget *aWidget);
|
NS_IMETHOD CreateDrawingSurface(HPS aPS, nsDrawingSurface &aSurface, nsIWidget *aWidget);
|
||||||
|
|
||||||
#if 0 // OS2TODO
|
|
||||||
#ifdef MOZ_MATHML
|
#ifdef MOZ_MATHML
|
||||||
NS_IMETHOD
|
NS_IMETHOD
|
||||||
GetBoundingMetrics(const char* aString,
|
GetBoundingMetrics(const char* aString,
|
||||||
@ -206,7 +205,6 @@ public:
|
|||||||
nsBoundingMetrics& aBoundingMetrics,
|
nsBoundingMetrics& aBoundingMetrics,
|
||||||
PRInt32* aFontID);
|
PRInt32* aFontID);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// ConditionRect is used to fix coordinate overflow problems for
|
// ConditionRect is used to fix coordinate overflow problems for
|
||||||
|
Loading…
Reference in New Issue
Block a user