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

#ifndef CC_QUADS_IO_SURFACE_DRAW_QUAD_H_
#define CC_QUADS_IO_SURFACE_DRAW_QUAD_H_

#include "base/memory/scoped_ptr.h"
#include "cc/quads/draw_quad.h"
#include "ui/gfx/geometry/size.h"

namespace cc {

class IOSurfaceDrawQuad : public DrawQuad {
 public:
  enum Orientation {
    FLIPPED,
    UNFLIPPED,
    ORIENTATION_LAST = UNFLIPPED
  };

  IOSurfaceDrawQuad();

  void SetNew(const SharedQuadState* shared_quad_state,
              const gfx::Rect& rect,
              const gfx::Rect& opaque_rect,
              const gfx::Rect& visible_rect,
              const gfx::Size& io_surface_size,
              unsigned io_surface_resource_id,
              Orientation orientation);

  void SetAll(const SharedQuadState* shared_quad_state,
              const gfx::Rect& rect,
              const gfx::Rect& opaque_rect,
              const gfx::Rect& visible_rect,
              bool needs_blending,
              const gfx::Size& io_surface_size,
              unsigned io_surface_resource_id,
              Orientation orientation);

  gfx::Size io_surface_size;
  unsigned io_surface_resource_id;
  Orientation orientation;

  void IterateResources(const ResourceIteratorCallback& callback) override;

  static const IOSurfaceDrawQuad* MaterialCast(const DrawQuad*);

 private:
  void ExtendValue(base::trace_event::TracedValue* value) const override;
};

}  // namespace cc

#endif  // CC_QUADS_IO_SURFACE_DRAW_QUAD_H_
