// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/gfx/image/image_png_rep.h"

#include "base/logging.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/codec/png_codec.h"
#include "ui/gfx/geometry/size.h"

namespace gfx {

ImagePNGRep::ImagePNGRep() = default;

ImagePNGRep::ImagePNGRep(const scoped_refptr<base::RefCountedMemory>& data,
                         float data_scale)
    : raw_data(data),
      scale(data_scale) {
}

ImagePNGRep::ImagePNGRep(const ImagePNGRep& other) = default;

ImagePNGRep::~ImagePNGRep() {
}

gfx::Size ImagePNGRep::Size() const {
  // The only way to get the width and height of a raw PNG stream, at least
  // using the gfx::PNGCodec API, is to decode the whole thing.
  CHECK(raw_data.get());
  SkBitmap bitmap;
  if (!gfx::PNGCodec::Decode(raw_data->front(), raw_data->size(),
                             &bitmap)) {
    LOG(ERROR) << "Unable to decode PNG.";
    return gfx::Size(0, 0);
  }
  return gfx::Size(bitmap.width(), bitmap.height());
}

}  // namespace gfx
