123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/core/SkData.h"
- #include "src/core/SkAutoPixmapStorage.h"
- SkAutoPixmapStorage::SkAutoPixmapStorage() : fStorage(nullptr) {}
- SkAutoPixmapStorage::~SkAutoPixmapStorage() {
- this->freeStorage();
- }
- SkAutoPixmapStorage& SkAutoPixmapStorage::operator=(SkAutoPixmapStorage&& other) {
- this->fStorage = other.fStorage;
- this->INHERITED::reset(other.info(), this->fStorage, other.rowBytes());
- other.fStorage = nullptr;
- other.INHERITED::reset();
- return *this;
- }
- size_t SkAutoPixmapStorage::AllocSize(const SkImageInfo& info, size_t* rowBytes) {
- size_t rb = info.minRowBytes();
- if (rowBytes) {
- *rowBytes = rb;
- }
- return info.computeByteSize(rb);
- }
- bool SkAutoPixmapStorage::tryAlloc(const SkImageInfo& info) {
- this->freeStorage();
- size_t rb;
- size_t size = AllocSize(info, &rb);
- if (SkImageInfo::ByteSizeOverflowed(size)) {
- return false;
- }
- void* pixels = sk_malloc_canfail(size);
- if (nullptr == pixels) {
- return false;
- }
- this->reset(info, pixels, rb);
- fStorage = pixels;
- return true;
- }
- void SkAutoPixmapStorage::alloc(const SkImageInfo& info) {
- SkASSERT_RELEASE(this->tryAlloc(info));
- }
- sk_sp<SkData> SkAutoPixmapStorage::detachPixelsAsData() {
- if (!fStorage) {
- return nullptr;
- }
- sk_sp<SkData> data = SkData::MakeFromMalloc(fStorage, this->computeByteSize());
- fStorage = nullptr;
- this->INHERITED::reset();
- return data;
- }
|