Update dimensions early in ClearTarget.

This commit is contained in:
Jonathan Kew 2018-05-23 11:57:42 -07:00 • committed by Roy Tam
commit d7d5258610
2 changed files with 13 additions and 6 deletions

View file

@ -1862,8 +1862,6 @@ CanvasRenderingContext2D::GetHeight() const
NS_IMETHODIMP NS_IMETHODIMP
CanvasRenderingContext2D::SetDimensions(int32_t aWidth, int32_t aHeight) CanvasRenderingContext2D::SetDimensions(int32_t aWidth, int32_t aHeight)
{ {
ClearTarget();
// Zero sized surfaces can cause problems. // Zero sized surfaces can cause problems.
mZero = false; mZero = false;
if (aHeight == 0) { if (aHeight == 0) {
@ -1874,14 +1872,14 @@ CanvasRenderingContext2D::SetDimensions(int32_t aWidth, int32_t aHeight)
aWidth = 1; aWidth = 1;
mZero = true; mZero = true;
} }
mWidth = aWidth;
mHeight = aHeight; ClearTarget(aWidth, aHeight);
return NS_OK; return NS_OK;
} }
void void
CanvasRenderingContext2D::ClearTarget() CanvasRenderingContext2D::ClearTarget(int32_t aWidth, int32_t aHeight)
{ {
Reset(); Reset();
@ -1889,6 +1887,12 @@ CanvasRenderingContext2D::ClearTarget()
SetInitialState(); SetInitialState();
// Update dimensions only if new (strictly positive) values were passed.
if (aWidth > 0 && aHeight > 0) {
mWidth = aWidth;
mHeight = aHeight;
}
// For vertical writing-mode, unless text-orientation is sideways, // For vertical writing-mode, unless text-orientation is sideways,
// we'll modify the initial value of textBaseline to 'middle'. // we'll modify the initial value of textBaseline to 'middle'.
RefPtr<nsStyleContext> canvasStyle; RefPtr<nsStyleContext> canvasStyle;

View file

@ -669,8 +669,11 @@ protected:
/** /**
* Disposes an old target and prepares to lazily create a new target. * Disposes an old target and prepares to lazily create a new target.
*
* Parameters are the new dimensions to be used, or if either is negative,
* existing dimensions will be left unchanged.
*/ */
void ClearTarget(); void ClearTarget(int32_t aWidth = -1, int32_t aHeight = -1);
/* /*
* Returns the target to the buffer provider. i.e. this will queue a frame for * Returns the target to the buffer provider. i.e. this will queue a frame for