summaryrefslogtreecommitdiffstats
path: root/views/widget/widget.cc
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-15 02:18:36 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-15 02:18:36 +0000
commitc797cd43680b525ea771dc226ca353078c5c56f1 (patch)
treea172b53773aec97a6c3dd9c4fcf93acc27d0cca2 /views/widget/widget.cc
parent8df9747bff840d1a63b9fe1309b18e5fb21e8340 (diff)
downloadchromium_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.cc31
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