diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-15 02:18:36 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-15 02:18:36 +0000 |
commit | c797cd43680b525ea771dc226ca353078c5c56f1 (patch) | |
tree | a172b53773aec97a6c3dd9c4fcf93acc27d0cca2 /views/widget/widget.cc | |
parent | 8df9747bff840d1a63b9fe1309b18e5fb21e8340 (diff) | |
download | chromium_src-c797cd43680b525ea771dc226ca353078c5c56f1.zip chromium_src-c797cd43680b525ea771dc226ca353078c5c56f1.tar.gz chromium_src-c797cd43680b525ea771dc226ca353078c5c56f1.tar.bz2 |
Start working on compositor tree painting.
As a first step, maintain a skia canvas in each transformed view. Each
transformed view will acquire a texture-id for the canvas it owns. Whenever the
canvas is updated, it will trigger a refresh in the compositor tree.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/6594125
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78149 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/widget.cc')
-rw-r--r-- | views/widget/widget.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/views/widget/widget.cc b/views/widget/widget.cc index 4a58b32..88c7bf3 100644 --- a/views/widget/widget.cc +++ b/views/widget/widget.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "base/message_loop.h" +#include "ui/gfx/compositor.h" #include "views/focus/view_storage.h" #include "views/widget/default_theme_provider.h" #include "views/widget/root_view.h" @@ -264,6 +265,11 @@ bool Widget::HasFocusManager() const { return !!focus_manager_.get(); } +void Widget::OnPaint(gfx::Canvas* canvas) { + GetRootView()->Paint(canvas); + RefreshCompositeTree(); +} + //////////////////////////////////////////////////////////////////////////////// // Widget, FocusTraversable implementation: @@ -311,4 +317,29 @@ void Widget::ReplaceFocusManager(FocusManager* focus_manager) { focus_manager_.reset(focus_manager); } +//////////////////////////////////////////////////////////////////////////////// +// Widget, private: + +void Widget::RefreshCompositeTree() { + if (!EnsureCompositor()) + return; + + compositor_->NotifyStart(); + root_view_->PaintComposite(compositor_.get()); + compositor_->NotifyEnd(); +} + +bool Widget::EnsureCompositor() { + if (compositor_.get()) + return true; + + // TODO(sad): If there is a parent Widget, then use the same compositor + // instead of creating a new one here. + gfx::AcceleratedWidget widget = native_widget_->GetAcceleratedWidget(); + if (widget != gfx::kNullAcceleratedWidget) + compositor_ = ui::Compositor::Create(widget); + + return compositor_.get() != NULL; +} + } // namespace views |