Changeset 106836 in webkit
- Timestamp:
- Feb 6, 2012 12:54:13 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r106833 r106836 1 2012-02-06 Matthew Delaney <mdelaney@apple.com> 2 3 toDataURL() uses stale data after putImageData() 4 https://bugs.webkit.org/show_bug.cgi?id=65767 5 6 This patch fixes the issue we've encountered of getting back 7 stale copies of the CGContext of accelerated ImageBuffers who have seen 8 putImageData calls but have not been drawn into via the CG API. 9 This issue is fixed by modifying the way we implement putImageData 10 in ImageBufferCG to draw the bits wrapped in a CGImage while the CGContext 11 is in a state where the data will effectively be copied (as is needed for 12 implementing putImageData) instead of directly modifying the bits of the IOSurface. 13 14 Reviewed by Chris Marrin. 15 16 Test: fast/canvas/check-stale-putImageData, pixel test to check that the canvas is in fact painted. 17 18 * platform/graphics/cg/ImageBufferCG.cpp: Implement new way of putting image data. 19 * platform/graphics/ImageBuffer.h: Merged two previously separate put data calls 20 into a single and more sensibly named 'putByteArray', since that's what it does! 21 22 * WebCore.exp.in: Added new WKSI call for use in ImageBufferCG.cpp 23 * platform/mac/WebCoreSystemInterface.h: 24 * platform/mac/WebCoreSystemInterface.mm: 25 26 Using new method name. 27 * html/canvas/CanvasRenderingContext2D.cpp: 28 * platform/graphics/ImageBuffer.cpp: 29 * platform/graphics/ShadowBlur.cpp: 30 * platform/graphics/filters/FEColorMatrix.cpp: 31 * platform/graphics/filters/FEDropShadow.cpp: 32 * platform/graphics/filters/FilterEffect.cpp: 33 34 Updated other ports' ImageBuffers to use new method. 35 * platform/graphics/cairo/ImageBufferCairo.cpp: 36 * platform/graphics/qt/ImageBufferQt.cpp: 37 * platform/graphics/skia/ImageBufferSkia.cpp: 38 * platform/graphics/wince/ImageBufferWinCE.cpp: 39 * platform/graphics/wx/ImageBufferWx.cpp: 40 1 41 2012-02-06 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> 2 42 -
trunk/Source/WebCore/WebCore.exp.in
r106752 r106836 1488 1488 _wkAdvanceDefaultButtonPulseAnimation 1489 1489 _wkCGContextGetShouldSmoothFonts 1490 _wkCGContextResetClip 1490 1491 _wkCGPatternCreateWithImageAndTransform 1491 1492 _wkCopyCFLocalizationPreferredName -
trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
r106729 r106836 1972 1972 sourceRect.move(-destOffset); 1973 1973 1974 buffer->put UnmultipliedImageData(data->data()->data(), IntSize(data->width(), data->height()), sourceRect, IntPoint(destOffset));1974 buffer->putByteArray(Unmultiplied, data->data()->data(), IntSize(data->width(), data->height()), sourceRect, IntPoint(destOffset)); 1975 1975 didDraw(destRect, CanvasDidDrawApplyNone); // ignore transform, shadow and clip 1976 1976 } -
trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp
r95901 r106836 87 87 srcPixelArray->set(pixelOffset + 3, luma); 88 88 } 89 put UnmultipliedImageData(srcPixelArray.get(), luminanceRect.size(), luminanceRect, IntPoint());89 putByteArray(Unmultiplied, srcPixelArray.get(), luminanceRect.size(), luminanceRect, IntPoint()); 90 90 } 91 91 -
trunk/Source/WebCore/platform/graphics/ImageBuffer.h
r106500 r106836 102 102 PassRefPtr<ByteArray> getPremultipliedImageData(const IntRect&) const; 103 103 104 void putUnmultipliedImageData(ByteArray*, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint); 105 void putPremultipliedImageData(ByteArray*, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint); 104 void putByteArray(Multiply multiplied, ByteArray*, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint); 106 105 107 106 void convertToLuminanceMask(); -
trunk/Source/WebCore/platform/graphics/ShadowBlur.cpp
r95901 r106836 829 829 RefPtr<ByteArray> layerData = m_layerImage->getUnmultipliedImageData(blurRect); 830 830 blurLayerImage(layerData->data(), blurRect.size(), blurRect.width() * 4); 831 m_layerImage->put UnmultipliedImageData(layerData.get(), blurRect.size(), blurRect, IntPoint());831 m_layerImage->putByteArray(Unmultiplied, layerData.get(), blurRect.size(), blurRect, IntPoint()); 832 832 } 833 833 -
trunk/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp
r106500 r106836 205 205 } 206 206 207 template <Multiply multiplied> 208 void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, ImageBufferData& data, const IntSize& size) 209 { 210 ASSERT(cairo_surface_get_type(data.m_surface) == CAIRO_SURFACE_TYPE_IMAGE); 211 212 unsigned char* dataDst = cairo_image_surface_get_data(data.m_surface); 207 void ImageBuffer::putByteArray(Multiply multiplied, ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 208 { 209 ASSERT(cairo_surface_get_type(m_data.m_surface) == CAIRO_SURFACE_TYPE_IMAGE); 210 211 unsigned char* dataDst = cairo_image_surface_get_data(m_data.m_surface); 213 212 214 213 ASSERT(sourceRect.width() > 0); … … 218 217 int destx = destPoint.x() + sourceRect.x(); 219 218 ASSERT(destx >= 0); 220 ASSERT(destx < size.width());219 ASSERT(destx < m_size.width()); 221 220 ASSERT(originx >= 0); 222 221 ASSERT(originx <= sourceRect.maxX()); 223 222 224 223 int endx = destPoint.x() + sourceRect.maxX(); 225 ASSERT(endx <= size.width());224 ASSERT(endx <= m_size.width()); 226 225 227 226 int numColumns = endx - destx; … … 230 229 int desty = destPoint.y() + sourceRect.y(); 231 230 ASSERT(desty >= 0); 232 ASSERT(desty < size.height());231 ASSERT(desty < m_size.height()); 233 232 ASSERT(originy >= 0); 234 233 ASSERT(originy <= sourceRect.maxY()); 235 234 236 235 int endy = destPoint.y() + sourceRect.maxY(); 237 ASSERT(endy <= size.height());236 ASSERT(endy <= m_size.height()); 238 237 int numRows = endy - desty; 239 238 240 239 unsigned srcBytesPerRow = 4 * sourceSize.width(); 241 int stride = cairo_image_surface_get_stride( data.m_surface);240 int stride = cairo_image_surface_get_stride(m_data.m_surface); 242 241 243 242 unsigned char* srcRows = source->data() + originy * srcBytesPerRow + originx * 4; … … 258 257 srcRows += srcBytesPerRow; 259 258 } 260 cairo_surface_mark_dirty_rectangle (data.m_surface,259 cairo_surface_mark_dirty_rectangle(m_data.m_surface, 261 260 destx, desty, 262 261 numColumns, numRows); 263 }264 265 void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)266 {267 putImageData<Unmultiplied>(source, sourceSize, sourceRect, destPoint, m_data, m_size);268 }269 270 void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)271 {272 putImageData<Premultiplied>(source, sourceSize, sourceRect, destPoint, m_data, m_size);273 262 } 274 263 -
trunk/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp
r106500 r106836 308 308 } 309 309 310 void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 311 { 312 if (m_context->isAcceleratedContext()) { 313 CGContextFlush(context()->platformContext()); 314 #if defined(BUILDING_ON_LION) 315 m_data.m_lastFlushTime = currentTimeMS(); 316 #endif 317 } 318 m_data.putData(source, sourceSize, sourceRect, destPoint, m_size, m_context->isAcceleratedContext(), true); 319 } 320 321 void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 322 { 323 if (m_context->isAcceleratedContext()) { 324 CGContextFlush(context()->platformContext()); 325 #if defined(BUILDING_ON_LION) 326 m_data.m_lastFlushTime = currentTimeMS(); 327 #endif 328 } 329 m_data.putData(source, sourceSize, sourceRect, destPoint, m_size, m_context->isAcceleratedContext(), false); 310 void ImageBuffer::putByteArray(Multiply multiplied, ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 311 { 312 if (!m_context->isAcceleratedContext()) { 313 m_data.putData(source, sourceSize, sourceRect, destPoint, m_size, m_context->isAcceleratedContext(), multiplied == Unmultiplied); 314 return; 315 } 316 317 // Make a copy of the source to ensure the bits don't change before being drawn 318 IntSize sourceCopySize(sourceRect.width(), sourceRect.height()); 319 OwnPtr<ImageBuffer> sourceCopy = ImageBuffer::create(sourceCopySize, ColorSpaceDeviceRGB, Unaccelerated); 320 if (!sourceCopy) 321 return; 322 sourceCopy->m_data.putData(source, sourceSize, sourceRect, IntPoint(-sourceRect.x(), -sourceRect.y()), sourceCopy->size(), sourceCopy->context()->isAcceleratedContext(), multiplied == Unmultiplied); 323 324 // Set up context for using drawImage as a direct bit copy 325 CGContextRef destContext = context()->platformContext(); 326 CGContextSaveGState(destContext); 327 CGContextConcatCTM(destContext, AffineTransform(CGContextGetCTM(destContext)).inverse()); 328 wkCGContextResetClip(destContext); 329 CGContextSetInterpolationQuality(destContext, kCGInterpolationNone); 330 CGContextSetAlpha(destContext, 1.0); 331 CGContextSetBlendMode(destContext, kCGBlendModeCopy); 332 CGContextSetShadowWithColor(destContext, CGSizeZero, 0, 0); 333 334 // Draw the image in CG coordinate space 335 IntPoint destPointInCGCoords(destPoint.x() + sourceRect.x(), m_size.height() - (destPoint.y()+sourceRect.y()) - sourceRect.height()); 336 IntRect destRectInCGCoords(destPointInCGCoords, sourceCopySize); 337 RetainPtr<CGImageRef> sourceCopyImage(AdoptCF, sourceCopy->copyNativeImage()); 338 CGContextDrawImage(destContext, destRectInCGCoords, sourceCopyImage.get()); 339 CGContextRestoreGState(destContext); 330 340 } 331 341 -
trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp
r97853 r106836 188 188 } 189 189 190 resultImage->put UnmultipliedImageData(pixelArray.get(), imageRect.size(), imageRect, IntPoint());190 resultImage->putByteArray(Unmultiplied, pixelArray.get(), imageRect.size(), imageRect, IntPoint()); 191 191 } 192 192 -
trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp
r103076 r106836 109 109 contextShadow.blurLayerImage(srcPixelArray->data(), shadowArea.size(), 4 * shadowArea.size().width()); 110 110 111 resultImage->put PremultipliedImageData(srcPixelArray.get(), shadowArea.size(), shadowArea, IntPoint());111 resultImage->putByteArray(Premultiplied, srcPixelArray.get(), shadowArea.size(), shadowArea, IntPoint()); 112 112 113 113 resultContext->setCompositeOperation(CompositeSourceIn); -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
r104566 r106836 131 131 IntRect destinationRect(IntPoint(), m_absolutePaintRect.size()); 132 132 if (m_premultipliedImageResult) 133 m_imageBufferResult->put PremultipliedImageData(m_premultipliedImageResult.get(), destinationRect.size(), destinationRect, IntPoint());133 m_imageBufferResult->putByteArray(Premultiplied, m_premultipliedImageResult.get(), destinationRect.size(), destinationRect, IntPoint()); 134 134 else 135 m_imageBufferResult->put UnmultipliedImageData(m_unmultipliedImageResult.get(), destinationRect.size(), destinationRect, IntPoint());135 m_imageBufferResult->putByteArray(Unmultiplied, m_unmultipliedImageResult.get(), destinationRect.size(), destinationRect, IntPoint()); 136 136 return m_imageBufferResult.get(); 137 137 } -
trunk/Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp
r106804 r106836 302 302 } 303 303 304 template <Multiply multiplied> 305 void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, ImageBufferData& data, const IntSize& size) 304 void ImageBuffer::putByteArray(Multiply multiplied, ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 306 305 { 307 306 ASSERT(sourceRect.width() > 0); … … 311 310 int destx = destPoint.x() + sourceRect.x(); 312 311 ASSERT(destx >= 0); 313 ASSERT(destx < size.width());312 ASSERT(destx < m_size.width()); 314 313 ASSERT(originx >= 0); 315 314 ASSERT(originx <= sourceRect.maxX()); 316 315 317 316 int endx = destPoint.x() + sourceRect.maxX(); 318 ASSERT(endx <= size.width());317 ASSERT(endx <= m_size.width()); 319 318 320 319 int numColumns = endx - destx; … … 323 322 int desty = destPoint.y() + sourceRect.y(); 324 323 ASSERT(desty >= 0); 325 ASSERT(desty < size.height());324 ASSERT(desty < m_size.height()); 326 325 ASSERT(originy >= 0); 327 326 ASSERT(originy <= sourceRect.maxY()); 328 327 329 328 int endy = destPoint.y() + sourceRect.maxY(); 330 ASSERT(endy <= size.height());329 ASSERT(endy <= m_size.height()); 331 330 int numRows = endy - desty; 332 331 … … 362 361 } 363 362 364 bool isPainting = data.m_painter->isActive();363 bool isPainting = m_data.m_painter->isActive(); 365 364 if (!isPainting) 366 data.m_painter->begin(&data.m_pixmap);365 m_data.m_painter->begin(&m_data.m_pixmap); 367 366 else { 368 data.m_painter->save();367 m_data.m_painter->save(); 369 368 370 369 // putImageData() should be unaffected by painter state 371 data.m_painter->resetTransform();372 data.m_painter->setOpacity(1.0);373 data.m_painter->setClipping(false);374 } 375 376 data.m_painter->setCompositionMode(QPainter::CompositionMode_Source);377 data.m_painter->drawImage(destx, desty, image);370 m_data.m_painter->resetTransform(); 371 m_data.m_painter->setOpacity(1.0); 372 m_data.m_painter->setClipping(false); 373 } 374 375 m_data.m_painter->setCompositionMode(QPainter::CompositionMode_Source); 376 m_data.m_painter->drawImage(destx, desty, image); 378 377 379 378 if (!isPainting) 380 data.m_painter->end();379 m_data.m_painter->end(); 381 380 else 382 data.m_painter->restore(); 383 } 384 385 void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 386 { 387 putImageData<Unmultiplied>(source, sourceSize, sourceRect, destPoint, m_data, m_size); 388 } 389 390 void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 391 { 392 putImageData<Premultiplied>(source, sourceSize, sourceRect, destPoint, m_data, m_size); 381 m_data.m_painter->restore(); 393 382 } 394 383 -
trunk/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
r106670 r106836 276 276 } 277 277 278 template <Multiply multiplied> 279 void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, 280 SkCanvas* canvas, const IntSize& size) 281 { 278 void ImageBuffer::putByteArray(Multiply multiplied, ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 279 { 280 SkCanvas* canvas = context()->platformContext()->canvas(); 282 281 ASSERT(sourceRect.width() > 0); 283 282 ASSERT(sourceRect.height() > 0); … … 286 285 int destX = destPoint.x() + sourceRect.x(); 287 286 ASSERT(destX >= 0); 288 ASSERT(destX < size.width());287 ASSERT(destX < m_size.width()); 289 288 ASSERT(originX >= 0); 290 289 ASSERT(originX < sourceRect.maxX()); 291 290 292 291 int endX = destPoint.x() + sourceRect.maxX(); 293 ASSERT(endX <= size.width());292 ASSERT(endX <= m_size.width()); 294 293 295 294 int numColumns = endX - destX; … … 298 297 int destY = destPoint.y() + sourceRect.y(); 299 298 ASSERT(destY >= 0); 300 ASSERT(destY < size.height());299 ASSERT(destY < m_size.height()); 301 300 ASSERT(originY >= 0); 302 301 ASSERT(originY < sourceRect.maxY()); 303 302 304 303 int endY = destPoint.y() + sourceRect.maxY(); 305 ASSERT(endY <= size.height());304 ASSERT(endY <= m_size.height()); 306 305 int numRows = endY - destY; 307 306 … … 318 317 319 318 canvas->writePixels(srcBitmap, destX, destY, config8888); 320 }321 322 void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)323 {324 putImageData<Unmultiplied>(source, sourceSize, sourceRect, destPoint, context()->platformContext()->canvas(), m_size);325 }326 327 void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)328 {329 putImageData<Premultiplied>(source, sourceSize, sourceRect, destPoint, context()->platformContext()->canvas(), m_size);330 319 } 331 320 -
trunk/Source/WebCore/platform/graphics/wince/ImageBufferWinCE.cpp
r106500 r106836 184 184 } 185 185 186 template <bool premultiplied> 187 static void putImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, SharedBitmap* bitmap) 188 { 186 void ImageBuffer::putByteArray(Multiply multiplied, ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 187 { 188 SharedBitmap* bitmap = m_data.m_bitmap.get(); 189 189 unsigned char* dst = (unsigned char*)bitmap->bytes(); 190 190 if (!dst) … … 212 212 int blue = *src++; 213 213 int alpha = *src++; 214 if ( premultiplied) {214 if (multiplied == Premultiplied) { 215 215 *dst++ = static_cast<unsigned char>(blue * 255 / alpha); 216 216 *dst++ = static_cast<unsigned char>(green * 255 / alpha); … … 229 229 } 230 230 231 void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)232 {233 putImageData<false>(source, sourceSize, sourceRect, destPoint, m_data.m_bitmap.get());234 }235 236 void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)237 {238 putImageData<true>(source, sourceSize, sourceRect, destPoint, m_data.m_bitmap.get());239 }240 241 231 void ImageBuffer::platformTransformColorSpace(const Vector<int>& lookUpTable) 242 232 { -
trunk/Source/WebCore/platform/graphics/wx/ImageBufferWx.cpp
r106500 r106836 73 73 } 74 74 75 void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 76 { 77 notImplemented(); 78 } 79 80 void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 75 void ImageBuffer::putByteArray(Multiply multiplied, ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint) 81 76 { 82 77 notImplemented(); -
trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h
r106091 r106836 114 114 } wkPatternTiling; 115 115 extern CGPatternRef (*wkCGPatternCreateWithImageAndTransform)(CGImageRef, CGAffineTransform, int); 116 extern void (*wkCGContextResetClip)(CGContextRef); 116 117 extern CFReadStreamRef (*wkCreateCustomCFReadStream)(void *(*formCreate)(CFReadStreamRef, void *), 117 118 void (*formFinalize)(CFReadStreamRef, void *), -
trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
r105234 r106836 133 133 CTTypesetterRef (*wkCreateCTTypesetterWithUniCharProviderAndOptions)(const UniChar* (*provide)(CFIndex stringIndex, CFIndex* charCount, CFDictionaryRef* attributes, void*), void (*dispose)(const UniChar* chars, void*), void*, CFDictionaryRef options); 134 134 135 void (*wkCGContextResetClip)(CGContextRef); 135 136 CGContextRef (*wkIOSurfaceContextCreate)(IOSurfaceRef surface, unsigned width, unsigned height, CGColorSpaceRef colorSpace); 136 137 CGImageRef (*wkIOSurfaceContextCreateImage)(CGContextRef context); -
trunk/Source/WebKit/chromium/ChangeLog
r106833 r106836 1 2012-02-06 Matthew Delaney <mdelaney@apple.com> 2 3 toDataURL() uses stale data after putImageData() 4 https://bugs.webkit.org/show_bug.cgi?id=65767 5 6 Reviewed by Chris Marrin. 7 8 * src/WebViewImpl.cpp: Updated method name. 9 (WebKit::WebViewImpl::doPixelReadbackToCanvas): 10 1 11 2012-02-06 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> 2 12 -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r106401 r106836 1207 1207 if (imageBuffer && pixelArray) { 1208 1208 m_layerTreeHost->compositeAndReadback(pixelArray->data(), invertRect); 1209 imageBuffer->put PremultipliedImageData(pixelArray.get(), rect.size(), IntRect(IntPoint(), rect.size()), IntPoint());1209 imageBuffer->putByteArray(Premultiplied, pixelArray.get(), rect.size(), IntRect(IntPoint(), rect.size()), IntPoint()); 1210 1210 gc.save(); 1211 1211 gc.translate(IntSize(0, bitmapHeight)); -
trunk/Source/WebKit/mac/ChangeLog
r106695 r106836 1 2012-02-06 Matthew Delaney <mdelaney@apple.com> 2 3 toDataURL() uses stale data after putImageData() 4 https://bugs.webkit.org/show_bug.cgi?id=65767 5 6 Reviewed by Chris Marrin. 7 8 * WebCoreSupport/WebSystemInterface.mm: 9 1 10 2012-02-03 Antti Koivisto <antti@apple.com> 2 11 -
trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
r105234 r106836 46 46 INIT(CGContextGetShouldSmoothFonts); 47 47 INIT(CGPatternCreateWithImageAndTransform); 48 INIT(CGContextResetClip); 48 49 INIT(CopyCFLocalizationPreferredName); 49 50 INIT(CopyCONNECTProxyResponse); -
trunk/Source/WebKit2/ChangeLog
r106824 r106836 1 2012-02-06 Matthew Delaney <mdelaney@apple.com> 2 3 toDataURL() uses stale data after putImageData() 4 https://bugs.webkit.org/show_bug.cgi?id=65767 5 6 Reviewed by Chris Marrin. 7 8 * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: 9 (InitWebCoreSystemInterface): 10 1 11 2012-02-06 Ryosuke Niwa <rniwa@webkit.org> 2 12 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
r105234 r106836 41 41 INIT(CGContextGetShouldSmoothFonts); 42 42 INIT(CGPatternCreateWithImageAndTransform); 43 INIT(CGContextResetClip); 43 44 INIT(CopyCONNECTProxyResponse); 44 45 INIT(CopyNSURLResponseStatusLine); -
trunk/WebKitLibraries/ChangeLog
r106593 r106836 1 2012-02-06 Matthew Delaney <mdelaney@apple.com> 2 3 toDataURL() uses stale data after putImageData() 4 https://bugs.webkit.org/show_bug.cgi?id=65767 5 6 Added WKCGContextResetClip for use in reseting clip for new putByteArray method. 7 8 Reviewed by Chris Marrin. 9 10 * WebKitSystemInterface.h: Added WKCGContextResetClip. 11 * libWebKitSystemInterfaceLeopard.a: 12 * libWebKitSystemInterfaceSnowLeopard.a: 13 * libWebKitSystemInterfaceLion.a: 14 1 15 2012-02-02 Chris Marrin <cmarrin@apple.com> 2 16 -
trunk/WebKitLibraries/WebKitSystemInterface.h
r100033 r106836 455 455 456 456 #endif 457 457 458 #if !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) 459 NSString *WKGetMacOSXVersionString(void); 460 #endif 461 458 462 #ifdef __cplusplus 459 463 }
Note: See TracChangeset
for help on using the changeset viewer.