WebImageDecoder.cpp [plain text]
#include "config.h"
#include "WebImageDecoder.h"
#include "BMPImageDecoder.h"
#include "ICOImageDecoder.h"
#include "SharedBuffer.h"
#include "platform/WebData.h"
#include "platform/WebImage.h"
#include "platform/WebSize.h"
#if WEBKIT_USING_SKIA
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
#endif
#include <wtf/PassRefPtr.h>
using namespace WebCore;
namespace WebKit {
void WebImageDecoder::reset()
{
delete m_private;
}
void WebImageDecoder::init(Type type)
{
switch (type) {
case TypeBMP:
m_private = new BMPImageDecoder(ImageSource::AlphaPremultiplied, ImageSource::GammaAndColorProfileApplied);
break;
case TypeICO:
m_private = new ICOImageDecoder(ImageSource::AlphaPremultiplied, ImageSource::GammaAndColorProfileApplied);
break;
}
}
void WebImageDecoder::setData(const WebData& data, bool allDataReceived)
{
ASSERT(m_private);
m_private->setData(PassRefPtr<SharedBuffer>(data).get(), allDataReceived);
}
bool WebImageDecoder::isFailed() const
{
ASSERT(m_private);
return m_private->failed();
}
bool WebImageDecoder::isSizeAvailable() const
{
ASSERT(m_private);
return m_private->isSizeAvailable();
}
WebSize WebImageDecoder::size() const
{
ASSERT(m_private);
return m_private->size();
}
size_t WebImageDecoder::frameCount() const
{
ASSERT(m_private);
return m_private->frameCount();
}
bool WebImageDecoder::isFrameCompleteAtIndex(int index) const
{
ASSERT(m_private);
ImageFrame* const frameBuffer = m_private->frameBufferAtIndex(index);
if (!frameBuffer)
return false;
return (frameBuffer->status() == ImageFrame::FrameComplete);
}
WebImage WebImageDecoder::getFrameAtIndex(int index = 0) const
{
ASSERT(m_private);
ImageFrame* const frameBuffer = m_private->frameBufferAtIndex(index);
if (!frameBuffer)
return WebImage();
#if WEBKIT_USING_SKIA
OwnPtr<NativeImageSkia> image = adoptPtr(frameBuffer->asNewNativeImage());
return WebImage(image->bitmap());
#elif WEBKIT_USING_CG
return WebImage(frameBuffer->asNewNativeImage());
#endif
}
}