diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-25 22:35:13 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-25 22:35:13 +0000 |
commit | 8d8c773c297d22dbf01e2bbb69b7335f52208845 (patch) | |
tree | d45e8affaa57b2dd2516e14c03c3a5f9238247f0 | |
parent | 93543752960447decfc8f0ca38ef9f44f7209cfd (diff) | |
download | chromium_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.cc | 62 | ||||
-rw-r--r-- | aura/desktop.cc | 29 | ||||
-rw-r--r-- | aura/desktop.h | 12 | ||||
-rw-r--r-- | aura/window.cc | 30 | ||||
-rw-r--r-- | aura/window.h | 14 | ||||
-rw-r--r-- | aura/window_delegate.h | 9 | ||||
-rw-r--r-- | ui/gfx/canvas_skia.cc | 4 | ||||
-rw-r--r-- | ui/gfx/screen_aura.cc | 55 | ||||
-rw-r--r-- | ui/ui.gyp | 6 | ||||
-rw-r--r-- | views/DEPS | 1 | ||||
-rw-r--r-- | views/aura_desktop/aura_desktop_main.cc | 106 | ||||
-rw-r--r-- | views/controls/menu/menu_controller.cc | 10 | ||||
-rw-r--r-- | views/focus/accelerator_handler_aura.cc | 20 | ||||
-rw-r--r-- | views/view_aura.cc | 21 | ||||
-rw-r--r-- | views/views.gyp | 59 | ||||
-rw-r--r-- | views/widget/native_widget_aura.cc | 178 | ||||
-rw-r--r-- | views/widget/native_widget_aura.h | 11 |
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 @@ -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. @@ -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); }; |