// 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/size.h"

namespace gfx {

ImagePNGRep::ImagePNGRep()
    : raw_data(NULL),
      scale(1.0) {
}

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

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
