fix for crash when using xprint bug 73178 r=darin sr=shaver

This commit is contained in:
pavlov%netscape.com 2001-04-10 11:51:43 +00:00
Родитель 75541b372e
Коммит 66d7e8ff2f
2 изменённых файлов: 43 добавлений и 44 удалений

Просмотреть файл

@ -147,7 +147,7 @@ nsRenderingContextXP :: ~nsRenderingContextXP()
mStateCache = nsnull; mStateCache = nsnull;
} }
mTMatrix = nsnull; mTranMatrix = nsnull;
} }
/** --------------------------------------------------- /** ---------------------------------------------------
@ -219,7 +219,7 @@ nsRenderingContextXP :: Init(nsIDeviceContext* aContext)
mContext->GetDevUnitsToAppUnits(mP2T); mContext->GetDevUnitsToAppUnits(mP2T);
float app2dev; float app2dev;
mContext->GetAppUnitsToDevUnits(app2dev); mContext->GetAppUnitsToDevUnits(app2dev);
mTMatrix->AddScale(app2dev, app2dev); mTranMatrix->AddScale(app2dev, app2dev);
// mRenderingSurface = new nsDrawingSurfaceXP(); // mRenderingSurface = new nsDrawingSurfaceXP();
// mRenderingSurface->InitDrawingSurface(mPrintContext); // mRenderingSurface->InitDrawingSurface(mPrintContext);
@ -333,7 +333,7 @@ nsRenderingContextXP :: PushState(void)
mStates = state; mStates = state;
} }
mTMatrix = &mStates->mMatrix; mTranMatrix = &mStates->mMatrix;
return NS_OK; return NS_OK;
} }
@ -356,11 +356,11 @@ nsRenderingContextXP :: PopState(PRBool &aClipEmpty)
mStateCache->AppendElement(oldstate); mStateCache->AppendElement(oldstate);
if (nsnull != mStates){ if (nsnull != mStates){
mTMatrix = &mStates->mMatrix; mTranMatrix = &mStates->mMatrix;
SetLineStyle(mStates->mLineStyle); SetLineStyle(mStates->mLineStyle);
} }
else else
mTMatrix = nsnull; mTranMatrix = nsnull;
} }
aClipEmpty = retval; aClipEmpty = retval;
@ -389,7 +389,7 @@ PRInt32 cliptype;
Region rgn; Region rgn;
mStates->mLocalClip = aRect; mStates->mLocalClip = aRect;
mTMatrix->TransformCoord(&trect.x, &trect.y,&trect.width, &trect.height); mTranMatrix->TransformCoord(&trect.x, &trect.y,&trect.width, &trect.height);
mStates->mFlags |= FLAG_LOCAL_CLIP_VALID; mStates->mFlags |= FLAG_LOCAL_CLIP_VALID;
switch(aCombine) { switch(aCombine) {
@ -608,7 +608,7 @@ nsRenderingContextXP :: GetFontMetrics(nsIFontMetrics *&aFontMetrics)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: Translate(nscoord aX, nscoord aY) nsRenderingContextXP :: Translate(nscoord aX, nscoord aY)
{ {
mTMatrix->AddTranslation((float)aX,(float)aY); mTranMatrix->AddTranslation((float)aX,(float)aY);
return NS_OK; return NS_OK;
} }
@ -618,7 +618,7 @@ nsRenderingContextXP :: Translate(nscoord aX, nscoord aY)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: Scale(float aSx, float aSy) nsRenderingContextXP :: Scale(float aSx, float aSy)
{ {
mTMatrix->AddScale(aSx, aSy); mTranMatrix->AddScale(aSx, aSy);
return NS_OK; return NS_OK;
} }
@ -628,7 +628,7 @@ nsRenderingContextXP :: Scale(float aSx, float aSy)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: GetCurrentTransform(nsTransform2D *&aTransform) nsRenderingContextXP :: GetCurrentTransform(nsTransform2D *&aTransform)
{ {
aTransform = mTMatrix; aTransform = mTranMatrix;
return NS_OK; return NS_OK;
} }
@ -656,11 +656,11 @@ nsRenderingContextXP :: DestroyDrawingSurface(nsDrawingSurface aDS)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: DrawLine(nscoord aX0, nscoord aY0, nscoord aX1, nscoord aY1) nsRenderingContextXP :: DrawLine(nscoord aX0, nscoord aY0, nscoord aX1, nscoord aY1)
{ {
if (nsnull == mTMatrix ) if (nsnull == mTranMatrix )
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
mTMatrix->TransformCoord(&aX0,&aY0); mTranMatrix->TransformCoord(&aX0,&aY0);
mTMatrix->TransformCoord(&aX1,&aY1); mTranMatrix->TransformCoord(&aX1,&aY1);
::XDrawLine(mPrintContext->GetDisplay(), mPrintContext->GetDrawable(), ::XDrawLine(mPrintContext->GetDisplay(), mPrintContext->GetDrawable(),
@ -675,7 +675,7 @@ nsRenderingContextXP :: DrawLine(nscoord aX0, nscoord aY0, nscoord aX1, nscoord
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: DrawPolyline(const nsPoint aPoints[], PRInt32 aNumPoints) nsRenderingContextXP :: DrawPolyline(const nsPoint aPoints[], PRInt32 aNumPoints)
{ {
if (nsnull == mTMatrix) { if (nsnull == mTranMatrix) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
@ -689,7 +689,7 @@ nsRenderingContextXP :: DrawPolyline(const nsPoint aPoints[], PRInt32 aNumPoints
thispoint = (xpoints+i); thispoint = (xpoints+i);
thispoint->x = aPoints[i].x; thispoint->x = aPoints[i].x;
thispoint->y = aPoints[i].y; thispoint->y = aPoints[i].y;
mTMatrix->TransformCoord((PRInt32*)&thispoint->x,(PRInt32*)&thispoint->y); mTranMatrix->TransformCoord((PRInt32*)&thispoint->x,(PRInt32*)&thispoint->y);
} }
::XDrawLines(mPrintContext->GetDisplay(), ::XDrawLines(mPrintContext->GetDisplay(),
@ -718,7 +718,7 @@ nsRenderingContextXP :: DrawRect(const nsRect& aRect)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: DrawRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight) nsRenderingContextXP :: DrawRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight)
{ {
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
@ -729,7 +729,7 @@ nsRenderingContextXP :: DrawRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
// Don't draw empty rectangles; also, w/h are adjusted down by one // Don't draw empty rectangles; also, w/h are adjusted down by one
// so that the right number of pixels are drawn. // so that the right number of pixels are drawn.
@ -762,7 +762,7 @@ nsRenderingContextXP :: FillRect(const nsRect& aRect)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: FillRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight) nsRenderingContextXP :: FillRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight)
{ {
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
nscoord x,y,w,h; nscoord x,y,w,h;
@ -771,7 +771,7 @@ nsRenderingContextXP :: FillRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
// Hack for background page // Hack for background page
if ((x == 0) && (y == 0)) { if ((x == 0) && (y == 0)) {
return NS_OK; return NS_OK;
@ -793,7 +793,7 @@ nsRenderingContextXP :: InvertRect(const nsRect& aRect)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: InvertRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight) nsRenderingContextXP :: InvertRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight)
{ {
if (nsnull == mTMatrix ) if (nsnull == mTranMatrix )
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
nscoord x,y,w,h; nscoord x,y,w,h;
@ -803,7 +803,7 @@ nsRenderingContextXP :: InvertRect(nscoord aX, nscoord aY, nscoord aWidth, nscoo
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
// Set XOR drawing mode // Set XOR drawing mode
::XSetFunction(mPrintContext->GetDisplay(), ::XSetFunction(mPrintContext->GetDisplay(),
@ -832,7 +832,7 @@ nsRenderingContextXP :: InvertRect(nscoord aX, nscoord aY, nscoord aWidth, nscoo
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: DrawPolygon(const nsPoint aPoints[], PRInt32 aNumPoints) nsRenderingContextXP :: DrawPolygon(const nsPoint aPoints[], PRInt32 aNumPoints)
{ {
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
PRInt32 i ; PRInt32 i ;
@ -845,7 +845,7 @@ nsRenderingContextXP :: DrawPolygon(const nsPoint aPoints[], PRInt32 aNumPoints)
thispoint = (xpoints+i); thispoint = (xpoints+i);
thispoint->x = aPoints[i].x; thispoint->x = aPoints[i].x;
thispoint->y = aPoints[i].y; thispoint->y = aPoints[i].y;
mTMatrix->TransformCoord((PRInt32*)&thispoint->x,(PRInt32*)&thispoint->y); mTranMatrix->TransformCoord((PRInt32*)&thispoint->x,(PRInt32*)&thispoint->y);
} }
::XDrawLines(mPrintContext->GetDisplay(), ::XDrawLines(mPrintContext->GetDisplay(),
@ -864,7 +864,7 @@ nsRenderingContextXP :: DrawPolygon(const nsPoint aPoints[], PRInt32 aNumPoints)
NS_IMETHODIMP NS_IMETHODIMP
nsRenderingContextXP :: FillPolygon(const nsPoint aPoints[], PRInt32 aNumPoints) nsRenderingContextXP :: FillPolygon(const nsPoint aPoints[], PRInt32 aNumPoints)
{ {
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
PRInt32 i ; PRInt32 i ;
@ -878,7 +878,7 @@ nsRenderingContextXP :: FillPolygon(const nsPoint aPoints[], PRInt32 aNumPoints)
thispoint = (xpoints+i); thispoint = (xpoints+i);
x = aPoints[i].x; x = aPoints[i].x;
y = aPoints[i].y; y = aPoints[i].y;
mTMatrix->TransformCoord(&x,&y); mTranMatrix->TransformCoord(&x,&y);
thispoint->x = x; thispoint->x = x;
thispoint->y = y; thispoint->y = y;
} }
@ -911,7 +911,7 @@ nsRenderingContextXP :: DrawEllipse(nscoord aX, nscoord aY, nscoord aWidth, nsco
if (nsLineStyle_kNone == mCurrLineStyle) if (nsLineStyle_kNone == mCurrLineStyle)
return NS_OK; return NS_OK;
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
nscoord x,y,w,h; nscoord x,y,w,h;
@ -921,7 +921,7 @@ nsRenderingContextXP :: DrawEllipse(nscoord aX, nscoord aY, nscoord aWidth, nsco
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
::XDrawArc(mPrintContext->GetDisplay(), ::XDrawArc(mPrintContext->GetDisplay(),
mPrintContext->GetDrawable(), mPrintContext->GetDrawable(),
@ -942,7 +942,7 @@ nsRenderingContextXP :: FillEllipse(const nsRect& aRect)
*/ */
NS_IMETHODIMP nsRenderingContextXP :: FillEllipse(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight) NS_IMETHODIMP nsRenderingContextXP :: FillEllipse(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight)
{ {
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
nscoord x,y,w,h; nscoord x,y,w,h;
@ -952,7 +952,7 @@ NS_IMETHODIMP nsRenderingContextXP :: FillEllipse(nscoord aX, nscoord aY, nscoor
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
::XFillArc(mPrintContext->GetDisplay(), ::XFillArc(mPrintContext->GetDisplay(),
mPrintContext->GetDrawable(), mPrintContext->GetDrawable(),
@ -990,7 +990,7 @@ nsRenderingContextXP :: DrawArc(nscoord aX, nscoord aY, nscoord aWidth, nscoord
if (nsLineStyle_kNone == mCurrLineStyle) if (nsLineStyle_kNone == mCurrLineStyle)
return NS_OK; return NS_OK;
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
nscoord x,y,w,h; nscoord x,y,w,h;
@ -1000,7 +1000,7 @@ nsRenderingContextXP :: DrawArc(nscoord aX, nscoord aY, nscoord aWidth, nscoord
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
::XDrawArc(mPrintContext->GetDisplay(), ::XDrawArc(mPrintContext->GetDisplay(),
mPrintContext->GetDrawable(), mPrintContext->GetDrawable(),
@ -1030,7 +1030,7 @@ nsRenderingContextXP :: FillArc(nscoord aX, nscoord aY, nscoord aWidth, nscoord
{ {
if (nsLineStyle_kNone == mCurrLineStyle) if (nsLineStyle_kNone == mCurrLineStyle)
return NS_OK; return NS_OK;
if (nsnull == mTMatrix ) { if (nsnull == mTranMatrix ) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
nscoord x,y,w,h; nscoord x,y,w,h;
@ -1040,7 +1040,7 @@ nsRenderingContextXP :: FillArc(nscoord aX, nscoord aY, nscoord aWidth, nscoord
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x,&y,&w,&h); mTranMatrix->TransformCoord(&x,&y,&w,&h);
::XFillArc(mPrintContext->GetDisplay(), ::XFillArc(mPrintContext->GetDisplay(),
mPrintContext->GetDrawable(), mPrintContext->GetDrawable(),
@ -1182,7 +1182,7 @@ nsRenderingContextXP :: DrawString(const char *aString, PRUint32 aLength,
{ {
if (0 == aLength) if (0 == aLength)
return NS_OK; return NS_OK;
if (mTMatrix == nsnull) if (mTranMatrix == nsnull)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
if (aString == nsnull) if (aString == nsnull)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
@ -1205,7 +1205,7 @@ nsRenderingContextXP :: DrawString(const char *aString, PRUint32 aLength,
char ch = *aString++; char ch = *aString++;
nscoord xx = x; nscoord xx = x;
nscoord yy = y; nscoord yy = y;
mTMatrix->TransformCoord(&xx, &yy); mTranMatrix->TransformCoord(&xx, &yy);
XDrawString(mPrintContext->GetDisplay(), XDrawString(mPrintContext->GetDisplay(),
mPrintContext->GetDrawable(), mPrintContext->GetDrawable(),
mPrintContext->GetGC(), mPrintContext->GetGC(),
@ -1213,7 +1213,7 @@ nsRenderingContextXP :: DrawString(const char *aString, PRUint32 aLength,
x += *aSpacing++; x += *aSpacing++;
} }
} else { } else {
mTMatrix->TransformCoord(&x, &y); mTranMatrix->TransformCoord(&x, &y);
if ((mCurrentFont->min_byte1 == 0) && (mCurrentFont->max_byte1 == 0)) if ((mCurrentFont->min_byte1 == 0) && (mCurrentFont->max_byte1 == 0))
XDrawString(mPrintContext->GetDisplay(), XDrawString(mPrintContext->GetDisplay(),
mPrintContext->GetDrawable(), mPrintContext->GetDrawable(),
@ -1258,7 +1258,7 @@ nsRenderingContextXP :: DrawString(const PRUnichar *aString, PRUint32 aLength,
return NS_OK; return NS_OK;
if (nsnull == mFontMetrics) if (nsnull == mFontMetrics)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
if (mTMatrix == nsnull) if (mTranMatrix == nsnull)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
if (aString == nsnull) if (aString == nsnull)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
@ -1275,7 +1275,7 @@ nsRenderingContextXP :: DrawString(const PRUnichar *aString, PRUint32 aLength,
y = aY; y = aY;
#endif #endif
mTMatrix->TransformCoord(&x, &y); mTranMatrix->TransformCoord(&x, &y);
nsFontMetricsXP* metrics = (nsFontMetricsXP*) mFontMetrics; nsFontMetricsXP* metrics = (nsFontMetricsXP*) mFontMetrics;
nsFontXP* prevFont = nsnull; nsFontXP* prevFont = nsnull;
@ -1304,7 +1304,7 @@ FoundFont:
while (str < end) { while (str < end) {
x = aX; x = aX;
y = aY; y = aY;
mTMatrix->TransformCoord(&x, &y); mTranMatrix->TransformCoord(&x, &y);
prevFont->DrawString(mPrintContext, x, y, str, 1); prevFont->DrawString(mPrintContext, x, y, str, 1);
aX += *aSpacing++; aX += *aSpacing++;
str++; str++;
@ -1331,14 +1331,14 @@ FoundFont:
while (str < end) { while (str < end) {
x = aX; x = aX;
y = aY; y = aY;
mTMatrix->TransformCoord(&x, &y); mTranMatrix->TransformCoord(&x, &y);
prevFont->DrawString(mPrintContext, x, y, str, 1); prevFont->DrawString(mPrintContext, x, y, str, 1);
aX += *aSpacing++; aX += *aSpacing++;
str++; str++;
} }
} }
else { else {
// mTMatrix->TransformCoord(&x, &y); // mTranMatrix->TransformCoord(&x, &y);
prevFont->DrawString(mPrintContext, x, y, &aString[start], prevFont->DrawString(mPrintContext, x, y, &aString[start],
i - start); i - start);
} }
@ -1386,7 +1386,7 @@ nsRenderingContextXP :: DrawImage(nsIImage *aImage, nscoord aX, nscoord aY,
w = aWidth; w = aWidth;
h = aHeight; h = aHeight;
mTMatrix->TransformCoord(&x, &y, &w, &h); mTranMatrix->TransformCoord(&x, &y, &w, &h);
return mPrintContext->DrawImage(aImage, x, y, w, h); return mPrintContext->DrawImage(aImage, x, y, w, h);
} }
@ -1400,13 +1400,13 @@ nsRenderingContextXP :: DrawImage(nsIImage *aImage, const nsRect& aSRect, const
nsRect sr,dr; nsRect sr,dr;
sr = aSRect; sr = aSRect;
mTMatrix->TransformCoord(&sr.x, &sr.y, &sr.width, &sr.height); mTranMatrix->TransformCoord(&sr.x, &sr.y, &sr.width, &sr.height);
sr.x = aSRect.x; sr.x = aSRect.x;
sr.y = aSRect.y; sr.y = aSRect.y;
mTranMatrix->TransformNoXLateCoord(&sr.x, &sr.y); mTranMatrix->TransformNoXLateCoord(&sr.x, &sr.y);
dr = aDRect; dr = aDRect;
mTMatrix->TransformCoord(&dr.x, &dr.y, &dr.width, &dr.height); mTranMatrix->TransformCoord(&dr.x, &dr.y, &dr.width, &dr.height);
return mPrintContext->DrawImage(aImage, return mPrintContext->DrawImage(aImage,
sr.x, sr.y, sr.x, sr.y,
sr.width, sr.height, sr.width, sr.height,

Просмотреть файл

@ -194,7 +194,6 @@ protected:
nsXPrintContext *mPrintContext; nsXPrintContext *mPrintContext;
nsIFontMetrics *mFontMetrics; nsIFontMetrics *mFontMetrics;
nsRegionXP *mClipRegion; nsRegionXP *mClipRegion;
nsTransform2D *mTMatrix;
float mP2T; float mP2T;
nscolor mCurrentColor; nscolor mCurrentColor;