Commit ae996a97 authored by oliver@apple.com's avatar oliver@apple.com

Bug 17486: Support HTML5 Canvas.getImageData API

Support Canvas.getImageData and Canvas.createImageData

Reviewed by Sam W.

This patch adds support for all the pixel reading portions
of the HTML5 Canvas spec.  There are two new types ImageData
and CanvasPixelArray which are used to provide the HTML5
ImageData object, and the required semantics for assignment
to the ImageData data array.

We only implement the CG version of ImageBuffer::getImageData,
but the logic is null safe, so this will not introduce any
crashes into other platforms, unfortunately it will result in
JS Object detection "lying" on non-CG platforms.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@30506 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent ac324818
2008-02-22 Oliver Hunt <oliver@apple.com>
Reviewed by Sam W.
Bug 17486: Support HTML5 Canvas.getImageData API
Support Canvas.getImageData and Canvas.createImageData
Test cases for ImageData behaviour and getImageData correctness
* fast/canvas/canvas-ImageData-behaviour-expected.txt: Added.
* fast/canvas/canvas-ImageData-behaviour.html: Added.
* fast/canvas/canvas-ImageData-behaviour.js: Added.
* fast/canvas/canvas-getImageData-expected.txt: Added.
* fast/canvas/canvas-getImageData.html: Added.
2008-02-22 Geoffrey Garen <ggaren@apple.com>
Reviewed by Sam Weinig.
Series of tests to ensure correct behaviour of the ImageData object
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS imageData.width is 2
PASS imageData.height is 2
PASS imageData.data.length is 16
PASS imageData.data[0] is 0
PASS imageData.data[1] is 0
PASS imageData.data[2] is 0
PASS imageData.data[3] is 0
PASS imageData.data[4] is 0
PASS imageData.data[5] is 0
PASS imageData.data[6] is 0
PASS imageData.data[7] is 0
PASS imageData.data[8] is 0
PASS imageData.data[9] is 0
PASS imageData.data[10] is 0
PASS imageData.data[11] is 0
PASS imageData.data[12] is 0
PASS imageData.data[13] is 0
PASS imageData.data[14] is 0
PASS imageData.data[15] is 0
PASS imageData.data[0] = NaN, imageData.data[0] is 0
PASS imageData.data[0] = true, imageData.data[0] is 1
PASS imageData.data[0] = false, imageData.data[0] is 0
PASS imageData.data[0] = "garbage", imageData.data[0] is 0
PASS imageData.data[0] = -1, imageData.data[0] is 0
PASS imageData.data[0] = "0", imageData.data[0] is 0
PASS imageData.data[0] = "1", imageData.data[0] is 1
PASS imageData.data[0] = "2", imageData.data[0] is 2
PASS imageData.data[0] = Infinity, imageData.data[0] is 255
PASS imageData.data[0] = -Infinity, imageData.data[0] is 0
PASS imageData.data[0] = -5, imageData.data[0] is 0
PASS imageData.data[0] = -0.5, imageData.data[0] is 0
PASS imageData.data[0] = 0, imageData.data[0] is 0
PASS imageData.data[0] = 0.5, imageData.data[0] is 1
PASS imageData.data[0] = 5, imageData.data[0] is 5
PASS imageData.data[0] = 5.4, imageData.data[0] is 5
PASS imageData.data[0] = 255, imageData.data[0] is 255
PASS imageData.data[0] = 256, imageData.data[0] is 255
PASS imageData.data[0] = null, imageData.data[0] is 0
PASS imageData.data[0] = undefined, imageData.data[0] is 0
PASS imageData.data['foo']='garbage',imageData.data['foo'] is 'garbage'
PASS imageData.data[-1]='garbage',imageData.data[-1] is 'garbage'
PASS imageData.data[17]='garbage',imageData.data[17] is undefined
PASS successfullyParsed is true
TEST COMPLETE
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<link rel="stylesheet" href="../js/resources/js-test-style.css">
<script src="../js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<canvas id="canvas"></canvas>
<script src="canvas-ImageData-behaviour.js"></script>
<script src="../js/resources/js-test-post.js"></script>
</body>
</html>
description("Series of tests to ensure correct behaviour of the ImageData object");
imageData = document.getElementById("canvas").getContext("2d").getImageData(0,0,2,2);
shouldBe("imageData.width", "2");
shouldBe("imageData.height", "2");
shouldBe("imageData.data.length", "16");
for (var i = 0; i < imageData.data.length; i++)
shouldBe("imageData.data["+i+"]", "0");
var testValues = [NaN, true, false, "\"garbage\"", "-1",
"\"0\"", "\"1\"", "\"2\"", Infinity, -Infinity,
-5, -0.5, 0, 0.5, 5,
5.4, 255, 256, null, undefined];
var testResults = [0, 1, 0, 0, 0,
0, 1, 2, 255, 0,
0, 0, 0, 1, 5,
5, 255, 255, 0, 0];
for (var i = 0; i < testValues.length; i++) {
shouldBe("imageData.data[0] = "+testValues[i]+", imageData.data[0]", ""+testResults[i]);
}
shouldBe("imageData.data['foo']='garbage',imageData.data['foo']", "'garbage'");
shouldBe("imageData.data[-1]='garbage',imageData.data[-1]", "'garbage'");
shouldBe("imageData.data[17]='garbage',imageData.data[17]", "undefined");
var successfullyParsed = true;
This test ensures that getImageData works correctly.
PASS: pixel at (0,0) was [0,0,0,255]
PASS: pixel at (4,0) was [0,11,0,255]
PASS: pixel at (8,0) was [0,21,0,255]
PASS: pixel at (12,0) was [0,32,0,255]
PASS: pixel at (16,0) was [0,43,0,255]
PASS: pixel at (20,0) was [0,53,0,255]
PASS: pixel at (24,0) was [0,64,0,255]
PASS: pixel at (28,0) was [0,74,0,255]
PASS: pixel at (32,0) was [0,85,0,255]
PASS: pixel at (36,0) was [0,96,0,255]
PASS: pixel at (40,0) was [0,106,0,255]
PASS: pixel at (44,0) was [0,117,0,255]
PASS: pixel at (48,0) was [0,128,0,255]
PASS: pixel at (52,0) was [0,138,0,255]
PASS: pixel at (56,0) was [0,149,0,255]
PASS: pixel at (60,0) was [0,159,0,255]
PASS: pixel at (64,0) was [0,170,0,255]
PASS: pixel at (68,0) was [0,181,0,255]
PASS: pixel at (72,0) was [0,191,0,255]
PASS: pixel at (76,0) was [0,202,0,255]
PASS: pixel at (80,0) was [0,213,0,255]
PASS: pixel at (84,0) was [0,223,0,255]
PASS: pixel at (88,0) was [0,234,0,255]
PASS: pixel at (92,0) was [0,244,0,255]
PASS: pixel at (96,0) was [0,255,0,255]
PASS: pixel at (5,5) was [64,128,191,255]
PASS: Correct data for content outside canvas bounds
PASS: pixel at (50,50) was [0,0,0,0]
PASS: pixel at (50,54) was [0,0,0,1]
PASS: pixel at (50,58) was [0,0,0,2]
PASS: pixel at (50,62) was [0,0,0,16]
PASS: pixel at (50,66) was [0,0,0,32]
PASS: pixel at (50,70) was [0,0,0,64]
PASS: pixel at (50,74) was [0,0,0,96]
PASS: pixel at (50,78) was [0,0,0,128]
PASS: pixel at (50,82) was [0,0,0,192]
PASS: pixel at (50,86) was [0,0,0,254]
PASS: pixel at (50,90) was [0,0,0,255]
PASS: pixel at (54,50) was [0,0,0,0]
PASS: pixel at (54,54) was [0,0,0,1]
PASS: pixel at (54,58) was [0,0,0,2]
PASS: pixel at (54,62) was [0,0,0,16]
PASS: pixel at (54,66) was [0,0,0,32]
PASS: pixel at (54,70) was [0,0,0,64]
PASS: pixel at (54,74) was [0,0,0,96]
PASS: pixel at (54,78) was [1,0,0,128]
PASS: pixel at (54,82) was [1,0,0,192]
PASS: pixel at (54,86) was [1,0,0,254]
PASS: pixel at (54,90) was [1,0,0,255]
PASS: pixel at (58,50) was [0,0,0,0]
PASS: pixel at (58,54) was [0,0,0,1]
PASS: pixel at (58,58) was [0,0,0,2]
PASS: pixel at (58,62) was [0,0,0,16]
PASS: pixel at (58,66) was [0,0,0,32]
PASS: pixel at (58,70) was [3,0,0,64]
PASS: pixel at (58,74) was [2,0,0,96]
PASS: pixel at (58,78) was [1,0,0,128]
PASS: pixel at (58,82) was [2,0,0,192]
PASS: pixel at (58,86) was [2,0,0,254]
PASS: pixel at (58,90) was [2,0,0,255]
PASS: pixel at (62,50) was [0,0,0,0]
PASS: pixel at (62,54) was [0,0,0,1]
PASS: pixel at (62,58) was [0,0,0,2]
PASS: pixel at (62,62) was [15,0,0,16]
PASS: pixel at (62,66) was [15,0,0,32]
PASS: pixel at (62,70) was [15,0,0,64]
PASS: pixel at (62,74) was [15,0,0,96]
PASS: pixel at (62,78) was [15,0,0,128]
PASS: pixel at (62,82) was [15,0,0,192]
PASS: pixel at (62,86) was [16,0,0,254]
PASS: pixel at (62,90) was [16,0,0,255]
PASS: pixel at (66,50) was [0,0,0,0]
PASS: pixel at (66,54) was [0,0,0,1]
PASS: pixel at (66,58) was [0,0,0,2]
PASS: pixel at (66,62) was [31,0,0,16]
PASS: pixel at (66,66) was [31,0,0,32]
PASS: pixel at (66,70) was [31,0,0,64]
PASS: pixel at (66,74) was [31,0,0,96]
PASS: pixel at (66,78) was [31,0,0,128]
PASS: pixel at (66,82) was [31,0,0,192]
PASS: pixel at (66,86) was [32,0,0,254]
PASS: pixel at (66,90) was [32,0,0,255]
PASS: pixel at (70,50) was [0,0,0,0]
PASS: pixel at (70,54) was [0,0,0,1]
PASS: pixel at (70,58) was [127,0,0,2]
PASS: pixel at (70,62) was [63,0,0,16]
PASS: pixel at (70,66) was [63,0,0,32]
PASS: pixel at (70,70) was [63,0,0,64]
PASS: pixel at (70,74) was [63,0,0,96]
PASS: pixel at (70,78) was [63,0,0,128]
PASS: pixel at (70,82) was [63,0,0,192]
PASS: pixel at (70,86) was [64,0,0,254]
PASS: pixel at (70,90) was [64,0,0,255]
PASS: pixel at (74,50) was [0,0,0,0]
PASS: pixel at (74,54) was [0,0,0,1]
PASS: pixel at (74,58) was [127,0,0,2]
PASS: pixel at (74,62) was [95,0,0,16]
PASS: pixel at (74,66) was [95,0,0,32]
PASS: pixel at (74,70) was [95,0,0,64]
PASS: pixel at (74,74) was [95,0,0,96]
PASS: pixel at (74,78) was [95,0,0,128]
PASS: pixel at (74,82) was [95,0,0,192]
PASS: pixel at (74,86) was [96,0,0,254]
PASS: pixel at (74,90) was [96,0,0,255]
PASS: pixel at (78,50) was [0,0,0,0]
PASS: pixel at (78,54) was [255,0,0,1]
PASS: pixel at (78,58) was [127,0,0,2]
PASS: pixel at (78,62) was [127,0,0,16]
PASS: pixel at (78,66) was [127,0,0,32]
PASS: pixel at (78,70) was [127,0,0,64]
PASS: pixel at (78,74) was [127,0,0,96]
PASS: pixel at (78,78) was [127,0,0,128]
PASS: pixel at (78,82) was [127,0,0,192]
PASS: pixel at (78,86) was [127,0,0,254]
PASS: pixel at (78,90) was [128,0,0,255]
PASS: pixel at (82,50) was [0,0,0,0]
PASS: pixel at (82,54) was [255,0,0,1]
PASS: pixel at (82,58) was [255,0,0,2]
PASS: pixel at (82,62) was [191,0,0,16]
PASS: pixel at (82,66) was [191,0,0,32]
PASS: pixel at (82,70) was [191,0,0,64]
PASS: pixel at (82,74) was [191,0,0,96]
PASS: pixel at (82,78) was [191,0,0,128]
PASS: pixel at (82,82) was [192,0,0,192]
PASS: pixel at (82,86) was [191,0,0,254]
PASS: pixel at (82,90) was [192,0,0,255]
PASS: pixel at (86,50) was [0,0,0,0]
PASS: pixel at (86,54) was [255,0,0,1]
PASS: pixel at (86,58) was [255,0,0,2]
PASS: pixel at (86,62) was [255,0,0,16]
PASS: pixel at (86,66) was [255,0,0,32]
PASS: pixel at (86,70) was [255,0,0,64]
PASS: pixel at (86,74) was [255,0,0,96]
PASS: pixel at (86,78) was [253,0,0,128]
PASS: pixel at (86,82) was [253,0,0,192]
PASS: pixel at (86,86) was [253,0,0,254]
PASS: pixel at (86,90) was [254,0,0,255]
PASS: pixel at (90,50) was [0,0,0,0]
PASS: pixel at (90,54) was [255,0,0,1]
PASS: pixel at (90,58) was [255,0,0,2]
PASS: pixel at (90,62) was [255,0,0,16]
PASS: pixel at (90,66) was [255,0,0,32]
PASS: pixel at (90,70) was [255,0,0,64]
PASS: pixel at (90,74) was [255,0,0,96]
PASS: pixel at (90,78) was [255,0,0,128]
PASS: pixel at (90,82) was [255,0,0,192]
PASS: pixel at (90,86) was [255,0,0,254]
PASS: pixel at (90,90) was [255,0,0,255]
This test ensures that getImageData works correctly.
<div id="log"></div>
<script>
if (window.layoutTestController)
layoutTestController.dumpAsText();
var canvas = document.createElement("canvas");
canvas.width = 200;
canvas.height = 200;
var context = canvas.getContext("2d");
function log(msg){
document.getElementById("log").innerHTML += msg + "<br/>";
}
function dataToArray(data) {
var result = new Array(data.length)
for (var i = 0; i < data.length; i++)
result[i] = data[i];
return result;
}
function getPixel(ctx, x, y) {
var data = ctx.getImageData(x,y,1,1);
if (!data) // getImageData failed, which should never happen
return [-1,-1,-1,-1];
return dataToArray(data.data);
}
function pixelShouldBe(ctx, x, y, colour) {
var ctxColour = getPixel(ctx, x, y);
var correct = true;
for (var i = 0; i < 4; i++)
if (colour[i] != ctxColour[i]) {
correct = false;
break;
}
if (correct)
log("PASS: pixel at ("+[x,y]+") was ["+colour+"]");
else
log("FAIL: pixel at ("+[x,y]+") was ["+ctxColour+"], expected ["+colour+"]");
}
if (!context.setFillColor)
context.setFillColor = function(r,g,b,a) {
this.fillStyle = "rgba("+[Math.round(r*255),Math.round(g*255),Math.round(b*255),Math.round(a*255)]+")"
}
// Check that getImageData is return the data for the right portion of the image
for(var x = 0; x < 100; x+=4) {
context.setFillColor(0, x/96, 0, 1);
context.fillRect(x,0,1,1);
pixelShouldBe(context, x, 0, [0, Math.round(255*x/96), 0, 255]);
}
// Check rgba ordering
context.clearRect(0,0,100,100);
context.setFillColor(0.25, 0.5, 0.75, 1);
context.fillRect(5,5,1,1);
pixelShouldBe(context, 5, 5, [Math.round(0.25*255), Math.round(0.5*255), Math.round(0.75*255), 255]);
// Check that we return transparent black for regions outside the canvas proper
context.fillStyle = "rgba(255,255,255,255)";
context.fillRect(198, 5, 4, 1); // final 2 pixels horizontally should be clipped
var content = dataToArray(context.getImageData(198, 5, 4, 1).data);
var expected = [255,255,255,255,255,255,255,255,
0,0,0,0,0,0,0,0];
var matched = true;
for (var i = 0; i < 16; i++)
if (content[i] != expected[i]) {
matched = false;
break;
}
if (matched)
log("PASS: Correct data for content outside canvas bounds");
else
log("FAIL: Did not get correct data for content outside canvas bounds: "+content);
// Ensure returned values are not premultiplied
var values = [0,1,2,16,32,64,96,128,192,254,255];
// this function simply accounts for truncation due to premultiplication in the canvas implementation
function premult(value, alpha) {
return alpha ? Math.floor(Math.round(value*alpha/255)*255/alpha) : 0;
}
for (var i = 0; i < values.length; i++) {
for (var a = 0; a < values.length; a++) {
context.fillStyle = "rgba(" + [values[i], 0, 0, values[a]/255] +")";
context.fillRect(50+i*4,50+a*4,2,2);
pixelShouldBe(context, 50+i*4, 50+a*4, [premult(values[i], values[a]), 0, 0, values[a]]);
}
}
</script>
2008-02-22 Oliver Hunt <oliver@apple.com>
Reviewed by Sam W.
Support Canvas.getImageData and Canvas.createImageData
This patch adds support for all the pixel reading portions
of the HTML5 Canvas spec. There are two new types ImageData
and CanvasPixelArray which are used to provide the HTML5
ImageData object, and the required semantics for assignment
to the ImageData data array.
We only implement the CG version of ImageBuffer::getImageData,
but the logic is null safe, so this will not introduce any
crashes into other platforms, unfortunately it will result in
JS Object detection "lying" on non-CG platforms.
Tests: fast/canvas/canvas-ImageData-behaviour.html
fast/canvas/canvas-getImageData.html
* DerivedSources.make:
* GNUmakefile.am:
* WebCore.pro:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSCanvasPixelArrayCustom.cpp: Added.
(WebCore::JSCanvasPixelArray::indexGetter):
(WebCore::JSCanvasPixelArray::indexSetter):
(WebCore::toJS):
* bindings/js/JSCanvasRenderingContext2DCustom.cpp:
* bindings/scripts/CodeGeneratorJS.pm:
* html/CanvasPixelArray.cpp: Added.
(WebCore::CanvasPixelArray::create):
* html/CanvasPixelArray.h: Added.
(WebCore::CanvasPixelArray::data):
(WebCore::CanvasPixelArray::length):
(WebCore::CanvasPixelArray::set):
(WebCore::CanvasPixelArray::get):
* html/CanvasPixelArray.idl: Added.
* html/CanvasRenderingContext2D.cpp:
(WebCore::createEmptyImageData):
(WebCore::CanvasRenderingContext2D::createImageData):
(WebCore::CanvasRenderingContext2D::getImageData):
* html/CanvasRenderingContext2D.h:
* html/CanvasRenderingContext2D.idl:
* html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::convertLogicalToDevice):
(WebCore::HTMLCanvasElement::createImageBuffer):
* html/HTMLCanvasElement.h:
* html/ImageData.cpp: Added.
(WebCore::ImageData::create):
(WebCore::ImageData::ImageData):
* html/ImageData.h: Added.
(WebCore::ImageData::width):
(WebCore::ImageData::height):
(WebCore::ImageData::data):
* html/ImageData.idl: Added.
* platform/graphics/ImageBuffer.h:
* platform/graphics/cairo/ImageBufferCairo.cpp:
(WebCore::ImageBuffer::getImageData):
* platform/graphics/cg/ImageBufferCG.cpp:
(WebCore::ImageBuffer::getImageData):
* platform/graphics/qt/ImageBufferQt.cpp:
(WebCore::ImageBuffer::getImageData):
* platform/graphics/wx/ImageBufferWx.cpp:
(WebCore::ImageBuffer::getImageData):
2008-02-22 Sam Weinig <sam@webkit.org>
Rubber-stamped by Adam Roben.
......@@ -327,6 +327,7 @@ all : \
JSCSSValueList.h \
JSCanvasGradient.h \
JSCanvasPattern.h \
JSCanvasPixelArray.h \
JSCanvasRenderingContext2D.h \
JSCharacterData.h \
JSComment.h \
......@@ -414,6 +415,7 @@ all : \
JSHTMLUListElement.h \
JSHTMLVideoElement.h \
JSHistory.h \
JSImageData.h \
JSKeyboardEvent.h \
JSLocation.lut.h \
JSMediaError.h \
......
......@@ -88,6 +88,7 @@ webcore_built_sources += \
DerivedSources/JSCSSValueList.h \
DerivedSources/JSCanvasGradient.h \
DerivedSources/JSCanvasPattern.h \
DerivedSources/JSCanvasPixelArray.h \
DerivedSources/JSCanvasRenderingContext2D.h \
DerivedSources/JSCharacterData.h \
DerivedSources/JSComment.h \
......@@ -167,6 +168,7 @@ webcore_built_sources += \
DerivedSources/JSHTMLTitleElement.h \
DerivedSources/JSHTMLUListElement.h \
DerivedSources/JSHistory.h \
DerivedSources/JSImageData.h \
DerivedSources/JSKeyboardEvent.h \
DerivedSources/JSMediaList.h \
DerivedSources/JSMouseEvent.h \
......@@ -211,6 +213,7 @@ webcore_built_sources += \
DerivedSources/JSCSSValueList.cpp \
DerivedSources/JSCanvasGradient.cpp \
DerivedSources/JSCanvasPattern.cpp \
DerivedSources/JSCanvasPixelArray.cpp \
DerivedSources/JSCanvasRenderingContext2D.cpp \
DerivedSources/JSCharacterData.cpp \
DerivedSources/JSComment.cpp \
......@@ -290,6 +293,7 @@ webcore_built_sources += \
DerivedSources/JSHTMLTitleElement.cpp \
DerivedSources/JSHTMLUListElement.cpp \
DerivedSources/JSHistory.cpp \
DerivedSources/JSImageData.cpp \
DerivedSources/JSKeyboardEvent.cpp \
DerivedSources/JSMediaList.cpp \
DerivedSources/JSMouseEvent.cpp \
......@@ -448,6 +452,7 @@ webcore_headers += \
webcore_sources += \
WebCore/bindings/js/GCController.cpp \
WebCore/bindings/js/JSAttrCustom.cpp \
WebCore/bindings/js/JSCanvasPixelArrayCustom.cpp \
WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp \
WebCore/bindings/js/JSCSSRuleCustom.cpp \
WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp \
......@@ -659,6 +664,7 @@ webcore_sources += \
WebCore/history/PageCache.cpp \
WebCore/html/CanvasGradient.cpp \
WebCore/html/CanvasPattern.cpp \
WebCore/html/CanvasPixelArray.cpp \
WebCore/html/CanvasRenderingContext2D.cpp \
WebCore/html/CanvasStyle.cpp \
WebCore/html/FormDataList.cpp \
......@@ -738,6 +744,7 @@ webcore_sources += \
WebCore/html/HTMLTokenizer.cpp \
WebCore/html/HTMLUListElement.cpp \
WebCore/html/HTMLViewSourceDocument.cpp \
WebCore/html/ImageData.cpp \
WebCore/loader/Cache.cpp \
WebCore/loader/CachedCSSStyleSheet.cpp \
WebCore/loader/CachedFont.cpp \
......
......@@ -312,6 +312,7 @@ IDL_BINDINGS += \
dom/WheelEvent.idl \
html/CanvasGradient.idl \
html/CanvasPattern.idl \
html/CanvasPixelArray.idl \
html/CanvasRenderingContext2D.idl \
html/HTMLAnchorElement.idl \
html/HTMLAppletElement.idl \
......@@ -373,6 +374,7 @@ IDL_BINDINGS += \
html/HTMLTextAreaElement.idl \
html/HTMLTitleElement.idl \
html/HTMLUListElement.idl \
html/ImageData.idl \
page/BarInfo.idl \
page/Console.idl \
page/DOMSelection.idl \
......@@ -387,6 +389,7 @@ IDL_BINDINGS += \
SOURCES += \
bindings/js/GCController.cpp \
bindings/js/JSAttrCustom.cpp \
bindings/js/JSCanvasPixelArrayCustom.cpp \
bindings/js/JSCanvasRenderingContext2DCustom.cpp \
bindings/js/JSCSSRuleCustom.cpp \
bindings/js/JSCSSStyleDeclarationCustom.cpp \
......@@ -598,6 +601,7 @@ SOURCES += \
history/PageCache.cpp \
html/CanvasGradient.cpp \
html/CanvasPattern.cpp \
html/CanvasPixelArray.cpp \
html/CanvasRenderingContext2D.cpp \
html/CanvasStyle.cpp \
html/FormDataList.cpp \
......@@ -677,6 +681,7 @@ SOURCES += \
html/HTMLTokenizer.cpp \
html/HTMLUListElement.cpp \
html/HTMLViewSourceDocument.cpp \
html/ImageData.cpp \
loader/Cache.cpp \
loader/CachedCSSStyleSheet.cpp \
loader/CachedFont.cpp \
......
......@@ -340,6 +340,12 @@
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasPattern.h"
>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasPixelArray.cpp"
>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasPixelArray.h"
>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasRenderingContext2D.cpp"
>
......@@ -1124,6 +1130,13 @@
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLVideoElement.h"
>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSImageData.cpp"
>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSImageData.h"
>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSKeyboardEvent.cpp"
>
......@@ -6847,6 +6860,12 @@
<File
RelativePath="..\html\CanvasPattern.h"
>
<File
RelativePath="..\html\CanvasPixelArray.cpp"
>
<File
RelativePath="..\html\CanvasPixelArray.h"
>
</File>
<File
RelativePath="..\html\CanvasRenderingContext2D.cpp"
......@@ -7512,6 +7531,14 @@
RelativePath="..\html\HTMLViewSourceDocument.h"
>
</File>
<File
RelativePath="..\html\ImageData.cpp"
>
</File>
<File
RelativePath="..\html\ImageData.h"
>
</File>
<File
RelativePath="..\html\MediaError.h"
>
......@@ -7739,6 +7766,9 @@
RelativePath="..\bindings\js\JSHTMLSelectElementCustom.h"
>
</File>
<File
RelativePath="..\bindings\js\JSCanvasPixelArrayCustom.cpp"
>
<File
RelativePath="..\bindings\js\JSLocation.cpp"
>
......
......@@ -1707,6 +1707,17 @@
A71878900B2D04AC00A16ECE /* DragControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */; };
A7352C190B1BB89D00A986D0 /* RenderSVGBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7352C170B1BB89D00A986D0 /* RenderSVGBlock.cpp */; };
A7352C1A0B1BB89D00A986D0 /* RenderSVGBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = A7352C180B1BB89D00A986D0 /* RenderSVGBlock.h */; };
A766F3530D6BDE3500ABDDB3 /* JSCanvasPixelArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A766F3520D6BDE3500ABDDB3 /* JSCanvasPixelArrayCustom.cpp */; };
A77979160D6B9D0C003851B9 /* CanvasPixelArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A77979100D6B9D0C003851B9 /* CanvasPixelArray.cpp */; };
A77979170D6B9D0C003851B9 /* CanvasPixelArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A77979110D6B9D0C003851B9 /* CanvasPixelArray.h */; };
A77979180D6B9D0C003851B9 /* CanvasPixelArray.idl in Resources */ = {isa = PBXBuildFile; fileRef = A77979120D6B9D0C003851B9 /* CanvasPixelArray.idl */; };
A77979190D6B9D0C003851B9 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A77979130D6B9D0C003851B9 /* ImageData.cpp */; };
A779791A0D6B9D0C003851B9 /* ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = A77979140D6B9D0C003851B9 /* ImageData.h */; };
A779791B0D6B9D0C003851B9 /* ImageData.idl in Resources */ = {isa = PBXBuildFile; fileRef = A77979150D6B9D0C003851B9 /* ImageData.idl */; };
A77979260D6B9E64003851B9 /* JSCanvasPixelArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A77979220D6B9E64003851B9 /* JSCanvasPixelArray.cpp */; };
A77979270D6B9E64003851B9 /* JSCanvasPixelArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A77979230D6B9E64003851B9 /* JSCanvasPixelArray.h */; };
A77979280D6B9E64003851B9 /* JSImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A77979240D6B9E64003851B9 /* JSImageData.cpp */; };
A77979290D6B9E64003851B9 /* JSImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = A77979250D6B9E64003851B9 /* JSImageData.h */; };
A784941B0B5FE507001E237A /* Clipboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A784941A0B5FE507001E237A /* Clipboard.cpp */; };
A795463E0B5C4C80007B438F /* DragDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = A795463D0B5C4C80007B438F /* DragDataMac.mm */; };
A79546430B5C4CB4007B438F /* DragData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A79546420B5C4CB4007B438F /* DragData.cpp */; };
......@@ -5902,6 +5913,17 @@
A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragControllerMac.mm; sourceTree = "<group>"; };
A7352C170B1BB89D00A986D0 /* RenderSVGBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGBlock.cpp; sourceTree = "<group>"; };
A7352C180B1BB89D00A986D0 /* RenderSVGBlock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGBlock.h; sourceTree = "<group>"; };
A766F3520D6BDE3500ABDDB3 /* JSCanvasPixelArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCanvasPixelArrayCustom.cpp; sourceTree = "<group>"; };
A77979100D6B9D0C003851B9 /* CanvasPixelArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasPixelArray.cpp; sourceTree = "<group>"; };
A77979110D6B9D0C003851B9 /* CanvasPixelArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasPixelArray.h; sourceTree = "<group>"; };
A77979120D6B9D0C003851B9 /* CanvasPixelArray.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CanvasPixelArray.idl; sourceTree = "<group>"; };
A77979130D6B9D0C003851B9 /* ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = "<group>"; };