blob: b3c3889ec3cfb4b3ab26abf2049ada196be4cb10 [file] [log] [blame]
[email protected]94f206c12012-08-25 00:09:141// 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 "config.h"
6#include "CCDrawQuad.h"
7
8#include "CCCheckerboardDrawQuad.h"
9#include "CCDebugBorderDrawQuad.h"
10#include "CCIOSurfaceDrawQuad.h"
11#include "CCRenderPassDrawQuad.h"
12#include "CCSolidColorDrawQuad.h"
13#include "CCStreamVideoDrawQuad.h"
14#include "CCTextureDrawQuad.h"
15#include "CCTileDrawQuad.h"
16#include "CCYUVVideoDrawQuad.h"
17#include "IntRect.h"
18
[email protected]9c88e562012-09-14 22:21:3019namespace cc {
[email protected]94f206c12012-08-25 00:09:1420
21CCDrawQuad::CCDrawQuad(const CCSharedQuadState* sharedQuadState, Material material, const IntRect& quadRect)
22 : m_sharedQuadState(sharedQuadState)
23 , m_sharedQuadStateId(sharedQuadState->id)
24 , m_material(material)
25 , m_quadRect(quadRect)
26 , m_quadVisibleRect(quadRect)
27 , m_quadOpaque(true)
28 , m_needsBlending(false)
29{
30 ASSERT(m_sharedQuadState);
31 ASSERT(m_material != Invalid);
32}
33
34IntRect CCDrawQuad::opaqueRect() const
35{
36 if (opacity() != 1)
37 return IntRect();
38 if (m_sharedQuadState->opaque && m_quadOpaque)
39 return m_quadRect;
40 return m_opaqueRect;
41}
42
43void CCDrawQuad::setQuadVisibleRect(const IntRect& quadVisibleRect)
44{
45 IntRect intersection = quadVisibleRect;
46 intersection.intersect(m_quadRect);
47 m_quadVisibleRect = intersection;
48}
49
50unsigned CCDrawQuad::size() const
51{
52 switch (material()) {
53 case Checkerboard:
54 return sizeof(CCCheckerboardDrawQuad);
55 case DebugBorder:
56 return sizeof(CCDebugBorderDrawQuad);
57 case IOSurfaceContent:
58 return sizeof(CCIOSurfaceDrawQuad);
59 case TextureContent:
60 return sizeof(CCTextureDrawQuad);
61 case SolidColor:
62 return sizeof(CCSolidColorDrawQuad);
63 case TiledContent:
64 return sizeof(CCTileDrawQuad);
65 case StreamVideoContent:
66 return sizeof(CCStreamVideoDrawQuad);
67 case RenderPass:
68 return sizeof(CCRenderPassDrawQuad);
69 case YUVVideoContent:
70 return sizeof(CCYUVVideoDrawQuad);
71 case Invalid:
72 break;
73 }
74
75 CRASH();
76 return sizeof(CCDrawQuad);
77}
78
[email protected]0f077a52012-09-08 01:45:2479PassOwnPtr<CCDrawQuad> CCDrawQuad::copy(const CCSharedQuadState* copiedSharedQuadState) const
80{
81 // RenderPass quads have their own copy() method.
82 ASSERT(material() != RenderPass);
83
84 unsigned bytes = size();
85 ASSERT(bytes);
86
87 OwnPtr<CCDrawQuad> copyQuad(adoptPtr(reinterpret_cast<CCDrawQuad*>(new char[bytes])));
88 memcpy(copyQuad.get(), this, bytes);
89 copyQuad->setSharedQuadState(copiedSharedQuadState);
90
91 return copyQuad.release();
92}
93
[email protected]94f206c12012-08-25 00:09:1494void CCDrawQuad::setSharedQuadState(const CCSharedQuadState* sharedQuadState)
95{
96 m_sharedQuadState = sharedQuadState;
97 m_sharedQuadStateId = sharedQuadState->id;
98}
99
100}