OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 #include "config.h" | 6 #include "config.h" |
7 | 7 |
8 #include "cc/layer_tiling_data.h" | 8 #include "cc/layer_tiling_data.h" |
9 | 9 |
10 #include "IntRect.h" | |
11 #include "IntSize.h" | |
12 #include "base/logging.h" | 10 #include "base/logging.h" |
13 | 11 |
14 using namespace std; | 12 using namespace std; |
15 | 13 |
16 namespace cc { | 14 namespace cc { |
17 | 15 |
18 scoped_ptr<LayerTilingData> LayerTilingData::create(const gfx::Size& tileSize, B
orderTexelOption border) | 16 scoped_ptr<LayerTilingData> LayerTilingData::create(const gfx::Size& tileSize, B
orderTexelOption border) |
19 { | 17 { |
20 return make_scoped_ptr(new LayerTilingData(tileSize, border)); | 18 return make_scoped_ptr(new LayerTilingData(tileSize, border)); |
21 } | 19 } |
22 | 20 |
23 LayerTilingData::LayerTilingData(const gfx::Size& tileSize, BorderTexelOption bo
rder) | 21 LayerTilingData::LayerTilingData(const gfx::Size& tileSize, BorderTexelOption bo
rder) |
24 : m_tilingData(cc::IntSize(tileSize), cc::IntSize(), border == HasBorderTexe
ls) | 22 : m_tilingData(tileSize, gfx::Size(), border == HasBorderTexels) |
25 { | 23 { |
26 setTileSize(tileSize); | 24 setTileSize(tileSize); |
27 } | 25 } |
28 | 26 |
29 LayerTilingData::~LayerTilingData() | 27 LayerTilingData::~LayerTilingData() |
30 { | 28 { |
31 } | 29 } |
32 | 30 |
33 void LayerTilingData::setTileSize(const gfx::Size& size) | 31 void LayerTilingData::setTileSize(const gfx::Size& size) |
34 { | 32 { |
35 if (tileSize() == size) | 33 if (tileSize() == size) |
36 return; | 34 return; |
37 | 35 |
38 reset(); | 36 reset(); |
39 | 37 |
40 m_tilingData.setMaxTextureSize(cc::IntSize(size)); | 38 m_tilingData.SetMaxTextureSize(size); |
41 } | 39 } |
42 | 40 |
43 gfx::Size LayerTilingData::tileSize() const | 41 gfx::Size LayerTilingData::tileSize() const |
44 { | 42 { |
45 return cc::IntSize(m_tilingData.maxTextureSize()); | 43 return m_tilingData.max_texture_size(); |
46 } | 44 } |
47 | 45 |
48 void LayerTilingData::setBorderTexelOption(BorderTexelOption borderTexelOption) | 46 void LayerTilingData::setBorderTexelOption(BorderTexelOption borderTexelOption) |
49 { | 47 { |
50 bool borderTexels = borderTexelOption == HasBorderTexels; | 48 bool borderTexels = borderTexelOption == HasBorderTexels; |
51 if (hasBorderTexels() == borderTexels) | 49 if (hasBorderTexels() == borderTexels) |
52 return; | 50 return; |
53 | 51 |
54 reset(); | 52 reset(); |
55 m_tilingData.setHasBorderTexels(borderTexels); | 53 m_tilingData.SetHasBorderTexels(borderTexels); |
56 } | 54 } |
57 | 55 |
58 const LayerTilingData& LayerTilingData::operator=(const LayerTilingData& tiler) | 56 const LayerTilingData& LayerTilingData::operator=(const LayerTilingData& tiler) |
59 { | 57 { |
60 m_tilingData = tiler.m_tilingData; | 58 m_tilingData = tiler.m_tilingData; |
61 | 59 |
62 return *this; | 60 return *this; |
63 } | 61 } |
64 | 62 |
65 void LayerTilingData::addTile(scoped_ptr<Tile> tile, int i, int j) | 63 void LayerTilingData::addTile(scoped_ptr<Tile> tile, int i, int j) |
(...skipping 18 matching lines...) Expand all Loading... |
84 m_tiles.clear(); | 82 m_tiles.clear(); |
85 } | 83 } |
86 | 84 |
87 void LayerTilingData::contentRectToTileIndices(const gfx::Rect& contentRect, int
& left, int& top, int& right, int& bottom) const | 85 void LayerTilingData::contentRectToTileIndices(const gfx::Rect& contentRect, int
& left, int& top, int& right, int& bottom) const |
88 { | 86 { |
89 // An empty rect doesn't result in an empty set of tiles, so don't pass an e
mpty rect. | 87 // An empty rect doesn't result in an empty set of tiles, so don't pass an e
mpty rect. |
90 // FIXME: Possibly we should fill a vector of tiles instead, | 88 // FIXME: Possibly we should fill a vector of tiles instead, |
91 // since the normal use of this function is to enumerate some tiles. | 89 // since the normal use of this function is to enumerate some tiles. |
92 DCHECK(!contentRect.IsEmpty()); | 90 DCHECK(!contentRect.IsEmpty()); |
93 | 91 |
94 left = m_tilingData.tileXIndexFromSrcCoord(contentRect.x()); | 92 left = m_tilingData.TileXIndexFromSrcCoord(contentRect.x()); |
95 top = m_tilingData.tileYIndexFromSrcCoord(contentRect.y()); | 93 top = m_tilingData.TileYIndexFromSrcCoord(contentRect.y()); |
96 right = m_tilingData.tileXIndexFromSrcCoord(contentRect.right() - 1); | 94 right = m_tilingData.TileXIndexFromSrcCoord(contentRect.right() - 1); |
97 bottom = m_tilingData.tileYIndexFromSrcCoord(contentRect.bottom() - 1); | 95 bottom = m_tilingData.TileYIndexFromSrcCoord(contentRect.bottom() - 1); |
98 } | 96 } |
99 | 97 |
100 gfx::Rect LayerTilingData::tileRect(const Tile* tile) const | 98 gfx::Rect LayerTilingData::tileRect(const Tile* tile) const |
101 { | 99 { |
102 gfx::Rect tileRect = cc::IntRect(m_tilingData.tileBoundsWithBorder(tile->i()
, tile->j())); | 100 gfx::Rect tileRect = m_tilingData.TileBoundsWithBorder(tile->i(), tile->j())
; |
103 tileRect.set_size(tileSize()); | 101 tileRect.set_size(tileSize()); |
104 return tileRect; | 102 return tileRect; |
105 } | 103 } |
106 | 104 |
107 Region LayerTilingData::opaqueRegionInContentRect(const gfx::Rect& contentRect)
const | 105 Region LayerTilingData::opaqueRegionInContentRect(const gfx::Rect& contentRect)
const |
108 { | 106 { |
109 if (contentRect.IsEmpty()) | 107 if (contentRect.IsEmpty()) |
110 return Region(); | 108 return Region(); |
111 | 109 |
112 Region opaqueRegion; | 110 Region opaqueRegion; |
113 int left, top, right, bottom; | 111 int left, top, right, bottom; |
114 contentRectToTileIndices(contentRect, left, top, right, bottom); | 112 contentRectToTileIndices(contentRect, left, top, right, bottom); |
115 for (int j = top; j <= bottom; ++j) { | 113 for (int j = top; j <= bottom; ++j) { |
116 for (int i = left; i <= right; ++i) { | 114 for (int i = left; i <= right; ++i) { |
117 Tile* tile = tileAt(i, j); | 115 Tile* tile = tileAt(i, j); |
118 if (!tile) | 116 if (!tile) |
119 continue; | 117 continue; |
120 | 118 |
121 gfx::Rect tileOpaqueRect = gfx::IntersectRects(contentRect, tile->op
aqueRect()); | 119 gfx::Rect tileOpaqueRect = gfx::IntersectRects(contentRect, tile->op
aqueRect()); |
122 opaqueRegion.Union(tileOpaqueRect); | 120 opaqueRegion.Union(tileOpaqueRect); |
123 } | 121 } |
124 } | 122 } |
125 return opaqueRegion; | 123 return opaqueRegion; |
126 } | 124 } |
127 | 125 |
128 void LayerTilingData::setBounds(const gfx::Size& size) | 126 void LayerTilingData::setBounds(const gfx::Size& size) |
129 { | 127 { |
130 m_tilingData.setTotalSize(cc::IntSize(size)); | 128 m_tilingData.SetTotalSize(size); |
131 if (size.IsEmpty()) { | 129 if (size.IsEmpty()) { |
132 m_tiles.clear(); | 130 m_tiles.clear(); |
133 return; | 131 return; |
134 } | 132 } |
135 | 133 |
136 // Any tiles completely outside our new bounds are invalid and should be dro
pped. | 134 // Any tiles completely outside our new bounds are invalid and should be dro
pped. |
137 int left, top, right, bottom; | 135 int left, top, right, bottom; |
138 contentRectToTileIndices(gfx::Rect(gfx::Point(), size), left, top, right, bo
ttom); | 136 contentRectToTileIndices(gfx::Rect(gfx::Point(), size), left, top, right, bo
ttom); |
139 std::vector<TileMapKey> invalidTileKeys; | 137 std::vector<TileMapKey> invalidTileKeys; |
140 for (TileMap::const_iterator it = m_tiles.begin(); it != m_tiles.end(); ++it
) { | 138 for (TileMap::const_iterator it = m_tiles.begin(); it != m_tiles.end(); ++it
) { |
141 if (it->first.first > right || it->first.second > bottom) | 139 if (it->first.first > right || it->first.second > bottom) |
142 invalidTileKeys.push_back(it->first); | 140 invalidTileKeys.push_back(it->first); |
143 } | 141 } |
144 for (size_t i = 0; i < invalidTileKeys.size(); ++i) | 142 for (size_t i = 0; i < invalidTileKeys.size(); ++i) |
145 m_tiles.erase(invalidTileKeys[i]); | 143 m_tiles.erase(invalidTileKeys[i]); |
146 } | 144 } |
147 | 145 |
148 gfx::Size LayerTilingData::bounds() const | 146 gfx::Size LayerTilingData::bounds() const |
149 { | 147 { |
150 return cc::IntSize(m_tilingData.totalSize()); | 148 return m_tilingData.total_size(); |
151 } | 149 } |
152 | 150 |
153 } // namespace cc | 151 } // namespace cc |
OLD | NEW |