diff --git a/gfx/public/nsIRenderingContext.h b/gfx/public/nsIRenderingContext.h index 85f93beed39..5597b5d8a66 100644 --- a/gfx/public/nsIRenderingContext.h +++ b/gfx/public/nsIRenderingContext.h @@ -668,7 +668,7 @@ public: * @param aWidth tile width * @param aHeight tile height */ - NS_IMETHOD DrawPath(nsPoint aPointArray[],PRInt32 aNumPts) = 0; + NS_IMETHOD DrawPath(nsPathPoint aPointArray[],PRInt32 aNumPts) = 0; /** * Copy offscreen pixelmap to this RenderingContext. diff --git a/gfx/public/nsPoint.h b/gfx/public/nsPoint.h index 6248882a00b..597ebbdc3d9 100644 --- a/gfx/public/nsPoint.h +++ b/gfx/public/nsPoint.h @@ -62,4 +62,23 @@ struct nsPoint { } }; + +/** --------------------------------------------------- + * A special type of point which also add the capability to tell if a point is on + * the curve.. or off of the curve for a path + * @update 03/29/00 dwc + */ +struct nsPathPoint: public nsPoint{ + + PRBool mIsOnCurve; + + // Constructors + nsPathPoint() {} + nsPathPoint(const nsPathPoint& aPoint) {x = aPoint.x; y = aPoint.y;mIsOnCurve=aPoint.mIsOnCurve;} + nsPathPoint(nscoord aX, nscoord aY) {x = aX; y = aY;mIsOnCurve=PR_TRUE;} + nsPathPoint(nscoord aX, nscoord aY,PRBool aIsOnCurve) {x = aX; y = aY;mIsOnCurve=aIsOnCurve;} + +}; + + #endif /* NSPOINT_H */ diff --git a/gfx/public/nsRenderingContextImpl.h b/gfx/public/nsRenderingContextImpl.h index 43716de56ba..9f12647b98f 100644 --- a/gfx/public/nsRenderingContextImpl.h +++ b/gfx/public/nsRenderingContextImpl.h @@ -28,11 +28,19 @@ class nsRenderingContextImpl : public nsIRenderingContext { + +// CLASS MEMBERS +public: + + +protected: + nsTransform2D *mTranMatrix; // The rendering contexts transformation matrix + public: nsRenderingContextImpl(); - +// CLASS METHODS /** --------------------------------------------------- * See documentation in nsIRenderingContext.h * @update 03/29/00 dwc @@ -43,7 +51,7 @@ public: * See documentation in nsIRenderingContext.h * @update 03/29/00 dwc */ - NS_IMETHOD DrawPath(nsPoint aPointArray[],PRInt32 aNumPts); + NS_IMETHOD DrawPath(nsPathPoint aPointArray[],PRInt32 aNumPts); protected: virtual ~nsRenderingContextImpl(); @@ -73,4 +81,66 @@ public: }; + +/** --------------------------------------------------- + * Class QBezierCurve, a quadratic bezier curve + * @update 4/27/2000 dwc + */ +class QBezierCurve +{ + +public: + nsPoint mAnc1; + nsPoint mCon; + nsPoint mAnc2; + + QBezierCurve() {mAnc1.x=0;mAnc1.y=0;mCon=mAnc2=mAnc1;} + void SetControls(nsPoint &aAnc1,nsPoint &aCon,nsPoint &aAnc2) { mAnc1 = aAnc1; mCon = aCon; mAnc2 = aAnc2;} + void SetPoints(nscoord a1x,nscoord a1y,nscoord acx,nscoord acy,nscoord a2x,nscoord a2y) {mAnc1.MoveTo(a1x,a1y),mCon.MoveTo(acx,acy),mAnc2.MoveTo(a2x,a2y);} + +/** --------------------------------------------------- + * Divide a Quadratic curve into line segments if it is not smaller than a certain size + * else it is so small that it can be approximated by 2 lineto calls + * @param aRenderingContext -- The RenderingContext to use to draw with + * @param aPointArray[] -- A list of points we can put line calls into instead of drawing. If null, lines are drawn + * @param aCurInex -- a pointer to an Integer that tells were to put the points into the array, incremented when finished + * @update 3/26/99 dwc + */ + void SubDivide(nsIRenderingContext *aRenderingContext,nsPoint aPointArray[],PRInt32 *aCurIndex); + +/** --------------------------------------------------- + * Divide a Quadratic Bezier curve at the mid-point + * @update 3/26/99 dwc + * @param aCurve1 -- Curve 1 as a result of the division + * @param aCurve2 -- Curve 2 as a result of the division + */ + void MidPointDivide(QBezierCurve *A,QBezierCurve *B); +}; + + enum eSegType {eUNDEF,eLINE,eQCURVE,eCCURVE}; + + +/** --------------------------------------------------- + * A class to iterate through a nsPathPoint array and return segments + * @update 04/27/00 dwc + */ +class nsPathIter { + +public: + enum eSegType {eUNDEF,eLINE,eQCURVE,eCCURVE}; + +private: + PRUint32 mCurPoint; + PRUint32 mNumPoints; + nsPathPoint *mThePath; + +public: + nsPathIter(); + nsPathIter(nsPathPoint* aThePath,PRUint32 aNumPts); + + PRBool NextSeg(QBezierCurve& TheSegment,eSegType& aCurveType); + +}; + + #endif /* nsRenderingContextImpl */ diff --git a/gfx/src/nsRenderingContextImpl.cpp b/gfx/src/nsRenderingContextImpl.cpp index c21866db0d0..a71f73f8186 100644 --- a/gfx/src/nsRenderingContextImpl.cpp +++ b/gfx/src/nsRenderingContextImpl.cpp @@ -147,8 +147,39 @@ nsTransform2D *theTransform; * @update 3/29/00 dwc */ NS_IMETHODIMP -nsRenderingContextImpl::DrawPath(nsPoint aPointArray[],PRInt32 aNumPts) +nsRenderingContextImpl::DrawPath(nsPathPoint aPointArray[],PRInt32 aNumPts) { +PRInt32 i; +nsPathPoint pts[20]; +nsPathPoint *pp0,*np,*pp; +QBezierCurve thecurve; +nsPathIter *thePathIter; +nsPathIter::eSegType curveType; + + + // Transform the points first + if (aNumPts > 20){ + pp0 = new nsPathPoint[aNumPts]; + } else { + pp0 = &pts[0]; + } + pp = pp0; + + for ( i= 0; i < aNumPts; i++,np++,pp++){ + pp->x = np->x; + pp->y = np->y; + mTranMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); + } + + + thePathIter = new nsPathIter(pp0,aNumPts); + while ( thePathIter->NextSeg(thecurve,curveType) ) { + //thecurve.Display_Graphic(TheProcess,NULL); + } + + // Release temporary storage if necessary + if (pp0 != pts) + delete pp0; return NS_OK; } @@ -184,3 +215,179 @@ PRInt32 flag = NS_COPYBITS_TO_BACK_BUFFER | NS_COPYBITS_XFORM_DEST_VALUES; * See documentation in nsRenderingContextImpl.h * @update 3/29/00 dwc */ +void +QBezierCurve::SubDivide(nsIRenderingContext *aRenderingContext,nsPoint aPointArray[],PRInt32 *aCurIndex) +{ +QBezierCurve curve1,curve2; +PRInt16 fx,fy,smag; + + // divide the curve into 2 pieces + MidPointDivide(&curve1,&curve2); + + fx = (PRInt16)abs(curve1.mAnc2.x - this->mCon.x); + fy = (PRInt16)abs(curve1.mAnc2.y - this->mCon.y); + + smag = fx+fy-(PR_MIN(fx,fy)>>1); + //smag = fx*fx + fy*fy; + + if (smag>1){ + // split the curve again + curve1.SubDivide(aRenderingContext,aPointArray,aCurIndex); + curve2.SubDivide(aRenderingContext,aPointArray,aCurIndex); + }else{ + if(aPointArray ) { + // save the points for further processing + aPointArray[*aCurIndex].x = curve1.mAnc2.x; + aPointArray[*aCurIndex].y = curve1.mAnc2.y; + (*aCurIndex)++; + aPointArray[*aCurIndex].x = curve2.mAnc2.x; + aPointArray[*aCurIndex].y = curve2.mAnc2.y; + (*aCurIndex)++; + }else{ + // draw the curve + aRenderingContext->DrawLine(curve1.mAnc1.x,curve1.mAnc1.y,curve1.mAnc2.x,curve1.mAnc2.y); + aRenderingContext->DrawLine(curve1.mAnc2.x,curve1.mAnc2.y,curve2.mAnc2.x,curve2.mAnc2.y); + } + } +} + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +void +QBezierCurve::MidPointDivide(QBezierCurve *A,QBezierCurve *B) +{ +double c1x,c1y,c2x,c2y; +nsPoint a1; + + c1x = (mAnc1.x+mCon.x)/2.0; + c1y = (mAnc1.y+mCon.y)/2.0; + c2x = (mAnc2.x+mCon.x)/2.0; + c2y = (mAnc2.y+mCon.y)/2.0; + + a1.x = (PRInt32)((c1x + c2x)/2.0); + a1.y = (PRInt32)((c1y + c2y)/2.0); + + // put the math into our 2 new curves + A->mAnc1 = this->mAnc1; + A->mCon.x = (PRInt16)c1x; + A->mCon.y = (PRInt16)c1y; + A->mAnc2 = a1; + B->mAnc1 = a1; + B->mCon.x = (PRInt16)c2x; + B->mCon.y = (PRInt16)c2y; + B->mAnc2 = this->mAnc2; +} + + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +nsPathIter::nsPathIter() +{ + + mCurPoint = 0; + mNumPoints = 0; + mThePath = 0; + +} + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +nsPathIter::nsPathIter(nsPathPoint* aThePath,PRUint32 aNumPts) +{ + + mCurPoint = 0; + mNumPoints = aNumPts; + mThePath = aThePath; + +} + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +PRBool +nsPathIter::NextSeg(QBezierCurve& TheSegment,eSegType& aCurveType) +{ +PRInt8 code=0; +PRBool result = PR_FALSE; +nsPathPoint *pt1,*pt2,*pt3; +nsPathPoint ptAvg,ptAvg1; + + + if ( mCurPoint < mNumPoints) { + // 1st point + pt1 = &(mThePath[mCurPoint]); + if(PR_TRUE == pt1->mIsOnCurve) { + code += 0x04; + } + + // 2nd point + if ( (mCurPoint+1) < mNumPoints) { + pt2 = &(mThePath[mCurPoint+1]); + } else{ + pt2 = &(mThePath[0]); + } + if(PR_TRUE == pt2->mIsOnCurve) { + code += 0x02; + } + + // 3rd point + if( (mCurPoint+2) < mNumPoints) { + pt3 = &(mThePath[mCurPoint+2]); + } else if ( (mCurPoint+1) < mNumPoints) { + pt3 = &(mThePath[0]); + } else { + pt3 = &(mThePath[1]); + } + if(PR_TRUE == pt3->mIsOnCurve) { + code += 0x01; + } + + switch(code) { + case 07: // 111 + case 06: // 110 + TheSegment.SetPoints(pt1->x,pt1->y,0,0,pt2->x,pt2->y); + aCurveType = eLINE; + mCurPoint++; + break; + case 05: // 101 + TheSegment.SetPoints(pt1->x,pt1->y,pt2->x,pt2->y,pt3->x,pt3->y); + aCurveType = eQCURVE; + mCurPoint+=2; + break; + case 04: // 100 + ptAvg.x = (nscoord) (((pt2->x+pt3->x)/2.0)); + ptAvg.y = (nscoord) (((pt2->y+pt3->y)/2.0)); + TheSegment.SetPoints(pt1->x,pt1->y,pt2->x,pt2->y,ptAvg.x,ptAvg.y); + aCurveType = eQCURVE; + mCurPoint++; + case 03: // 011 + case 02: // 010 + TheSegment.SetPoints(pt1->x,pt1->y,0,0,pt2->x,pt2->y); + aCurveType = eLINE; + mCurPoint++; + case 01: // 001 + ptAvg.x = (nscoord) (((pt1->x+pt2->x)/2.0)); + ptAvg.y = (nscoord) (((pt1->y+pt2->y)/2.0)); + TheSegment.SetPoints(ptAvg.x,ptAvg.y,pt2->x,pt3->y,pt2->x,pt3->y); + aCurveType = eQCURVE; + mCurPoint+=2; + case 00: // 000 + ptAvg.x = (nscoord) (((pt1->x+pt2->x)/2.0)); + ptAvg.y = (nscoord) (((pt1->y+pt2->y)/2.0)); + ptAvg1.x = (nscoord) (((pt2->x+pt3->x)/2.0)); + ptAvg1.y = (nscoord) (((pt2->y+pt3->y)/2.0)); + TheSegment.SetPoints(ptAvg.x,ptAvg.y,pt2->x,pt2->y,ptAvg1.x,ptAvg1.y); + default: + break; + } + } + + return result; +} diff --git a/gfx/src/shared/nsRenderingContextImpl.cpp b/gfx/src/shared/nsRenderingContextImpl.cpp index c21866db0d0..a71f73f8186 100644 --- a/gfx/src/shared/nsRenderingContextImpl.cpp +++ b/gfx/src/shared/nsRenderingContextImpl.cpp @@ -147,8 +147,39 @@ nsTransform2D *theTransform; * @update 3/29/00 dwc */ NS_IMETHODIMP -nsRenderingContextImpl::DrawPath(nsPoint aPointArray[],PRInt32 aNumPts) +nsRenderingContextImpl::DrawPath(nsPathPoint aPointArray[],PRInt32 aNumPts) { +PRInt32 i; +nsPathPoint pts[20]; +nsPathPoint *pp0,*np,*pp; +QBezierCurve thecurve; +nsPathIter *thePathIter; +nsPathIter::eSegType curveType; + + + // Transform the points first + if (aNumPts > 20){ + pp0 = new nsPathPoint[aNumPts]; + } else { + pp0 = &pts[0]; + } + pp = pp0; + + for ( i= 0; i < aNumPts; i++,np++,pp++){ + pp->x = np->x; + pp->y = np->y; + mTranMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); + } + + + thePathIter = new nsPathIter(pp0,aNumPts); + while ( thePathIter->NextSeg(thecurve,curveType) ) { + //thecurve.Display_Graphic(TheProcess,NULL); + } + + // Release temporary storage if necessary + if (pp0 != pts) + delete pp0; return NS_OK; } @@ -184,3 +215,179 @@ PRInt32 flag = NS_COPYBITS_TO_BACK_BUFFER | NS_COPYBITS_XFORM_DEST_VALUES; * See documentation in nsRenderingContextImpl.h * @update 3/29/00 dwc */ +void +QBezierCurve::SubDivide(nsIRenderingContext *aRenderingContext,nsPoint aPointArray[],PRInt32 *aCurIndex) +{ +QBezierCurve curve1,curve2; +PRInt16 fx,fy,smag; + + // divide the curve into 2 pieces + MidPointDivide(&curve1,&curve2); + + fx = (PRInt16)abs(curve1.mAnc2.x - this->mCon.x); + fy = (PRInt16)abs(curve1.mAnc2.y - this->mCon.y); + + smag = fx+fy-(PR_MIN(fx,fy)>>1); + //smag = fx*fx + fy*fy; + + if (smag>1){ + // split the curve again + curve1.SubDivide(aRenderingContext,aPointArray,aCurIndex); + curve2.SubDivide(aRenderingContext,aPointArray,aCurIndex); + }else{ + if(aPointArray ) { + // save the points for further processing + aPointArray[*aCurIndex].x = curve1.mAnc2.x; + aPointArray[*aCurIndex].y = curve1.mAnc2.y; + (*aCurIndex)++; + aPointArray[*aCurIndex].x = curve2.mAnc2.x; + aPointArray[*aCurIndex].y = curve2.mAnc2.y; + (*aCurIndex)++; + }else{ + // draw the curve + aRenderingContext->DrawLine(curve1.mAnc1.x,curve1.mAnc1.y,curve1.mAnc2.x,curve1.mAnc2.y); + aRenderingContext->DrawLine(curve1.mAnc2.x,curve1.mAnc2.y,curve2.mAnc2.x,curve2.mAnc2.y); + } + } +} + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +void +QBezierCurve::MidPointDivide(QBezierCurve *A,QBezierCurve *B) +{ +double c1x,c1y,c2x,c2y; +nsPoint a1; + + c1x = (mAnc1.x+mCon.x)/2.0; + c1y = (mAnc1.y+mCon.y)/2.0; + c2x = (mAnc2.x+mCon.x)/2.0; + c2y = (mAnc2.y+mCon.y)/2.0; + + a1.x = (PRInt32)((c1x + c2x)/2.0); + a1.y = (PRInt32)((c1y + c2y)/2.0); + + // put the math into our 2 new curves + A->mAnc1 = this->mAnc1; + A->mCon.x = (PRInt16)c1x; + A->mCon.y = (PRInt16)c1y; + A->mAnc2 = a1; + B->mAnc1 = a1; + B->mCon.x = (PRInt16)c2x; + B->mCon.y = (PRInt16)c2y; + B->mAnc2 = this->mAnc2; +} + + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +nsPathIter::nsPathIter() +{ + + mCurPoint = 0; + mNumPoints = 0; + mThePath = 0; + +} + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +nsPathIter::nsPathIter(nsPathPoint* aThePath,PRUint32 aNumPts) +{ + + mCurPoint = 0; + mNumPoints = aNumPts; + mThePath = aThePath; + +} + +/** --------------------------------------------------- + * See documentation in nsRenderingContextImpl.h + * @update 4/27/2000 dwc + */ +PRBool +nsPathIter::NextSeg(QBezierCurve& TheSegment,eSegType& aCurveType) +{ +PRInt8 code=0; +PRBool result = PR_FALSE; +nsPathPoint *pt1,*pt2,*pt3; +nsPathPoint ptAvg,ptAvg1; + + + if ( mCurPoint < mNumPoints) { + // 1st point + pt1 = &(mThePath[mCurPoint]); + if(PR_TRUE == pt1->mIsOnCurve) { + code += 0x04; + } + + // 2nd point + if ( (mCurPoint+1) < mNumPoints) { + pt2 = &(mThePath[mCurPoint+1]); + } else{ + pt2 = &(mThePath[0]); + } + if(PR_TRUE == pt2->mIsOnCurve) { + code += 0x02; + } + + // 3rd point + if( (mCurPoint+2) < mNumPoints) { + pt3 = &(mThePath[mCurPoint+2]); + } else if ( (mCurPoint+1) < mNumPoints) { + pt3 = &(mThePath[0]); + } else { + pt3 = &(mThePath[1]); + } + if(PR_TRUE == pt3->mIsOnCurve) { + code += 0x01; + } + + switch(code) { + case 07: // 111 + case 06: // 110 + TheSegment.SetPoints(pt1->x,pt1->y,0,0,pt2->x,pt2->y); + aCurveType = eLINE; + mCurPoint++; + break; + case 05: // 101 + TheSegment.SetPoints(pt1->x,pt1->y,pt2->x,pt2->y,pt3->x,pt3->y); + aCurveType = eQCURVE; + mCurPoint+=2; + break; + case 04: // 100 + ptAvg.x = (nscoord) (((pt2->x+pt3->x)/2.0)); + ptAvg.y = (nscoord) (((pt2->y+pt3->y)/2.0)); + TheSegment.SetPoints(pt1->x,pt1->y,pt2->x,pt2->y,ptAvg.x,ptAvg.y); + aCurveType = eQCURVE; + mCurPoint++; + case 03: // 011 + case 02: // 010 + TheSegment.SetPoints(pt1->x,pt1->y,0,0,pt2->x,pt2->y); + aCurveType = eLINE; + mCurPoint++; + case 01: // 001 + ptAvg.x = (nscoord) (((pt1->x+pt2->x)/2.0)); + ptAvg.y = (nscoord) (((pt1->y+pt2->y)/2.0)); + TheSegment.SetPoints(ptAvg.x,ptAvg.y,pt2->x,pt3->y,pt2->x,pt3->y); + aCurveType = eQCURVE; + mCurPoint+=2; + case 00: // 000 + ptAvg.x = (nscoord) (((pt1->x+pt2->x)/2.0)); + ptAvg.y = (nscoord) (((pt1->y+pt2->y)/2.0)); + ptAvg1.x = (nscoord) (((pt2->x+pt3->x)/2.0)); + ptAvg1.y = (nscoord) (((pt2->y+pt3->y)/2.0)); + TheSegment.SetPoints(ptAvg.x,ptAvg.y,pt2->x,pt2->y,ptAvg1.x,ptAvg1.y); + default: + break; + } + } + + return result; +} diff --git a/gfx/src/windows/nsRenderingContextWin.cpp b/gfx/src/windows/nsRenderingContextWin.cpp index db6f01e0251..1b7b22ad295 100644 --- a/gfx/src/windows/nsRenderingContextWin.cpp +++ b/gfx/src/windows/nsRenderingContextWin.cpp @@ -295,7 +295,7 @@ nsRenderingContextWin :: ~nsRenderingContextWin() NS_RELEASE(mDCOwner); } - mTMatrix = nsnull; + mTranMatrix = nsnull; mDC = NULL; mMainDC = NULL; } @@ -465,7 +465,7 @@ nsresult nsRenderingContextWin :: CommonInit(void) float app2dev; mContext->GetAppUnitsToDevUnits(app2dev); - mTMatrix->AddScale(app2dev, app2dev); + mTranMatrix->AddScale(app2dev, app2dev); mContext->GetDevUnitsToAppUnits(mP2T); #ifdef NS_DEBUG @@ -678,7 +678,7 @@ NS_IMETHODIMP nsRenderingContextWin :: PushState(void) NS_IF_ADDREF(mStates->mNext->mFontMetrics); } - mTMatrix = &mStates->mMatrix; + mTranMatrix = &mStates->mMatrix; return NS_OK; } @@ -701,7 +701,7 @@ NS_IMETHODIMP nsRenderingContextWin :: PopState(PRBool &aClipEmpty) if (nsnull != mStates) { - mTMatrix = &mStates->mMatrix; + mTranMatrix = &mStates->mMatrix; GraphicsState *pstate; @@ -738,7 +738,7 @@ NS_IMETHODIMP nsRenderingContextWin :: PopState(PRBool &aClipEmpty) SetLineStyle(mStates->mLineStyle); } else - mTMatrix = nsnull; + mTranMatrix = nsnull; } aClipEmpty = retval; @@ -759,7 +759,7 @@ NS_IMETHODIMP nsRenderingContextWin :: SetClipRect(const nsRect& aRect, nsClipCo mStates->mLocalClip = aRect; - mTMatrix->TransformCoord(&trect.x, &trect.y, + mTranMatrix->TransformCoord(&trect.x, &trect.y, &trect.width, &trect.height); RECT nr; @@ -984,20 +984,20 @@ NS_IMETHODIMP nsRenderingContextWin :: GetFontMetrics(nsIFontMetrics *&aFontMetr // add the passed in translation to the current translation NS_IMETHODIMP nsRenderingContextWin :: Translate(nscoord aX, nscoord aY) { - mTMatrix->AddTranslation((float)aX,(float)aY); + mTranMatrix->AddTranslation((float)aX,(float)aY); return NS_OK; } // add the passed in scale to the current scale NS_IMETHODIMP nsRenderingContextWin :: Scale(float aSx, float aSy) { - mTMatrix->AddScale(aSx, aSy); + mTranMatrix->AddScale(aSx, aSy); return NS_OK; } NS_IMETHODIMP nsRenderingContextWin :: GetCurrentTransform(nsTransform2D *&aTransform) { - aTransform = mTMatrix; + aTransform = mTranMatrix; return NS_OK; } @@ -1048,8 +1048,8 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawLine(nscoord aX0, nscoord aY0, nscoor if (nsLineStyle_kNone == mCurrLineStyle) return NS_OK; - mTMatrix->TransformCoord(&aX0,&aY0); - mTMatrix->TransformCoord(&aX1,&aY1); + mTranMatrix->TransformCoord(&aX0,&aY0); + mTranMatrix->TransformCoord(&aX1,&aY1); SetupPen(); @@ -1092,7 +1092,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawPolyline(const nsPoint aPoints[], PRI { pp->x = np->x; pp->y = np->y; - mTMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); + mTranMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); } // Draw the polyline @@ -1112,7 +1112,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawRect(const nsRect& aRect) nsRect tr; tr = aRect; - mTMatrix->TransformCoord(&tr.x,&tr.y,&tr.width,&tr.height); + mTranMatrix->TransformCoord(&tr.x,&tr.y,&tr.width,&tr.height); nr.left = tr.x; nr.top = tr.y; nr.right = tr.x+tr.width; @@ -1127,7 +1127,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawRect(nscoord aX, nscoord aY, nscoord { RECT nr; - mTMatrix->TransformCoord(&aX,&aY,&aWidth,&aHeight); + mTranMatrix->TransformCoord(&aX,&aY,&aWidth,&aHeight); nr.left = aX; nr.top = aY; nr.right = aX+aWidth; @@ -1144,7 +1144,7 @@ NS_IMETHODIMP nsRenderingContextWin :: FillRect(const nsRect& aRect) nsRect tr; tr = aRect; - mTMatrix->TransformCoord(&tr.x,&tr.y,&tr.width,&tr.height); + mTranMatrix->TransformCoord(&tr.x,&tr.y,&tr.width,&tr.height); ConditionRect(tr, nr); ::FillRect(mDC, &nr, SetupSolidBrush()); @@ -1156,7 +1156,7 @@ NS_IMETHODIMP nsRenderingContextWin :: FillRect(nscoord aX, nscoord aY, nscoord RECT nr; nsRect tr; - mTMatrix->TransformCoord(&aX,&aY,&aWidth,&aHeight); + mTranMatrix->TransformCoord(&aX,&aY,&aWidth,&aHeight); nr.left = aX; nr.top = aY; nr.right = aX+aWidth; @@ -1173,7 +1173,7 @@ NS_IMETHODIMP nsRenderingContextWin :: InvertRect(const nsRect& aRect) nsRect tr; tr = aRect; - mTMatrix->TransformCoord(&tr.x,&tr.y,&tr.width,&tr.height); + mTranMatrix->TransformCoord(&tr.x,&tr.y,&tr.width,&tr.height); ConditionRect(tr, nr); ::InvertRect(mDC, &nr); @@ -1185,7 +1185,7 @@ NS_IMETHODIMP nsRenderingContextWin :: InvertRect(nscoord aX, nscoord aY, nscoor RECT nr; nsRect tr; - mTMatrix->TransformCoord(&aX,&aY,&aWidth,&aHeight); + mTranMatrix->TransformCoord(&aX,&aY,&aWidth,&aHeight); nr.left = aX; nr.top = aY; nr.right = aX+aWidth; @@ -1213,7 +1213,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawPolygon(const nsPoint aPoints[], PRIn { pp->x = np->x; pp->y = np->y; - mTMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); + mTranMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); } // Outline the polygon - note we are implicitly ignoring the linestyle here @@ -1247,7 +1247,7 @@ NS_IMETHODIMP nsRenderingContextWin :: FillPolygon(const nsPoint aPoints[], PRIn { pp->x = np->x; pp->y = np->y; - mTMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); + mTranMatrix->TransformCoord((int*)&pp->x,(int*)&pp->y); } // Fill the polygon @@ -1277,7 +1277,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawEllipse(nscoord aX, nscoord aY, nscoo if (nsLineStyle_kNone == mCurrLineStyle) return NS_OK; - mTMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); + mTranMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); SetupPen(); @@ -1296,7 +1296,7 @@ NS_IMETHODIMP nsRenderingContextWin :: FillEllipse(const nsRect& aRect) NS_IMETHODIMP nsRenderingContextWin :: FillEllipse(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight) { - mTMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); + mTranMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); SetupSolidPen(); SetupSolidBrush(); @@ -1321,7 +1321,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawArc(nscoord aX, nscoord aY, nscoord a PRInt32 quad1, quad2, sx, sy, ex, ey, cx, cy; float anglerad, distance; - mTMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); + mTranMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); SetupPen(); SetupSolidBrush(); @@ -1361,7 +1361,7 @@ NS_IMETHODIMP nsRenderingContextWin :: FillArc(nscoord aX, nscoord aY, nscoord a PRInt32 quad1, quad2, sx, sy, ex, ey, cx, cy; float anglerad, distance; - mTMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); + mTranMatrix->TransformCoord(&aX, &aY, &aWidth, &aHeight); SetupSolidPen(); SetupSolidBrush(); @@ -2285,9 +2285,9 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawString(const char *aString, PRUint32 if (aLength > 500) { dx0 = new INT[aLength]; } - mTMatrix->ScaleXCoords(aSpacing, aLength, dx0); + mTranMatrix->ScaleXCoords(aSpacing, aLength, dx0); } - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); ::ExtTextOut(mDC, x, y, 0, NULL, aString, aLength, aSpacing ? dx0 : NULL); if ((nsnull != aSpacing) && (dx0 != dxMem)) { @@ -2322,7 +2322,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawString(const PRUnichar *aString, PRUi PRInt32 x = aX; PRInt32 y = aY; - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); nsFontMetricsWin* metrics = (nsFontMetricsWin*) mFontMetrics; nsFontWin* prevFont = nsnull; @@ -2367,7 +2367,7 @@ FoundFont: // coord where y is constant and transformed once x = aX; y = aY; - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); prevFont->DrawString(mDC, x, y, str, 1); aX += *aSpacing++; str++; @@ -2425,7 +2425,7 @@ FoundFont: // coord where y is constant and transformed once x = aX; y = aY; - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); prevFont->DrawString(mDC, x, y, str, 1); aX += *aSpacing++; str++; @@ -2742,10 +2742,10 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawImage(nsIImage *aImage, const nsRect& nsRect sr,dr; sr = aSRect; - mTMatrix->TransformCoord(&sr.x, &sr.y, &sr.width, &sr.height); + mTranMatrix->TransformCoord(&sr.x, &sr.y, &sr.width, &sr.height); dr = aDRect; - mTMatrix->TransformCoord(&dr.x, &dr.y, &dr.width, &dr.height); + mTranMatrix->TransformCoord(&dr.x, &dr.y, &dr.width, &dr.height); return aImage->Draw(*this, mSurface, sr.x, sr.y, sr.width, sr.height, dr.x, dr.y, dr.width, dr.height); } @@ -2755,7 +2755,7 @@ NS_IMETHODIMP nsRenderingContextWin :: DrawImage(nsIImage *aImage, const nsRect& nsRect tr; tr = aRect; - mTMatrix->TransformCoord(&tr.x, &tr.y, &tr.width, &tr.height); + mTranMatrix->TransformCoord(&tr.x, &tr.y, &tr.width, &tr.height); return aImage->Draw(*this, mSurface, tr.x, tr.y, tr.width, tr.height); } @@ -2772,8 +2772,8 @@ nsRenderingContextWin::DrawTile(nsIImage *aImage,nscoord aX0,nscoord aY0,nscoord PRBool didtile = FALSE; // convert output platform, but no translation.. just scale - mTMatrix->TransformCoord(&aX0,&aY0,&aWidth,&aHeight); - mTMatrix->TransformCoord(&aX1,&aY1); + mTranMatrix->TransformCoord(&aX0,&aY0,&aWidth,&aHeight); + mTranMatrix->TransformCoord(&aX1,&aY1); if ( PR_TRUE==CanTile(aWidth,aHeight) ) { didtile = ((nsImageWin*)aImage)->PatBltTile(*this,mSurface,aX0,aY0,aX1,aY1,aWidth,aHeight); @@ -2869,10 +2869,10 @@ NS_IMETHODIMP nsRenderingContextWin :: CopyOffScreenBits(nsDrawingSurface aSrcSu oldPalette = ::SelectPalette(destdc, (HPALETTE)palInfo.palette, PR_TRUE); if (aCopyFlags & NS_COPYBITS_XFORM_SOURCE_VALUES) - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); if (aCopyFlags & NS_COPYBITS_XFORM_DEST_VALUES) - mTMatrix->TransformCoord(&drect.x, &drect.y, &drect.width, &drect.height); + mTranMatrix->TransformCoord(&drect.x, &drect.y, &drect.width, &drect.height); ::BitBlt(destdc, drect.x, drect.y, drect.width, drect.height, @@ -3246,7 +3246,7 @@ NS_IMETHODIMP nsRenderingContextWinA :: DrawString(const PRUnichar *aString, PRU PRInt32 x = aX; PRInt32 y = aY; - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); nsFontMetricsWinA* metrics = (nsFontMetricsWinA*) mFontMetrics; nsFontSubset* prevFont = nsnull; @@ -3296,7 +3296,7 @@ FoundFont: // coord where y is constant and transformed once x = aX; y = aY; - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); prevFont->DrawString(mDC, x, y, str, 1); aX += *aSpacing++; str++; @@ -3331,7 +3331,7 @@ FoundFont: // coord where y is constant and transformed once x = aX; y = aY; - mTMatrix->TransformCoord(&x, &y); + mTranMatrix->TransformCoord(&x, &y); prevFont->DrawString(mDC, x, y, str, 1); aX += *aSpacing++; str++; diff --git a/gfx/src/windows/nsRenderingContextWin.h b/gfx/src/windows/nsRenderingContextWin.h index d8e9d216de7..9b673d28cbf 100644 --- a/gfx/src/windows/nsRenderingContextWin.h +++ b/gfx/src/windows/nsRenderingContextWin.h @@ -218,7 +218,6 @@ private: protected: nscolor mCurrentColor; - nsTransform2D *mTMatrix; // transform that all the graphics drawn here will obey nsIFontMetrics *mFontMetrics; HDC mDC; HDC mMainDC;