Add missing skia_surface.cpp file

This commit is contained in:
David Capello 2016-10-31 19:58:12 -03:00
parent fa28fcfb52
commit 80be429c89

View File

@ -0,0 +1,61 @@
// SHE library
// Copyright (C) 2016 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "she/skia/skia_surface.h"
#include "base/file_handle.h"
#include "SkCodec.h"
#include "SkPixelRef.h"
#include "SkStream.h"
namespace she {
sk_sp<SkColorSpace> SkiaSurface::m_colorSpace;
// static
Surface* SkiaSurface::loadSurface(const char* filename)
{
base::FileHandle fp(base::open_file_with_exception(filename, "rb"));
SkAutoTDelete<SkCodec> codec(
SkCodec::NewFromStream(
new SkFILEStream(fp.get(), SkFILEStream::kCallerRetains_Ownership)));
if (!codec)
return nullptr;
SkImageInfo info = codec->getInfo()
.makeColorType(kN32_SkColorType)
.makeAlphaType(kPremul_SkAlphaType)
.makeColorSpace(colorSpace());
SkBitmap bm;
if (!bm.tryAllocPixels(info))
return nullptr;
const SkCodec::Result r = codec->getPixels(info, bm.getPixels(), bm.rowBytes());
if (r != SkCodec::kSuccess)
return nullptr;
SkiaSurface* sur = new SkiaSurface();
sur->swapBitmap(bm);
return sur;
}
// static
sk_sp<SkColorSpace> SkiaSurface::colorSpace()
{
#if 0 // TODO Add support to different color spaces
if (!m_colorSpace)
m_colorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named);
#endif
return m_colorSpace;
}
} // namespace she