TextureMapperTile.cpp [plain text]
#include "config.h"
#if USE(TEXTURE_MAPPER)
#include "TextureMapperTile.h"
#include "Image.h"
#include "TextureMapper.h"
#include <wtf/RefPtr.h>
namespace WebCore {
class GraphicsLayer;
void TextureMapperTile::updateContents(TextureMapper* textureMapper, Image* image, const IntRect& dirtyRect, BitmapTexture::UpdateContentsFlag updateContentsFlag)
{
IntRect targetRect = enclosingIntRect(m_rect);
targetRect.intersect(dirtyRect);
if (targetRect.isEmpty())
return;
IntPoint sourceOffset = targetRect.location();
sourceOffset.move(-dirtyRect.x(), -dirtyRect.y());
targetRect.move(-m_rect.x(), -m_rect.y());
if (!m_texture) {
m_texture = textureMapper->createTexture();
m_texture->reset(targetRect.size(), image->currentFrameKnownToBeOpaque() ? 0 : BitmapTexture::SupportsAlpha);
}
m_texture->updateContents(image, targetRect, sourceOffset, updateContentsFlag);
}
void TextureMapperTile::updateContents(TextureMapper* textureMapper, GraphicsLayer* sourceLayer, const IntRect& dirtyRect, BitmapTexture::UpdateContentsFlag updateContentsFlag)
{
IntRect targetRect = enclosingIntRect(m_rect);
targetRect.intersect(dirtyRect);
if (targetRect.isEmpty())
return;
IntPoint sourceOffset = targetRect.location();
targetRect.move(-m_rect.x(), -m_rect.y());
if (!m_texture) {
m_texture = textureMapper->createTexture();
m_texture->reset(targetRect.size(), BitmapTexture::SupportsAlpha);
}
m_texture->updateContents(textureMapper, sourceLayer, targetRect, sourceOffset, updateContentsFlag);
}
void TextureMapperTile::paint(TextureMapper* textureMapper, const TransformationMatrix& transform, float opacity, const unsigned exposedEdges)
{
if (texture().get())
textureMapper->drawTexture(*texture().get(), rect(), transform, opacity, exposedEdges);
}
} #endif