summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-25 22:35:13 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-25 22:35:13 +0000
commit8d8c773c297d22dbf01e2bbb69b7335f52208845 (patch)
treed45e8affaa57b2dd2516e14c03c3a5f9238247f0
parent93543752960447decfc8f0ca38ef9f44f7209cfd (diff)
downloadchromium_src-8d8c773c297d22dbf01e2bbb69b7335f52208845.zip
chromium_src-8d8c773c297d22dbf01e2bbb69b7335f52208845.tar.gz
chromium_src-8d8c773c297d22dbf01e2bbb69b7335f52208845.tar.bz2
Re-land: Create a new views_aura_desktop.
Get views::Widget rendering working against an aura::Window NativeWidget. http://crbug.com/93944 TEST=none Original review URL: http://codereview.chromium.org/7741027 Review URL: http://codereview.chromium.org/7747032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98331 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--aura/demo/demo_main.cc62
-rw-r--r--aura/desktop.cc29
-rw-r--r--aura/desktop.h12
-rw-r--r--aura/window.cc30
-rw-r--r--aura/window.h14
-rw-r--r--aura/window_delegate.h9
-rw-r--r--ui/gfx/canvas_skia.cc4
-rw-r--r--ui/gfx/screen_aura.cc55
-rw-r--r--ui/ui.gyp6
-rw-r--r--views/DEPS1
-rw-r--r--views/aura_desktop/aura_desktop_main.cc106
-rw-r--r--views/controls/menu/menu_controller.cc10
-rw-r--r--views/focus/accelerator_handler_aura.cc20
-rw-r--r--views/view_aura.cc21
-rw-r--r--views/views.gyp59
-rw-r--r--views/widget/native_widget_aura.cc178
-rw-r--r--views/widget/native_widget_aura.h11
17 files changed, 546 insertions, 81 deletions
diff --git a/aura/demo/demo_main.cc b/aura/demo/demo_main.cc
index e8ef169..09cfc29 100644
--- a/aura/demo/demo_main.cc
+++ b/aura/demo/demo_main.cc
@@ -3,14 +3,12 @@
// found in the LICENSE file.
#include "aura/desktop.h"
-#include "aura/desktop_host.h"
#include "aura/window.h"
#include "aura/window_delegate.h"
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/i18n/icu_util.h"
#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
#include "third_party/skia/include/core/SkXfermode.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/ui_base_paths.h"
@@ -20,32 +18,21 @@
namespace {
-// Trivial WindowDelegate implementation that draws a blue background.
+// Trivial WindowDelegate implementation that draws a colored background.
class DemoWindowDelegate : public aura::WindowDelegate {
public:
- explicit DemoWindowDelegate(aura::Window* window, SkColor color);
+ explicit DemoWindowDelegate(SkColor color) : color_(color) {}
- virtual void OnPaint(const gfx::Rect& bounds) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
+ canvas->AsCanvasSkia()->drawColor(color_, SkXfermode::kSrc_Mode);
+ }
private:
- aura::Window* window_;
-
SkColor color_;
DISALLOW_COPY_AND_ASSIGN(DemoWindowDelegate);
};
-DemoWindowDelegate::DemoWindowDelegate(aura::Window* window, SkColor color)
- : window_(window),
- color_(color) {
-}
-
-void DemoWindowDelegate::OnPaint(const gfx::Rect& bounds) {
- scoped_ptr<gfx::Canvas> canvas(
- gfx::Canvas::CreateCanvas(bounds.width(), bounds.height(), false));
- canvas->AsCanvasSkia()->drawColor(color_, SkXfermode::kSrc_Mode);
- window_->SetCanvas(*canvas->AsCanvasSkia(), bounds.origin());
-}
} // namespace
@@ -63,43 +50,34 @@ int main(int argc, char** argv) {
base::MessagePumpX::DisableGtkMessagePump();
#endif
- // Create the DesktopHost and Desktop.
- scoped_ptr<aura::DesktopHost> host(
- aura::DesktopHost::Create(gfx::Rect(200, 200, 1024, 768)));
- aura::Desktop desktop(host->GetAcceleratedWidget(), host->GetSize());
- host->SetDesktop(&desktop);
+ aura::Desktop::GetInstance();
// Create a hierarchy of test windows.
- aura::Window window1(&desktop);
+ DemoWindowDelegate window_delegate1(SK_ColorBLUE);
+ aura::Window window1(&window_delegate1);
window1.set_id(1);
+ window1.Init();
window1.SetBounds(gfx::Rect(100, 100, 400, 400), 0);
window1.SetVisibility(aura::Window::VISIBILITY_SHOWN);
- DemoWindowDelegate window_delegate1(&window1, SK_ColorBLUE);
- window1.set_delegate(&window_delegate1);
-
- desktop.window()->AddChild(&window1);
+ window1.SetParent(NULL);
- aura::Window window2(&desktop);
+ DemoWindowDelegate window_delegate2(SK_ColorRED);
+ aura::Window window2(&window_delegate2);
window2.set_id(2);
+ window2.Init();
window2.SetBounds(gfx::Rect(200, 200, 350, 350), 0);
window2.SetVisibility(aura::Window::VISIBILITY_SHOWN);
- DemoWindowDelegate window_delegate2(&window2, SK_ColorRED);
- window2.set_delegate(&window_delegate2);
+ window2.SetParent(NULL);
- desktop.window()->AddChild(&window2);
-
- aura::Window window3(&desktop);
+ DemoWindowDelegate window_delegate3(SK_ColorGREEN);
+ aura::Window window3(&window_delegate3);
window3.set_id(3);
+ window3.Init();
window3.SetBounds(gfx::Rect(10, 10, 50, 50), 0);
window3.SetVisibility(aura::Window::VISIBILITY_SHOWN);
- DemoWindowDelegate window_delegate3(&window3, SK_ColorGREEN);
- window3.set_delegate(&window_delegate3);
-
- window2.AddChild(&window3);
+ window3.SetParent(&window2);
- host->Show();
-
- MessageLoop main_message_loop(MessageLoop::TYPE_UI);
- MessageLoopForUI::current()->Run(host.get());
+ aura::Desktop::GetInstance()->Run();
return 0;
}
+
diff --git a/aura/desktop.cc b/aura/desktop.cc
index 00b130f..f427daf 100644
--- a/aura/desktop.cc
+++ b/aura/desktop.cc
@@ -4,21 +4,35 @@
#include "aura/desktop.h"
+#include "aura/desktop_host.h"
#include "aura/window.h"
#include "base/logging.h"
+#include "base/message_loop.h"
#include "ui/gfx/compositor/compositor.h"
namespace aura {
-Desktop::Desktop(gfx::AcceleratedWidget widget, const gfx::Size& size)
- : compositor_(ui::Compositor::Create(widget, size)) {
+// static
+Desktop* Desktop::instance_ = NULL;
+
+Desktop::Desktop()
+ : host_(aura::DesktopHost::Create(gfx::Rect(200, 200, 1024, 768))) {
+ compositor_ = ui::Compositor::Create(host_->GetAcceleratedWidget(),
+ host_->GetSize());
+ host_->SetDesktop(this);
DCHECK(compositor_.get());
- window_.reset(new Window(this));
+ window_.reset(new Window(NULL));
}
Desktop::~Desktop() {
}
+void Desktop::Run() {
+ host_->Show();
+ MessageLoop main_message_loop(MessageLoop::TYPE_UI);
+ MessageLoopForUI::current()->Run(host_);
+}
+
void Desktop::Draw() {
// Second pass renders the layers.
compositor_->NotifyStart();
@@ -30,4 +44,13 @@ bool Desktop::OnMouseEvent(const MouseEvent& event) {
return window_->OnMouseEvent(event);
}
+// static
+Desktop* Desktop::GetInstance() {
+ if (!instance_) {
+ instance_ = new Desktop;
+ instance_->window_->Init();
+ }
+ return instance_;
+}
+
} // namespace aura
diff --git a/aura/desktop.h b/aura/desktop.h
index 1eb89ca..a894e24 100644
--- a/aura/desktop.h
+++ b/aura/desktop.h
@@ -21,15 +21,19 @@ class Compositor;
namespace aura {
+class DesktopHost;
class MouseEvent;
class Window;
// Desktop is responsible for hosting a set of windows.
class Desktop {
public:
- Desktop(gfx::AcceleratedWidget widget, const gfx::Size& size);
+ Desktop();
~Desktop();
+ // Shows the desktop host and runs an event loop for it.
+ void Run();
+
// Draws the necessary set of windows.
void Draw();
@@ -41,11 +45,17 @@ class Desktop {
Window* window() { return window_.get(); }
+ static Desktop* GetInstance();
+
private:
scoped_refptr<ui::Compositor> compositor_;
scoped_ptr<Window> window_;
+ DesktopHost* host_;
+
+ static Desktop* instance_;
+
DISALLOW_COPY_AND_ASSIGN(Desktop);
};
diff --git a/aura/window.cc b/aura/window.cc
index 11e9b31..e6f62a8 100644
--- a/aura/window.cc
+++ b/aura/window.cc
@@ -9,17 +9,15 @@
#include "aura/desktop.h"
#include "aura/window_delegate.h"
#include "base/logging.h"
-#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/gfx/canvas_skia.h"
#include "ui/gfx/compositor/compositor.h"
#include "ui/gfx/compositor/layer.h"
namespace aura {
-// TODO: do we need to support child windows?
-Window::Window(Desktop* desktop)
- : delegate_(NULL),
+Window::Window(WindowDelegate* delegate)
+ : delegate_(delegate),
visibility_(VISIBILITY_HIDDEN),
- layer_(new ui::Layer(desktop->compositor())),
needs_paint_all_(true),
parent_(NULL),
id_(-1) {
@@ -28,6 +26,10 @@ Window::Window(Desktop* desktop)
Window::~Window() {
}
+void Window::Init() {
+ layer_.reset(new ui::Layer(Desktop::GetInstance()->compositor()));
+}
+
void Window::SetVisibility(Visibility visibility) {
if (visibility_ == visibility)
return;
@@ -51,12 +53,19 @@ void Window::SchedulePaint(const gfx::Rect& bounds) {
void Window::SetCanvas(const SkCanvas& canvas, const gfx::Point& origin) {
// TODO: figure out how this is going to work when animating the layer. In
- // particular if we're animating the size then the underyling Texture is going
+ // particular if we're animating the size then the underlying Texture is going
// to be unhappy if we try to set a texture on a size bigger than the size of
// the texture.
layer_->SetCanvas(canvas, origin);
}
+void Window::SetParent(Window* parent) {
+ if (parent)
+ parent->AddChild(this);
+ else
+ Desktop::GetInstance()->window()->AddChild(this);
+}
+
void Window::DrawTree() {
UpdateLayerCanvas();
Draw();
@@ -96,8 +105,13 @@ void Window::UpdateLayerCanvas() {
dirty_rect_.SetRect(0, 0, 0, 0);
if (dirty_rect.IsEmpty())
return;
- if (delegate_)
- delegate_->OnPaint(dirty_rect);
+ if (delegate_) {
+ scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvas(
+ dirty_rect.width(), dirty_rect.height(), false));
+ canvas->TranslateInt(dirty_rect.x(), dirty_rect.y());
+ delegate_->OnPaint(canvas.get());
+ SetCanvas(*canvas->AsCanvasSkia(), bounds().origin());
+ }
}
void Window::Draw() {
diff --git a/aura/window.h b/aura/window.h
index f72b2b6..871ceb6 100644
--- a/aura/window.h
+++ b/aura/window.h
@@ -10,7 +10,6 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
-#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/rect.h"
class SkCanvas;
@@ -42,14 +41,17 @@ class Window {
VISIBILITY_SHOWN_NO_INPUT = 3,
};
- explicit Window(Desktop* desktop);
+ explicit Window(WindowDelegate* delegate);
~Window();
- void set_delegate(WindowDelegate* d) { delegate_ = d; }
+ void Init();
int id() const { return id_; }
void set_id(int id) { id_ = id; }
+ ui::Layer* layer() { return layer_.get(); }
+ const ui::Layer* layer() const { return layer_.get(); }
+
// Changes the visibility of the window.
void SetVisibility(Visibility visibility);
Visibility visibility() const { return visibility_; }
@@ -64,6 +66,11 @@ class Window {
// Sets the contents of the window.
void SetCanvas(const SkCanvas& canvas, const gfx::Point& origin);
+ // Sets the parent window of the window. If NULL, the window is parented to
+ // the desktop's window.
+ void SetParent(Window* parent);
+ Window* parent() { return parent_; }
+
// Draw the window and its children.
void DrawTree();
@@ -72,7 +79,6 @@ class Window {
// should change this.
void AddChild(Window* child);
void RemoveChild(Window* child);
- Window* parent() { return parent_; }
// Handles a mouse event. Returns true if handled.
bool OnMouseEvent(const MouseEvent& event);
diff --git a/aura/window_delegate.h b/aura/window_delegate.h
index 69637cf..ffa3191 100644
--- a/aura/window_delegate.h
+++ b/aura/window_delegate.h
@@ -6,14 +6,17 @@
#define AURA_WINDOW_DELEGATE_H_
#pragma once
+namespace gfx {
+class Canvas;
+}
+
namespace aura {
// Delegate interface for aura::Window.
class WindowDelegate {
public:
- // Asks the delegate to paint to the window. The delegate should call back
- // to the window with SetCanvas.
- virtual void OnPaint(const gfx::Rect& bounds) = 0;
+ // Asks the delegate to paint window contents into the supplied canvas.
+ virtual void OnPaint(gfx::Canvas* canvas) = 0;
protected:
virtual ~WindowDelegate() {}
diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc
index 160ca94..9083d1d 100644
--- a/ui/gfx/canvas_skia.cc
+++ b/ui/gfx/canvas_skia.cc
@@ -366,7 +366,7 @@ Canvas* Canvas::CreateCanvas(int width, int height, bool is_opaque) {
return new CanvasSkia(width, height, is_opaque);
}
-#if defined(OS_WIN)
+#if defined(OS_WIN) && !defined(USE_AURA)
// TODO(beng): move to canvas_win.cc, etc.
class CanvasPaintWin : public CanvasSkiaPaint, public CanvasPaint {
public:
@@ -388,7 +388,7 @@ class CanvasPaintWin : public CanvasSkiaPaint, public CanvasPaint {
#endif
CanvasPaint* CanvasPaint::CreateCanvasPaint(gfx::NativeView view) {
-#if defined(OS_WIN)
+#if defined(OS_WIN) && !defined(USE_AURA)
return new CanvasPaintWin(view);
#else
return NULL;
diff --git a/ui/gfx/screen_aura.cc b/ui/gfx/screen_aura.cc
new file mode 100644
index 0000000..75b0afc
--- /dev/null
+++ b/ui/gfx/screen_aura.cc
@@ -0,0 +1,55 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/screen.h"
+
+#include <windows.h>
+
+#include "base/logging.h"
+
+namespace gfx {
+
+// static
+gfx::Point Screen::GetCursorScreenPoint() {
+#if defined(OS_WIN)
+ POINT pt;
+ GetCursorPos(&pt);
+ return gfx::Point(pt);
+#endif
+}
+
+// static
+gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeWindow window) {
+ NOTIMPLEMENTED();
+ return gfx::Rect();
+}
+
+// static
+gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeWindow window) {
+ NOTIMPLEMENTED();
+ return gfx::Rect();
+}
+
+static gfx::Rect GetMonitorAreaOrWorkAreaNearestPoint(const gfx::Point& point,
+ bool work_area) {
+ NOTIMPLEMENTED();
+ return gfx::Rect();
+}
+
+// static
+gfx::Rect Screen::GetMonitorWorkAreaNearestPoint(const gfx::Point& point) {
+ return GetMonitorAreaOrWorkAreaNearestPoint(point, true);
+}
+
+// static
+gfx::Rect Screen::GetMonitorAreaNearestPoint(const gfx::Point& point) {
+ return GetMonitorAreaOrWorkAreaNearestPoint(point, false);
+}
+
+gfx::NativeWindow Screen::GetWindowAtCursorScreenPoint() {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+} // namespace gfx
diff --git a/ui/ui.gyp b/ui/ui.gyp
index 3f5a2fe..1dd8b9c 100644
--- a/ui/ui.gyp
+++ b/ui/ui.gyp
@@ -265,6 +265,7 @@
'gfx/render_text_win.cc',
'gfx/render_text_win.h',
'gfx/screen.h',
+ 'gfx/screen_aura.cc',
'gfx/screen_gtk.cc',
'gfx/screen_wayland.cc',
'gfx/screen_win.cc',
@@ -285,6 +286,11 @@
'gfx/transform.cc',
],
'conditions': [
+ ['use_aura==1', {
+ 'sources/': [
+ ['exclude', 'gfx/screen_win.cc'],
+ ],
+ }],
['toolkit_uses_gtk == 1', {
'dependencies': [
# font_gtk.cc uses fontconfig.
diff --git a/views/DEPS b/views/DEPS
index 5811123..22ead66 100644
--- a/views/DEPS
+++ b/views/DEPS
@@ -1,4 +1,5 @@
include_rules = [
+ "+aura",
"+grit/ui_resources.h",
"+grit/ui_resources_standard.h",
"+grit/ui_resources_large.h",
diff --git a/views/aura_desktop/aura_desktop_main.cc b/views/aura_desktop/aura_desktop_main.cc
new file mode 100644
index 0000000..ce6f3a7
--- /dev/null
+++ b/views/aura_desktop/aura_desktop_main.cc
@@ -0,0 +1,106 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "aura/desktop.h"
+#include "aura/desktop_host.h"
+#include "aura/window.h"
+#include "aura/window_delegate.h"
+#include "base/at_exit.h"
+#include "base/command_line.h"
+#include "base/i18n/icu_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop.h"
+#include "third_party/skia/include/core/SkXfermode.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/base/ui_base_paths.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/canvas_skia.h"
+#include "ui/gfx/rect.h"
+#include "views/widget/widget.h"
+
+namespace {
+
+// Trivial WindowDelegate implementation that draws a colored background.
+class DemoWindowDelegate : public aura::WindowDelegate {
+ public:
+ explicit DemoWindowDelegate(SkColor color) : color_(color) {}
+
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
+ canvas->AsCanvasSkia()->drawColor(color_, SkXfermode::kSrc_Mode);
+ }
+
+ private:
+ SkColor color_;
+
+ DISALLOW_COPY_AND_ASSIGN(DemoWindowDelegate);
+};
+
+class TestView : public views::View {
+ public:
+ TestView() {}
+ virtual ~TestView() {}
+
+ private:
+ // Overridden from views::View:
+ virtual void OnPaint(gfx::Canvas* canvas) {
+ canvas->FillRectInt(SK_ColorYELLOW, 0, 0, width(), height());
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(TestView);
+};
+
+} // namespace
+
+int main(int argc, char** argv) {
+ CommandLine::Init(argc, argv);
+
+ // The exit manager is in charge of calling the dtors of singleton objects.
+ base::AtExitManager exit_manager;
+
+ ui::RegisterPathProvider();
+ icu_util::Initialize();
+ ResourceBundle::InitSharedInstance("en-US");
+
+#if defined(USE_X11)
+ base::MessagePumpX::DisableGtkMessagePump();
+#endif
+
+ aura::Desktop::GetInstance();
+
+ // Create a hierarchy of test windows.
+ DemoWindowDelegate window_delegate1(SK_ColorBLUE);
+ aura::Window window1(&window_delegate1);
+ window1.set_id(1);
+ window1.Init();
+ window1.SetBounds(gfx::Rect(100, 100, 400, 400), 0);
+ window1.SetVisibility(aura::Window::VISIBILITY_SHOWN);
+ window1.SetParent(NULL);
+
+ DemoWindowDelegate window_delegate2(SK_ColorRED);
+ aura::Window window2(&window_delegate2);
+ window2.set_id(2);
+ window2.Init();
+ window2.SetBounds(gfx::Rect(200, 200, 350, 350), 0);
+ window2.SetVisibility(aura::Window::VISIBILITY_SHOWN);
+ window2.SetParent(NULL);
+
+ DemoWindowDelegate window_delegate3(SK_ColorGREEN);
+ aura::Window window3(&window_delegate3);
+ window3.set_id(3);
+ window3.Init();
+ window3.SetBounds(gfx::Rect(10, 10, 50, 50), 0);
+ window3.SetVisibility(aura::Window::VISIBILITY_SHOWN);
+ window3.SetParent(&window2);
+
+ views::Widget widget;
+ views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
+ params.bounds = gfx::Rect(75, 75, 80, 80);
+ params.parent = &window2;
+ widget.Init(params);
+ widget.SetContentsView(new TestView);
+
+ aura::Desktop::GetInstance()->Run();
+ return 0;
+}
+
diff --git a/views/controls/menu/menu_controller.cc b/views/controls/menu/menu_controller.cc
index a87b9ea..7cfbb3a 100644
--- a/views/controls/menu/menu_controller.cc
+++ b/views/controls/menu/menu_controller.cc
@@ -1748,7 +1748,12 @@ bool MenuController::SelectByChar(char16 character) {
return false;
}
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
+#if defined(USE_AURA)
+void MenuController::RepostEvent(SubmenuView* source,
+ const MouseEvent& event) {
+}
+#else
void MenuController::RepostEvent(SubmenuView* source,
const MouseEvent& event) {
if (!state_.item) {
@@ -1815,7 +1820,8 @@ void MenuController::RepostEvent(SubmenuView* source,
}
}
}
-#endif
+#endif // !defined(USE_AURA)
+#endif // defined(OS_WIN)
void MenuController::SetDropMenuItem(
MenuItemView* new_target,
diff --git a/views/focus/accelerator_handler_aura.cc b/views/focus/accelerator_handler_aura.cc
new file mode 100644
index 0000000..8f2f31a
--- /dev/null
+++ b/views/focus/accelerator_handler_aura.cc
@@ -0,0 +1,20 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "views/focus/accelerator_handler.h"
+
+namespace views {
+
+AcceleratorHandler::AcceleratorHandler() {
+}
+
+bool AcceleratorHandler::Dispatch(const MSG& msg) {
+#if defined(OS_WIN)
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+#endif
+ return true;
+}
+
+} // namespace views
diff --git a/views/view_aura.cc b/views/view_aura.cc
new file mode 100644
index 0000000..f01e9b9
--- /dev/null
+++ b/views/view_aura.cc
@@ -0,0 +1,21 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "views/view.h"
+
+namespace views {
+
+gfx::NativeViewAccessible View::GetNativeViewAccessible() {
+ return NULL;
+}
+
+int View::GetHorizontalDragThreshold() {
+ return 0;
+}
+
+int View::GetVerticalDragThreshold() {
+ return 0;
+}
+
+} // namespace views
diff --git a/views/views.gyp b/views/views.gyp
index 8415705..98bd2d4 100644
--- a/views/views.gyp
+++ b/views/views.gyp
@@ -242,6 +242,7 @@
'events/event_utils_win.h',
'events/event_x.cc',
'focus/accelerator_handler.h',
+ 'focus/accelerator_handler_aura.cc',
'focus/accelerator_handler_gtk.cc',
'focus/accelerator_handler_touch.cc',
'focus/accelerator_handler_win.cc',
@@ -310,6 +311,7 @@
'touchui/touch_selection_controller_impl.h',
'view.cc',
'view.h',
+ 'view_aura.cc',
'view_constants.cc',
'view_constants.h',
'view_gtk.cc',
@@ -396,6 +398,16 @@
'widget/child_window_message_processor.cc',
'widget/child_window_message_processor.h',
],
+ 'conditions': [
+ ['OS=="win"', {
+ 'sources/': [
+ ['include', 'controls/menu/menu_config_win.cc'],
+ ['include', 'controls/menu/menu_item_view_win.cc'],
+ ['include', 'controls/menu/menu_separator_win.cc'],
+ ['include', 'drag_utils_win.cc'],
+ ],
+ }],
+ ],
}],
['toolkit_uses_gtk == 1', {
'dependencies': [
@@ -766,7 +778,50 @@
}],
],
},
-
-
+ ],
+ 'conditions': [
+ ['use_aura==1', {
+ 'targets': [
+ {
+ 'target_name': 'views_aura_desktop',
+ 'type': 'executable',
+ 'dependencies': [
+ '../base/base.gyp:base',
+ '../base/base.gyp:base_i18n',
+ '../skia/skia.gyp:skia',
+ '../third_party/icu/icu.gyp:icui18n',
+ '../third_party/icu/icu.gyp:icuuc',
+ '../ui/ui.gyp:gfx_resources',
+ '../ui/ui.gyp:ui',
+ '../ui/ui.gyp:ui_resources',
+ '../ui/ui.gyp:ui_resources_standard',
+ 'views',
+ 'views_desktop_lib',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'sources': [
+ 'aura_desktop/aura_desktop_main.cc',
+ '<(SHARED_INTERMEDIATE_DIR)/ui/gfx/gfx_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources_standard/ui_resources_standard.rc',
+ ],
+ 'conditions': [
+ ['OS=="win"', {
+ 'link_settings': {
+ 'libraries': [
+ '-limm32.lib',
+ '-loleacc.lib',
+ ]
+ },
+ 'include_dirs': [
+ '<(DEPTH)/third_party/wtl/include',
+ ],
+ }],
+ ],
+ },
+ ],
+ }],
],
}
diff --git a/views/widget/native_widget_aura.cc b/views/widget/native_widget_aura.cc
index 38d6d42..8116a0d 100644
--- a/views/widget/native_widget_aura.cc
+++ b/views/widget/native_widget_aura.cc
@@ -4,12 +4,20 @@
#include "views/widget/native_widget_aura.h"
+#include "aura/window.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/compositor/layer.h"
+#include "views/widget/native_widget_delegate.h"
+
namespace views {
////////////////////////////////////////////////////////////////////////////////
// NativeWidgetAura, public:
-NativeWidgetAura::NativeWidgetAura(internal::NativeWidgetDelegate* delegate) {
+NativeWidgetAura::NativeWidgetAura(internal::NativeWidgetDelegate* delegate)
+ : delegate_(delegate),
+ ALLOW_THIS_IN_INITIALIZER_LIST(window_(new aura::Window(this))) {
+ window_->set_id(1200);
}
NativeWidgetAura::~NativeWidgetAura() {
@@ -19,36 +27,46 @@ NativeWidgetAura::~NativeWidgetAura() {
// NativeWidgetAura, internal::NativeWidgetPrivate implementation:
void NativeWidgetAura::InitNativeWidget(const Widget::InitParams& params) {
+ window_->Init();
+ window_->SetBounds(params.bounds, 0);
+ window_->SetParent(params.parent);
+ // TODO(beng): do this some other way.
+ delegate_->OnNativeWidgetSizeChanged(params.bounds.size());
+ window_->SetVisibility(aura::Window::VISIBILITY_SHOWN);
}
NonClientFrameView* NativeWidgetAura::CreateNonClientFrameView() {
+ NOTIMPLEMENTED();
return NULL;
}
void NativeWidgetAura::UpdateFrameAfterFrameChange() {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::ShouldUseNativeFrame() const {
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::FrameTypeChanged() {
+ NOTIMPLEMENTED();
}
Widget* NativeWidgetAura::GetWidget() {
- return NULL;
+ return delegate_->AsWidget();
}
const Widget* NativeWidgetAura::GetWidget() const {
- return NULL;
+ return delegate_->AsWidget();
}
gfx::NativeView NativeWidgetAura::GetNativeView() const {
- return NULL;
+ return window_;
}
gfx::NativeWindow NativeWidgetAura::GetNativeWindow() const {
- return NULL;
+ return window_;
}
Widget* NativeWidgetAura::GetTopLevelWidget() {
@@ -57,106 +75,133 @@ Widget* NativeWidgetAura::GetTopLevelWidget() {
}
const ui::Compositor* NativeWidgetAura::GetCompositor() const {
- return NULL;
+ return window_->layer()->compositor();
}
ui::Compositor* NativeWidgetAura::GetCompositor() {
- return NULL;
+ return window_->layer()->compositor();
}
void NativeWidgetAura::MarkLayerDirty() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::CalculateOffsetToAncestorWithLayer(gfx::Point* offset,
View** ancestor) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::ViewRemoved(View* view) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetNativeWindowProperty(const char* name, void* value) {
+ NOTIMPLEMENTED();
}
void* NativeWidgetAura::GetNativeWindowProperty(const char* name) const {
+ NOTIMPLEMENTED();
return NULL;
}
TooltipManager* NativeWidgetAura::GetTooltipManager() const {
+ NOTIMPLEMENTED();
return NULL;
}
bool NativeWidgetAura::IsScreenReaderActive() const {
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::SendNativeAccessibilityEvent(
View* view,
ui::AccessibilityTypes::Event event_type) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetMouseCapture() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::ReleaseMouseCapture() {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::HasMouseCapture() const {
+ NOTIMPLEMENTED();
return false;
}
InputMethod* NativeWidgetAura::CreateInputMethod() {
+ NOTIMPLEMENTED();
return NULL;
}
void NativeWidgetAura::CenterWindow(const gfx::Size& size) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::GetWindowBoundsAndMaximizedState(gfx::Rect* bounds,
bool* maximized) const {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetWindowTitle(const std::wstring& title) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetWindowIcons(const SkBitmap& window_icon,
const SkBitmap& app_icon) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetAccessibleName(const std::wstring& name) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetAccessibleRole(ui::AccessibilityTypes::Role role) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetAccessibleState(ui::AccessibilityTypes::State state) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::BecomeModal() {
+ NOTIMPLEMENTED();
}
gfx::Rect NativeWidgetAura::GetWindowScreenBounds() const {
- return gfx::Rect();
+ // TODO(beng): ensure screen bounds
+ return window_->bounds();
}
gfx::Rect NativeWidgetAura::GetClientAreaScreenBounds() const {
- return gfx::Rect();
+ // TODO(beng):
+ return window_->bounds();
}
gfx::Rect NativeWidgetAura::GetRestoredBounds() const {
- return gfx::Rect();
+ // TODO(beng):
+ return window_->bounds();
}
void NativeWidgetAura::SetBounds(const gfx::Rect& bounds) {
+ window_->SetBounds(bounds, 0);
}
void NativeWidgetAura::SetSize(const gfx::Size& size) {
+ window_->SetBounds(gfx::Rect(window_->bounds().origin(), size), 0);
}
void NativeWidgetAura::SetBoundsConstrained(const gfx::Rect& bounds,
- Widget* other_widget) {
+ Widget* other_widget) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::MoveAbove(gfx::NativeView native_view) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::MoveToTop() {
@@ -164,105 +209,212 @@ void NativeWidgetAura::MoveToTop() {
}
void NativeWidgetAura::SetShape(gfx::NativeRegion region) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::Close() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::CloseNow() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::EnableClose(bool enable) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::Show() {
+ window_->SetVisibility(aura::Window::VISIBILITY_SHOWN);
}
void NativeWidgetAura::Hide() {
+ window_->SetVisibility(aura::Window::VISIBILITY_HIDDEN);
}
void NativeWidgetAura::ShowMaximizedWithBounds(
const gfx::Rect& restored_bounds) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::ShowWithState(ShowState state) {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::IsVisible() const {
- return false;
+ return window_->visibility() != aura::Window::VISIBILITY_HIDDEN;
}
void NativeWidgetAura::Activate() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::Deactivate() {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::IsActive() const {
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::SetAlwaysOnTop(bool on_top) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::Maximize() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::Minimize() {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::IsMaximized() const {
+ NOTIMPLEMENTED();
return false;
}
bool NativeWidgetAura::IsMinimized() const {
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::Restore() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetFullscreen(bool fullscreen) {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::IsFullscreen() const {
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::SetOpacity(unsigned char opacity) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetUseDragFrame(bool use_drag_frame) {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::IsAccessibleWidget() const {
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::RunShellDrag(View* view,
const ui::OSExchangeData& data,
int operation) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::SetCursor(gfx::NativeCursor cursor) {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::ClearNativeFocus() {
+ NOTIMPLEMENTED();
}
void NativeWidgetAura::FocusNativeView(gfx::NativeView native_view) {
+ NOTIMPLEMENTED();
}
bool NativeWidgetAura::ConvertPointFromAncestor(const Widget* ancestor,
gfx::Point* point) const {
- NOTREACHED();
+ NOTIMPLEMENTED();
return false;
}
void NativeWidgetAura::DispatchKeyEventPostIME(const KeyEvent& key) {
+ NOTIMPLEMENTED();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NativeWidgetAura, aura::WindowDelegate implementation:
+
+void NativeWidgetAura::OnPaint(gfx::Canvas* canvas) {
+ delegate_->OnNativeWidgetPaint(canvas);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Widget, public:
+
+// static
+void Widget::NotifyLocaleChanged() {
+ NOTIMPLEMENTED();
+}
+
+// static
+void Widget::CloseAllSecondaryWidgets() {
+ NOTIMPLEMENTED();
+}
+
+bool Widget::ConvertRect(const Widget* source,
+ const Widget* target,
+ gfx::Rect* rect) {
+ return false;
+}
+
+
+
+namespace internal {
+
+////////////////////////////////////////////////////////////////////////////////
+// internal::NativeWidgetPrivate, public:
+
+// static
+NativeWidgetPrivate* NativeWidgetPrivate::CreateNativeWidget(
+ internal::NativeWidgetDelegate* delegate) {
+ return new NativeWidgetAura(delegate);
+}
+
+// static
+NativeWidgetPrivate* NativeWidgetPrivate::GetNativeWidgetForNativeView(
+ gfx::NativeView native_view) {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+// static
+NativeWidgetPrivate* NativeWidgetPrivate::GetNativeWidgetForNativeWindow(
+ gfx::NativeWindow native_window) {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+// static
+NativeWidgetPrivate* NativeWidgetPrivate::GetTopLevelNativeWidget(
+ gfx::NativeView native_view) {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+// static
+void NativeWidgetPrivate::GetAllChildWidgets(gfx::NativeView native_view,
+ Widget::Widgets* children) {
+ NOTIMPLEMENTED();
+}
+
+// static
+void NativeWidgetPrivate::ReparentNativeView(gfx::NativeView native_view,
+ gfx::NativeView new_parent) {
+ NOTIMPLEMENTED();
+}
+
+// static
+bool NativeWidgetPrivate::IsMouseButtonDown() {
+ NOTIMPLEMENTED();
+ return false;
}
+} // namespace internal
} // namespace views
diff --git a/views/widget/native_widget_aura.h b/views/widget/native_widget_aura.h
index ab3ff9c..ad9af1f 100644
--- a/views/widget/native_widget_aura.h
+++ b/views/widget/native_widget_aura.h
@@ -6,11 +6,13 @@
#define VIEWS_WIDGET_NATIVE_WIDGET_AURA_H_
#pragma once
+#include "aura/window_delegate.h"
#include "views/widget/native_widget_private.h"
namespace views {
-class NativeWidgetAura : public internal::NativeWidgetPrivate {
+class NativeWidgetAura : public internal::NativeWidgetPrivate,
+ public aura::WindowDelegate {
public:
explicit NativeWidgetAura(internal::NativeWidgetDelegate* delegate);
virtual ~NativeWidgetAura();
@@ -97,7 +99,14 @@ class NativeWidgetAura : public internal::NativeWidgetPrivate {
const Widget* ancestor, gfx::Point* point) const OVERRIDE;
virtual void DispatchKeyEventPostIME(const KeyEvent& key) OVERRIDE;
+ // Overridden from aura::WindowDelegate:
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+
private:
+ internal::NativeWidgetDelegate* delegate_;
+
+ aura::Window* window_;
+
DISALLOW_COPY_AND_ASSIGN(NativeWidgetAura);
};