m_client->createTile(m_ID, updateInfo, m_rect);
}
-void TiledBackingStoreRemoteTileBufferTizen::copyDirtyRect(unsigned char* dst, unsigned char* src, const IntRect& wholeRect, const IntRect& dirtyRect)
-{
- unsigned int offset = 4 * wholeRect.width() * (dirtyRect.y() - wholeRect.y()) + 4 * (dirtyRect.x() - wholeRect.x());
-
- //FIXME : Now, handling row datas directly performs better than using Cairo APIs.
- //This will be replaced to Cairo APIs if using Cairo APIs perform better.
-
- for (int i = 0; i < dirtyRect.height(); i++) {
- memcpy(dst + offset, src + (4 * i * dirtyRect.width()), 4 * dirtyRect.width());
- offset += 4* wholeRect.width();
- }
-}
-
bool TiledBackingStoreRemoteTileBufferTizen::copyPreviousFrame(unsigned char* dst, int platformSurfaceID, const IntRect& wholeRect, const IntRect& clipRect)
{
SharedPlatformSurfaceTizen* backupSurface;
}
unsigned char* dstBuffer;
- unsigned char* dirtyBuffer;
RefPtr<cairo_surface_t> dstSurface, dirtySurface;
RefPtr<cairo_t> dstBitmapContext, dirtyBitmapContext;
OwnPtr<WebCore::GraphicsContext> graphicsContext;
}
if (canPartiallyUpdate) {
- dirtyBuffer = (unsigned char*) malloc(4 * dirtyRect.width() * dirtyRect.height());
- dirtySurface = adoptRef(cairo_image_surface_create_for_data(dirtyBuffer, CAIRO_FORMAT_ARGB32, dirtyRect.width(), dirtyRect.height(), 4 * dirtyRect.width()));
+ dirtySurface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, dirtyRect.width(), dirtyRect.height()));
dirtyBitmapContext = adoptRef(cairo_create(dirtySurface.get()));
graphicsContext = adoptPtr(new GraphicsContext(dirtyBitmapContext.get()));
graphicsContext->clearRect(WebCore::FloatRect(WebCore::FloatPoint(0, 0), dirtyRect.size()));
m_tiledBackingStore->client()->tiledBackingStorePaint(graphicsContext.get(), m_tiledBackingStore->mapToContents(paintRect));
if (canPartiallyUpdate) {
- copyDirtyRect(dstBuffer, dirtyBuffer, IntRect(m_rect.location(), sharedPlatformSurface->size()), dirtyRect);
dstBitmapContext = adoptRef(cairo_create(dstSurface.get()));
- free(dirtyBuffer);
+ cairo_set_source_surface(dstBitmapContext.get(), dirtySurface.get(), dirtyRect.x() - m_rect.x(), dirtyRect.y() - m_rect.y());
+ cairo_rectangle(dstBitmapContext.get(), dirtyRect.x() - m_rect.x(), dirtyRect.y() - m_rect.y(), dirtyRect.width(), dirtyRect.height());
+ cairo_fill(dstBitmapContext.get());
dirtySurface.release();
dirtyBitmapContext.release();
}