Closed
Bug 1152728
Opened 11 years ago
Closed 11 years ago
Canvas graphics context doesn't update anymore after ctx.scale(..) was called with 0 values on linux.
Categories
(Firefox :: Untriaged, defect)
Tracking
()
RESOLVED
DUPLICATE
of bug 661452
People
(Reporter: thomas.darimont, Unassigned)
Details
User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
Steps to reproduce:
0) On Linux (e.g. ubuntu 14.04)
1) start firefox
2) Goto https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale
3) In the example replace ctx.scale(1, 1); with ctx.scale(0, 1); and again with ctx.scale(1, 1);
This only happens on linux, works fine on osx and windows 7 / 8.
I found 661452 which was specific to windows so I created this new ticket.
Actual results:
Canvas is not updated anymore - no box is painted.
Expected results:
Canavs should update - one should see a box painted.
| Reporter | ||
Comment 1•11 years ago
|
||
tested this with the latest ff release version 37.0.1 - still doesn't work under linux.
| Reporter | ||
Updated•11 years ago
|
Status: UNCONFIRMED → RESOLVED
Closed: 11 years ago
Resolution: --- → DUPLICATE
| Reporter | ||
Comment 3•11 years ago
|
||
When running a custom linux build from the branch GECKO3701_2015040222_RELBRANCH
I see the following error message in the log when I change ctx.scale(1,1) to ctx.scale(0,1):
[GFX2-]: DrawTargetCairo context in error state: invalid matrix (not invertible)(5)
| Reporter | ||
Comment 4•11 years ago
|
||
For a quit test I changed the CanvasRenderingContext2D::Scale function in CanvasRenderingContext2D.cpp:
from
void
CanvasRenderingContext2D::Scale(double x, double y, ErrorResult& error)
{
TransformWillUpdate();
if (!IsTargetValid()) {
error.Throw(NS_ERROR_FAILURE);
return;
}
Matrix newMatrix = mTarget->GetTransform();
mTarget->SetTransform(newMatrix.PreScale(x, y));
}
To
void
CanvasRenderingContext2D::Scale(double x, double y, ErrorResult& error)
{
TransformWillUpdate();
if (!IsTargetValid()) {
error.Throw(NS_ERROR_FAILURE);
return;
}
if(x == 0.0){
x = 0.00001;
}
if(y == 0.0){
y = 0.00001;
}
Matrix newMatrix = mTarget->GetTransform();
mTarget->SetTransform(newMatrix.PreScale(x, y));
}
It works fine with the 0 guards - but that's of course not a real fix, I guess one has to tweak the logic in "SetTransform" to be more resilient when zeros are passed in - which really seams to be the actual problem.
You need to log in
before you can comment on or make changes to this bug.
Description
•