Fixed Canvas ImageData pixel values not being settable to 0.
authorSamuel Rødal <samuel.rodal@digia.com>
Wed, 6 Feb 2013 08:18:19 +0000 (09:18 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 7 Feb 2013 07:41:08 +0000 (08:41 +0100)
Someone probably figured "since the data is all initialized to 0 to
begin with, we can skip 0 values". However, it's possible to temporarily
set a value to other than 0 and then back to 0, a fully valid use case
that we need to support.

Task-number: QTBUG-29065
Change-Id: Ia9f0803743d696ca8b9cca89c666ccba80a3abd0
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>

src/quick/items/context2d/qquickcontext2d.cpp
tests/auto/quick/qquickcanvasitem/data/tst_pixel.qml

index a46cd6a..2f37c7f 100644 (file)
@@ -2513,7 +2513,7 @@ v8::Handle<v8::Value> ctx2d_pixelArray_indexed_set(uint32_t index, v8::Local<v8:
     QV8Context2DPixelArrayResource *r = v8_resource_cast<QV8Context2DPixelArrayResource>(info.This());
 
     const int v = value->Uint32Value();
-    if (r && index < static_cast<quint32>(r->image.width() * r->image.height() * 4) && v > 0 && v <= 255) {
+    if (r && index < static_cast<quint32>(r->image.width() * r->image.height() * 4) && v >= 0 && v <= 255) {
         const quint32 w = r->image.width();
         const quint32 row = (index / 4) / w;
         const quint32 col = (index / 4) % w;
index 469ff23..487f7dc 100644 (file)
@@ -1,4 +1,5 @@
 import QtQuick 2.0
+import QtTest 1.0
 
 CanvasTestCase {
    id:testCase
@@ -7,6 +8,13 @@ CanvasTestCase {
    function test_createImageData(row) {
        var canvas = createCanvasObject(row);
        var ctx = canvas.getContext('2d');
+       var imageData = ctx.createImageData(1, 1);
+       var imageDataValues = imageData.data;
+       imageDataValues[0] = 255;
+       imageDataValues[0] = 0;
+       if (imageDataValues[0] != 0)
+           qtest_fail('ImageData value access fail, expecting 0, got ' + imageDataValues[0]);
+
        ctx.reset();
        canvas.destroy()
   }