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 11 namespace cc { 12 13 IOSurfaceDrawQuad::IOSurfaceDrawQuad() 14 : io_surface_resource_id(0), 15 orientation(FLIPPED) { 16 } 17 18 scoped_ptr<IOSurfaceDrawQuad> IOSurfaceDrawQuad::Create() { 19 return make_scoped_ptr(new IOSurfaceDrawQuad); 20 } 21 22 void IOSurfaceDrawQuad::SetNew(const SharedQuadState* shared_quad_state, 23 gfx::Rect rect, 24 gfx::Rect opaque_rect, 25 gfx::Size io_surface_size, 26 unsigned io_surface_resource_id, 27 Orientation orientation) { 28 gfx::Rect visible_rect = rect; 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 37 void IOSurfaceDrawQuad::SetAll(const SharedQuadState* shared_quad_state, 38 gfx::Rect rect, 39 gfx::Rect opaque_rect, 40 gfx::Rect visible_rect, 41 bool needs_blending, 42 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 52 void IOSurfaceDrawQuad::IterateResources( 53 const ResourceIteratorCallback& callback) { 54 io_surface_resource_id = callback.Run(io_surface_resource_id); 55 } 56 57 const IOSurfaceDrawQuad* IOSurfaceDrawQuad::MaterialCast( 58 const DrawQuad* quad) { 59 DCHECK(quad->material == DrawQuad::IO_SURFACE_CONTENT); 60 return static_cast<const IOSurfaceDrawQuad*>(quad); 61 } 62 63 void 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