summaryrefslogtreecommitdiffstats
path: root/views/view.cc
diff options
context:
space:
mode:
authorbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-24 12:32:19 +0000
committerbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-24 12:32:19 +0000
commit1cbbee3cbff09ceb17af31686108e07bf4490c95 (patch)
treed9514c34b14a8b82b64ea04459f27ca8694d6863 /views/view.cc
parent952e1b3390348d42d8fd76c9b439c3e35c38e0a6 (diff)
downloadchromium_src-1cbbee3cbff09ceb17af31686108e07bf4490c95.zip
chromium_src-1cbbee3cbff09ceb17af31686108e07bf4490c95.tar.gz
chromium_src-1cbbee3cbff09ceb17af31686108e07bf4490c95.tar.bz2
Allow View to have a layer whose texture is updated externally.
This will be used to display texture produced by the GPU process for the RWHVV via the browser compositor. BUG=none TEST=none Review URL: http://codereview.chromium.org/7231012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90362 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/view.cc')
-rw-r--r--views/view.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/views/view.cc b/views/view.cc
index 0994639..84bb6ea 100644
--- a/views/view.cc
+++ b/views/view.cc
@@ -108,6 +108,7 @@ View::View()
needs_layout_(true),
flip_canvas_on_paint_for_rtl_ui_(false),
layer_needs_updating_(true),
+ layer_updated_externally_(false),
paint_to_layer_(false),
accelerator_registration_delayed_(false),
accelerator_focus_manager_(NULL),
@@ -1218,6 +1219,31 @@ void View::PaintToLayer(const gfx::Rect& dirty_region) {
void View::OnWillCompositeLayer() {
}
+bool View::SetExternalTexture(ui::Texture* texture) {
+ // A little heavy-handed -- it should be that each child has it's own layer.
+ // The desired use case is where there are no children.
+ DCHECK_EQ(child_count(), 0);
+
+ bool use_external = (texture != NULL);
+ if (use_external != paint_to_layer_)
+ SetPaintToLayer(use_external);
+ else if (use_external && !layer_.get())
+ CreateLayer();
+
+ if (use_external && !layer_.get())
+ return false;
+
+ layer_updated_externally_ = use_external;
+ layer_needs_updating_ = !use_external;
+ if (layer_.get())
+ layer_->SetTexture(texture);
+
+ if (IsVisible())
+ SchedulePaintInternal(GetLocalBounds());
+
+ return true;
+}
+
const ui::Compositor* View::GetCompositor() const {
return parent_ ? parent_->GetCompositor() : NULL;
}
@@ -1617,6 +1643,8 @@ bool View::ShouldPaintToLayer() const {
}
void View::MarkLayerDirty() {
+ if (layer_updated_externally_)
+ return;
View* owner = this;
while (!((owner->transform_.get() && owner->transform_->HasChange()) ||
owner->paint_to_layer_) && owner->parent_)