341317 Line style not reset during rendering context pop. r=josh

This commit is contained in:
mark%moxienet.com 2006-07-05 18:48:25 +00:00
parent 1e65fc855b
commit 6dbaaf05f4
5 changed files with 20 additions and 15 deletions

View File

@ -128,6 +128,7 @@ void nsGraphicState::Clear()
mFont = 0;
mFontMetrics = nsnull;
mCurrFontHandle = 0;
mLineStyle = nsLineStyle_kSolid;
}
//------------------------------------------------------------------------
@ -206,6 +207,8 @@ void nsGraphicState::Duplicate(nsGraphicState* aGS)
NS_IF_ADDREF(mFontMetrics);
mCurrFontHandle = aGS->mCurrFontHandle;
mLineStyle = aGS->mLineStyle;
mChanges = aGS->mChanges;
}

View File

@ -82,6 +82,7 @@ public:
PRInt32 mFont;
nsIFontMetrics * mFontMetrics;
PRInt32 mCurrFontHandle;
nsLineStyle mLineStyle;
PRUint32 mChanges; // flags indicating changes between this graphics state and the previous.

View File

@ -768,17 +768,16 @@ NS_IMETHODIMP nsRenderingContextMac::GetColor(nscolor &aColor) const
NS_IMETHODIMP nsRenderingContextMac::SetLineStyle(nsLineStyle aLineStyle)
{
// note: the line style must be saved in the nsGraphicState like font, color, etc...
mLineStyle = aLineStyle;
return NS_OK;
mGS->mLineStyle = aLineStyle;
return NS_OK;
}
//------------------------------------------------------------------------
NS_IMETHODIMP nsRenderingContextMac::GetLineStyle(nsLineStyle &aLineStyle)
{
aLineStyle = mLineStyle;
return NS_OK;
aLineStyle = mGS->mLineStyle;
return NS_OK;
}
@ -871,19 +870,20 @@ static const Pattern dashedPattern = {0xf0,0x78,0x3c,0x1e,0x0f,0x87,0xc3,0xe1};
NS_IMETHODIMP nsRenderingContextMac::DrawLine(nscoord aX0, nscoord aY0, nscoord aX1, nscoord aY1)
{
if (mLineStyle == nsLineStyle_kNone)
if (mGS->mLineStyle == nsLineStyle_kNone)
return NS_OK;
SetupPortState();
PenState savedPenState;
RGBColor savedBGColor;
if (mLineStyle == nsLineStyle_kDotted || mLineStyle == nsLineStyle_kDashed) {
if (mGS->mLineStyle == nsLineStyle_kDotted ||
mGS->mLineStyle == nsLineStyle_kDashed) {
::GetPenState(&savedPenState);
::GetBackColor(&savedBGColor);
::PenMode(transparent);
if (mLineStyle == nsLineStyle_kDashed)
if (mGS->mLineStyle == nsLineStyle_kDashed)
::PenPat(&dashedPattern);
else
::PenPat(&dottedPattern);
@ -908,7 +908,8 @@ NS_IMETHODIMP nsRenderingContextMac::DrawLine(nscoord aX0, nscoord aY0, nscoord
::MoveTo(aX0, aY0);
::Line(diffX, diffY);
if (mLineStyle == nsLineStyle_kDotted || mLineStyle == nsLineStyle_kDashed) {
if (mGS->mLineStyle == nsLineStyle_kDotted ||
mGS->mLineStyle == nsLineStyle_kDashed) {
::PenMode(savedPenState.pnMode);
::PenPat(&savedPenState.pnPat);
::RGBBackColor(&savedBGColor);
@ -921,19 +922,20 @@ NS_IMETHODIMP nsRenderingContextMac::DrawLine(nscoord aX0, nscoord aY0, nscoord
NS_IMETHODIMP nsRenderingContextMac::DrawPolyline(const nsPoint aPoints[], PRInt32 aNumPoints)
{
if (mLineStyle == nsLineStyle_kNone)
if (mGS->mLineStyle == nsLineStyle_kNone)
return NS_OK;
SetupPortState();
PenState savedPenState;
RGBColor savedBGColor;
if (mLineStyle == nsLineStyle_kDotted || mLineStyle == nsLineStyle_kDashed) {
if (mGS->mLineStyle == nsLineStyle_kDotted ||
mGS->mLineStyle == nsLineStyle_kDashed) {
::GetPenState(&savedPenState);
::GetBackColor(&savedBGColor);
::PenMode(transparent);
if (mLineStyle == nsLineStyle_kDashed)
if (mGS->mLineStyle == nsLineStyle_kDashed)
::PenPat(&dashedPattern);
else
::PenPat(&dottedPattern);
@ -957,7 +959,8 @@ NS_IMETHODIMP nsRenderingContextMac::DrawPolyline(const nsPoint aPoints[], PRInt
::LineTo(x,y);
}
if (mLineStyle == nsLineStyle_kDotted || mLineStyle == nsLineStyle_kDashed) {
if (mGS->mLineStyle == nsLineStyle_kDotted ||
mGS->mLineStyle == nsLineStyle_kDashed) {
::PenMode(savedPenState.pnMode);
::PenPat(&savedPenState.pnPat);
::RGBBackColor(&savedBGColor);

View File

@ -62,7 +62,6 @@ public:
protected:
nsTransform2D *mTranMatrix; // The rendering contexts transformation matrix
nsLineStyle mLineStyle; // The current linestyle, currenly used on mac, other platfroms to follow
int mAct; // number of active edges
Edge *mActive; // active edge list:edges crossing scanline y

View File

@ -56,7 +56,6 @@ nsSize nsRenderingContextImpl::gLargestRequestedSize = nsSize(0, 0);
*/
nsRenderingContextImpl :: nsRenderingContextImpl()
: mTranMatrix(nsnull)
, mLineStyle(nsLineStyle_kSolid)
, mAct(0)
, mActive(nsnull)
, mPenMode(nsPenMode_kNone)