WebImageDecoder.cpp [plain text]
#include "config.h"
#include "WebImageDecoder.h"
#include "BMPImageDecoder.h"
#include "ICOImageDecoder.h"
#include "SharedBuffer.h"
#include "WebData.h"
#include "WebImage.h"
#include "WebSize.h"
#if WEBKIT_USING_SKIA
#include <wtf/OwnPtr.h>
#include <wtf/PassRefPtr.h>
#endif
using namespace WebCore;
namespace WebKit {
void WebImageDecoder::reset()
{
delete m_private;
}
void WebImageDecoder::init(Type type)
{
switch (type) {
case TypeBMP:
m_private = new BMPImageDecoder();
break;
case TypeICO:
m_private = new ICOImageDecoder();
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);
RGBA32Buffer* const frameBuffer = m_private->frameBufferAtIndex(index);
if (!frameBuffer)
return false;
return (frameBuffer->status() == RGBA32Buffer::FrameComplete);
}
WebImage WebImageDecoder::getFrameAtIndex(int index = 0) const
{
ASSERT(m_private);
RGBA32Buffer* const frameBuffer = m_private->frameBufferAtIndex(index);
if (!frameBuffer)
return WebImage();
#if WEBKIT_USING_SKIA
OwnPtr<NativeImageSkia>image(frameBuffer->asNewNativeImage());
return WebImage(*image);
#elif WEBKIT_USING_CG
return WebImage(frameBuffer->asNewNativeImage());
#endif
}
}