// Copyright 2011 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.

#ifndef CC_RESOURCES_CONTENT_LAYER_UPDATER_H_
#define CC_RESOURCES_CONTENT_LAYER_UPDATER_H_

#include "cc/base/cc_export.h"
#include "cc/resources/layer_updater.h"
#include "ui/gfx/geometry/rect.h"

class SkCanvas;

namespace cc {

class LayerPainter;
class RenderingStatsInstrumentation;

// Base class for BitmapContentLayerUpdater and
// SkPictureContentLayerUpdater that reduces code duplication between
// their respective PaintContents implementations.
class CC_EXPORT ContentLayerUpdater : public LayerUpdater {
 public:
  void SetOpaque(bool opaque) override;
  void SetFillsBoundsCompletely(bool fills_bounds) override;
  void SetBackgroundColor(SkColor background_color) override;

 protected:
  ContentLayerUpdater(scoped_ptr<LayerPainter> painter, int layer_id);
  ~ContentLayerUpdater() override;

  // Paints the contents. |content_size| size of the underlying layer in
  // layer's content space. |paint_rect| bounds to paint in content space of the
  // layer. Both |content_size| and |paint_rect| are in pixels.
  void PaintContents(SkCanvas* canvas,
                     const gfx::Size& layer_content_size,
                     const gfx::Rect& paint_rect,
                     float contents_width_scale,
                     float contents_height_scale);
  gfx::Rect paint_rect() const { return paint_rect_; }

  bool layer_is_opaque() const { return layer_is_opaque_; }
  bool layer_fills_bounds_completely() const {
    return layer_fills_bounds_completely_;
  }

  SkColor background_color() const { return background_color_; }

  int layer_id_;

  // True when it is known that all output pixels will be opaque.
  bool layer_is_opaque_;
  // True when it is known that all output pixels will be filled.
  bool layer_fills_bounds_completely_;

 private:
  gfx::Rect paint_rect_;
  scoped_ptr<LayerPainter> painter_;
  SkColor background_color_;

  DISALLOW_COPY_AND_ASSIGN(ContentLayerUpdater);
};

}  // namespace cc

#endif  // CC_RESOURCES_CONTENT_LAYER_UPDATER_H_
