Home | History | Annotate | Download | only in quads
      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