Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: views/view.cc

Issue 7605024: views: Force child views to paint into their own texture when the parent has an external texture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #include "views/view.h" 5 #include "views/view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 1198 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 if (!layer_helper_.get()) 1209 if (!layer_helper_.get())
1210 layer_helper_.reset(new internal::LayerHelper()); 1210 layer_helper_.reset(new internal::LayerHelper());
1211 1211
1212 layer_helper_->set_fills_bounds_opaquely(fills_bounds_opaquely); 1212 layer_helper_->set_fills_bounds_opaquely(fills_bounds_opaquely);
1213 1213
1214 if (layer()) 1214 if (layer())
1215 layer()->SetFillsBoundsOpaquely(fills_bounds_opaquely); 1215 layer()->SetFillsBoundsOpaquely(fills_bounds_opaquely);
1216 } 1216 }
1217 1217
1218 bool View::SetExternalTexture(ui::Texture* texture) { 1218 bool View::SetExternalTexture(ui::Texture* texture) {
1219 // A little heavy-handed -- it should be that each child has it's own layer.
1220 // The desired use case is where there are no children.
1221 DCHECK_EQ(child_count(), 0);
1222
1223 if (!texture && !layer_helper_.get()) 1219 if (!texture && !layer_helper_.get())
1224 return true; 1220 return true;
1225 1221
1226 if (!layer_helper_.get()) 1222 if (!layer_helper_.get())
1227 layer_helper_.reset(new internal::LayerHelper()); 1223 layer_helper_.reset(new internal::LayerHelper());
1228 bool use_external = (texture != NULL); 1224 bool use_external = (texture != NULL);
1229 if (use_external != layer_helper_->paint_to_layer()) 1225 if (use_external != layer_helper_->paint_to_layer())
1230 SetPaintToLayer(use_external); 1226 SetPaintToLayer(use_external);
1231 else if (use_external && !layer()) 1227 else if (use_external && !layer())
1232 CreateLayer(); 1228 CreateLayer();
1233 1229
1234 if (use_external && !layer()) 1230 if (use_external && !layer())
1235 return false; 1231 return false;
1236 1232
1233 // Child views must not paint into the external texture. So make sure each
1234 // child view has its own layer to paint into.
1235 if (use_external) {
1236 for (Views::iterator i = children_.begin(); i != children_.end(); ++i)
1237 (*i)->SetPaintToLayer(true);
rjkroege 2011/08/10 14:29:53 this is not recursive right? It's only the immedia
sadrul 2011/08/10 14:33:05 Yes, that is correct (i.e. not recursive).
1238 }
1239
1237 layer_helper_->set_layer_updated_externally(use_external); 1240 layer_helper_->set_layer_updated_externally(use_external);
1238 layer_helper_->set_bitmap_needs_updating(!use_external); 1241 layer_helper_->set_bitmap_needs_updating(!use_external);
1239 if (layer()) 1242 if (layer())
1240 layer()->SetTexture(texture); 1243 layer()->SetTexture(texture);
1241 1244
1242 if (IsVisible()) 1245 if (IsVisible())
1243 SchedulePaintInternal(GetLocalBounds()); 1246 SchedulePaintInternal(GetLocalBounds());
1244 1247
1245 return true; 1248 return true;
1246 } 1249 }
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
1713 gfx::Point3f p(*point); 1716 gfx::Point3f p(*point);
1714 trans.TransformPointReverse(p); 1717 trans.TransformPointReverse(p);
1715 *point = p.AsPoint(); 1718 *point = p.AsPoint();
1716 return result; 1719 return result;
1717 } 1720 }
1718 1721
1719 // Accelerated painting -------------------------------------------------------- 1722 // Accelerated painting --------------------------------------------------------
1720 1723
1721 bool View::ShouldPaintToLayer() const { 1724 bool View::ShouldPaintToLayer() const {
1722 return use_acceleration_when_possible && 1725 return use_acceleration_when_possible &&
1723 layer_helper_.get() && layer_helper_->ShouldPaintToLayer(); 1726 ((layer_helper_.get() && layer_helper_->ShouldPaintToLayer()) ||
1727 (parent_ && parent_->layer_helper_.get() &&
1728 parent_->layer_helper_->layer_updated_externally()));
1724 } 1729 }
1725 1730
1726 void View::CreateLayer() { 1731 void View::CreateLayer() {
1727 if (!ShouldPaintToLayer() || layer()) 1732 if (!ShouldPaintToLayer() || layer())
1728 return; 1733 return;
1729 1734
1730 ui::Compositor* compositor = GetCompositor(); 1735 ui::Compositor* compositor = GetCompositor();
1731 if (!compositor) 1736 if (!compositor)
1732 return; 1737 return;
1733 1738
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
2041 result.append(child_at(i)->PrintViewGraph(false)); 2046 result.append(child_at(i)->PrintViewGraph(false));
2042 2047
2043 if (first) 2048 if (first)
2044 result.append("}\n"); 2049 result.append("}\n");
2045 2050
2046 return result; 2051 return result;
2047 } 2052 }
2048 #endif 2053 #endif
2049 2054
2050 } // namespace views 2055 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698