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 #ifndef CC_QUADS_SHARED_QUAD_STATE_H_ 6 #define CC_QUADS_SHARED_QUAD_STATE_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "cc/base/cc_export.h" 10 #include "third_party/skia/include/core/SkXfermode.h" 11 #include "ui/gfx/rect.h" 12 #include "ui/gfx/transform.h" 13 14 namespace base { 15 namespace debug { 16 class TracedValue; 17 } 18 class Value; 19 } 20 21 namespace cc { 22 23 // SharedQuadState holds a set of properties that are common across multiple 24 // DrawQuads. It's purely an optimization - the properties behave in exactly the 25 // same way as if they were replicated on each DrawQuad. A given SharedQuadState 26 // can only be shared by DrawQuads that are adjacent in their RenderPass' 27 // QuadList. 28 class CC_EXPORT SharedQuadState { 29 public: 30 SharedQuadState(); 31 ~SharedQuadState(); 32 33 void CopyFrom(const SharedQuadState* other); 34 35 void SetAll(const gfx::Transform& content_to_target_transform, 36 const gfx::Size& content_bounds, 37 const gfx::Rect& visible_content_rect, 38 const gfx::Rect& clip_rect, 39 bool is_clipped, 40 float opacity, 41 SkXfermode::Mode blend_mode, 42 int sorting_context_id); 43 void AsValueInto(base::debug::TracedValue* dict) const; 44 45 // Transforms from quad's original content space to its target content space. 46 gfx::Transform content_to_target_transform; 47 // This size lives in the content space for the quad's originating layer. 48 gfx::Size content_bounds; 49 // This rect lives in the content space for the quad's originating layer. 50 gfx::Rect visible_content_rect; 51 // This rect lives in the target content space. 52 gfx::Rect clip_rect; 53 bool is_clipped; 54 float opacity; 55 SkXfermode::Mode blend_mode; 56 int sorting_context_id; 57 }; 58 59 } // namespace cc 60 61 #endif // CC_QUADS_SHARED_QUAD_STATE_H_ 62