1// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "cc/quads/io_surface_draw_quad.h"
6
7#include "base/logging.h"
8#include "base/values.h"
9#include "cc/base/math_util.h"
10
11namespace cc {
12
13IOSurfaceDrawQuad::IOSurfaceDrawQuad()
14    : io_surface_resource_id(0),
15      orientation(FLIPPED) {
16}
17
18scoped_ptr<IOSurfaceDrawQuad> IOSurfaceDrawQuad::Create() {
19  return make_scoped_ptr(new IOSurfaceDrawQuad);
20}
21
22void IOSurfaceDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
23                               const gfx::Rect& rect,
24                               const gfx::Rect& opaque_rect,
25                               const gfx::Rect& visible_rect,
26                               const gfx::Size& io_surface_size,
27                               unsigned io_surface_resource_id,
28                               Orientation orientation) {
29  bool needs_blending = false;
30  DrawQuad::SetAll(shared_quad_state, DrawQuad::IO_SURFACE_CONTENT, rect,
31                   opaque_rect, visible_rect, needs_blending);
32  this->io_surface_size = io_surface_size;
33  this->io_surface_resource_id = io_surface_resource_id;
34  this->orientation = orientation;
35}
36
37void IOSurfaceDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
38                               const gfx::Rect& rect,
39                               const gfx::Rect& opaque_rect,
40                               const gfx::Rect& visible_rect,
41                               bool needs_blending,
42                               const gfx::Size& io_surface_size,
43                               unsigned io_surface_resource_id,
44                               Orientation orientation) {
45  DrawQuad::SetAll(shared_quad_state, DrawQuad::IO_SURFACE_CONTENT, rect,
46                   opaque_rect, visible_rect, needs_blending);
47  this->io_surface_size = io_surface_size;
48  this->io_surface_resource_id = io_surface_resource_id;
49  this->orientation = orientation;
50}
51
52void IOSurfaceDrawQuad::IterateResources(
53    const ResourceIteratorCallback& callback) {
54  io_surface_resource_id = callback.Run(io_surface_resource_id);
55}
56
57const IOSurfaceDrawQuad* IOSurfaceDrawQuad::MaterialCast(
58    const DrawQuad* quad) {
59  DCHECK(quad->material == DrawQuad::IO_SURFACE_CONTENT);
60  return static_cast<const IOSurfaceDrawQuad*>(quad);
61}
62
63void IOSurfaceDrawQuad::ExtendValue(base::DictionaryValue* value) const {
64  value->Set("io_surface_size", MathUtil::AsValue(io_surface_size).release());
65  value->SetInteger("io_surface_resource_id", io_surface_resource_id);
66  const char* orientation_string = NULL;
67  switch (orientation) {
68    case FLIPPED:
69      orientation_string = "flipped";
70      break;
71    case UNFLIPPED:
72      orientation_string = "unflipped";
73      break;
74  }
75
76  value->SetString("orientation", orientation_string);
77}
78
79}  // namespace cc
80