PassOwnPtr<GraphicsContext> UpdateAtlas::beginPaintingOnAvailableBuffer(uint32_t& atlasID, const IntSize& size, IntPoint& offset) { m_inactivityInSeconds = 0; buildLayoutIfNeeded(); IntRect rect = m_areaAllocator->allocate(size); // No available buffer was found, returning null. if (rect.isEmpty()) return PassOwnPtr<GraphicsContext>(); if (!m_surface) return PassOwnPtr<GraphicsContext>(); atlasID = m_ID; // FIXME: Use tri-state buffers, to allow faster updates. offset = rect.location(); OwnPtr<GraphicsContext> graphicsContext = m_surface->createGraphicsContext(rect); if (supportsAlpha()) { graphicsContext->setCompositeOperation(CompositeCopy); graphicsContext->fillRect(IntRect(IntPoint::zero(), size), Color::transparent, ColorSpaceDeviceRGB); graphicsContext->setCompositeOperation(CompositeSourceOver); } return graphicsContext.release(); }
void TiledBackingStore::setSupportsAlpha(bool a) { if (a == supportsAlpha()) return; m_supportsAlpha = a; invalidate(contentsRect()); }
void TiledBackingStore::setSupportsAlpha(bool a) { if (a == supportsAlpha()) return; m_supportsAlpha = a; invalidate(m_rect); }
bool UpdateAtlas::paintOnAvailableBuffer(const IntSize& size, uint32_t& atlasID, IntPoint& offset, CoordinatedSurface::Client& client) { m_inactivityInSeconds = 0; buildLayoutIfNeeded(); IntRect rect = m_areaAllocator->allocate(size); // No available buffer was found. if (rect.isEmpty()) return false; if (!m_surface) return false; atlasID = m_ID; // FIXME: Use tri-state buffers, to allow faster updates. offset = rect.location(); UpdateAtlasSurfaceClient surfaceClient(client, size, supportsAlpha()); m_surface->paintToSurface(rect, surfaceClient); return true; }