blob: 46dbe727fda248b3c3eb15cf3407de9629d5417e [file] [log] [blame]
[email protected]538f9562012-01-17 17:46:041// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]81585f32011-07-29 19:32:062// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]81585f32011-07-29 19:32:065#include "base/at_exit.h"
6#include "base/command_line.h"
7#include "base/i18n/icu_util.h"
8#include "base/memory/scoped_ptr.h"
[email protected]905e19a2011-09-07 02:17:539#include "base/message_loop.h"
[email protected]81585f32011-07-29 19:32:0610#include "third_party/skia/include/core/SkXfermode.h"
[email protected]48dea152012-11-02 20:26:4611#include "ui/aura/client/default_capture_client.h"
[email protected]b370f4f2012-03-12 20:16:2312#include "ui/aura/client/stacking_client.h"
[email protected]e050ef142012-03-21 01:04:2413#include "ui/aura/env.h"
[email protected]f0e90a42012-03-13 23:05:5714#include "ui/aura/root_window.h"
[email protected]153472d72012-09-04 21:33:0215#include "ui/aura/single_display_manager.h"
[email protected]dbf3d402011-09-14 21:32:1616#include "ui/aura/window.h"
17#include "ui/aura/window_delegate.h"
[email protected]153472d72012-09-04 21:33:0218#include "ui/base/events/event.h"
[email protected]912be0e2011-11-09 19:05:2419#include "ui/base/hit_test.h"
[email protected]81585f32011-07-29 19:32:0620#include "ui/base/resource/resource_bundle.h"
[email protected]e599f0132011-08-24 19:03:3521#include "ui/base/ui_base_paths.h"
[email protected]116302fc2012-05-05 21:45:4122#include "ui/compositor/test/compositor_test_support.h"
[email protected]94a0d2582012-03-09 00:30:5923#include "ui/gfx/canvas.h"
[email protected]81585f32011-07-29 19:32:0624#include "ui/gfx/rect.h"
[email protected]81585f32011-07-29 19:32:0625
[email protected]4a6bef32011-09-07 02:06:0126#if defined(USE_X11)
[email protected]1a24da52012-05-29 23:25:3827#include "base/message_pump_aurax11.h"
[email protected]4a6bef32011-09-07 02:06:0128#endif
29
[email protected]81585f32011-07-29 19:32:0630namespace {
31
[email protected]8d8c7732011-08-25 22:35:1332// Trivial WindowDelegate implementation that draws a colored background.
[email protected]81585f32011-07-29 19:32:0633class DemoWindowDelegate : public aura::WindowDelegate {
34 public:
[email protected]8d8c7732011-08-25 22:35:1335 explicit DemoWindowDelegate(SkColor color) : color_(color) {}
[email protected]81585f32011-07-29 19:32:0636
[email protected]8dd791d2011-09-16 16:37:3037 // Overridden from WindowDelegate:
[email protected]17a6cb952011-11-22 23:04:3838 virtual gfx::Size GetMinimumSize() const OVERRIDE {
39 return gfx::Size();
40 }
[email protected]8dd791d2011-09-16 16:37:3041 virtual void OnBoundsChanged(const gfx::Rect& old_bounds,
42 const gfx::Rect& new_bounds) OVERRIDE {}
[email protected]87a4b992012-06-18 23:27:4043 virtual void OnFocus(aura::Window* old_focused_window) OVERRIDE {}
[email protected]c94f8592011-09-02 20:12:1344 virtual void OnBlur() OVERRIDE {}
[email protected]0207c92d2011-10-04 14:45:0745 virtual gfx::NativeCursor GetCursor(const gfx::Point& point) OVERRIDE {
[email protected]9e591cb2011-10-17 18:14:3246 return gfx::kNullCursor;
[email protected]0207c92d2011-10-04 14:45:0747 }
[email protected]eaf6dd52011-09-02 00:39:2648 virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
49 return HTCAPTION;
50 }
[email protected]334b81892012-06-16 16:38:1451 virtual bool ShouldDescendIntoChildForEventHandling(
52 aura::Window* child,
53 const gfx::Point& location) OVERRIDE {
54 return true;
55 }
[email protected]a8bb96702011-12-03 22:17:4056 virtual bool CanFocus() OVERRIDE { return true; }
[email protected]70ccf702011-09-22 18:15:5857 virtual void OnCaptureLost() OVERRIDE {}
[email protected]8d8c7732011-08-25 22:35:1358 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
[email protected]6fae7972012-04-10 20:12:0859 canvas->DrawColor(color_, SkXfermode::kSrc_Mode);
[email protected]8d8c7732011-08-25 22:35:1360 }
[email protected]d3f5bbc12012-05-17 00:09:0461 virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {}
[email protected]658600e2011-09-07 21:16:2162 virtual void OnWindowDestroying() OVERRIDE {}
63 virtual void OnWindowDestroyed() OVERRIDE {}
[email protected]ab8f86b2012-07-30 14:38:5064 virtual void OnWindowTargetVisibilityChanged(bool visible) OVERRIDE {}
[email protected]ec0c94a2012-06-16 05:10:2565 virtual bool HasHitTestMask() const OVERRIDE { return false; }
66 virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE {}
[email protected]b6ea1c12012-09-13 17:28:5067 scoped_refptr<ui::Texture> CopyTexture() {
68 return scoped_refptr<ui::Texture>();
69 }
[email protected]970aa362011-08-30 20:03:3470
[email protected]fa9faf52012-09-07 02:31:0871 // Overridden from ui::EventHandler:
72 virtual ui::EventResult OnKeyEvent(ui::KeyEvent* event) OVERRIDE {
73 return ui::ER_UNHANDLED;
74 }
75 virtual ui::EventResult OnMouseEvent(ui::MouseEvent* event) OVERRIDE {
76 return ui::ER_HANDLED;
77 }
[email protected]58bbb2012012-09-27 17:25:5278 virtual ui::EventResult OnTouchEvent(ui::TouchEvent* event) OVERRIDE {
79 return ui::ER_UNHANDLED;
[email protected]fa9faf52012-09-07 02:31:0880 }
81 virtual ui::EventResult OnGestureEvent(ui::GestureEvent* event) OVERRIDE {
82 return ui::ER_UNHANDLED;
83 }
84
[email protected]81585f32011-07-29 19:32:0685 private:
[email protected]b1b155512011-08-18 22:47:5086 SkColor color_;
87
[email protected]81585f32011-07-29 19:32:0688 DISALLOW_COPY_AND_ASSIGN(DemoWindowDelegate);
89};
90
[email protected]b370f4f2012-03-12 20:16:2391class DemoStackingClient : public aura::client::StackingClient {
92 public:
93 explicit DemoStackingClient(aura::RootWindow* root_window)
94 : root_window_(root_window) {
95 aura::client::SetStackingClient(this);
96 }
97
98 virtual ~DemoStackingClient() {
99 aura::client::SetStackingClient(NULL);
100 }
101
102 // Overridden from aura::client::StackingClient:
[email protected]d8f10042012-11-14 01:10:46103 virtual aura::Window* GetDefaultParent(aura::Window* context,
104 aura::Window* window,
[email protected]20c59762012-06-23 01:10:24105 const gfx::Rect& bounds) OVERRIDE {
[email protected]be2a0ac2012-07-24 11:23:22106 if (!capture_client_.get()) {
107 capture_client_.reset(
[email protected]48dea152012-11-02 20:26:46108 new aura::client::DefaultCaptureClient(root_window_));
[email protected]be2a0ac2012-07-24 11:23:22109 }
[email protected]b370f4f2012-03-12 20:16:23110 return root_window_;
111 }
112
113 private:
114 aura::RootWindow* root_window_;
115
[email protected]48dea152012-11-02 20:26:46116 scoped_ptr<aura::client::DefaultCaptureClient> capture_client_;
[email protected]be2a0ac2012-07-24 11:23:22117
[email protected]b370f4f2012-03-12 20:16:23118 DISALLOW_COPY_AND_ASSIGN(DemoStackingClient);
119};
[email protected]81585f32011-07-29 19:32:06120
[email protected]f7a0b4d22012-09-18 16:31:01121int DemoMain() {
[email protected]99f07e02011-12-07 00:02:59122 // Create the message-loop here before creating the root window.
[email protected]905e19a2011-09-07 02:17:53123 MessageLoop message_loop(MessageLoop::TYPE_UI);
[email protected]9783633c2011-10-27 15:41:52124 ui::CompositorTestSupport::Initialize();
[email protected]2e236a52012-06-27 22:21:47125 aura::Env::GetInstance()->SetDisplayManager(new aura::SingleDisplayManager);
[email protected]e050ef142012-03-21 01:04:24126 scoped_ptr<aura::RootWindow> root_window(
[email protected]2e236a52012-06-27 22:21:47127 aura::DisplayManager::CreateRootWindowForPrimaryDisplay());
[email protected]b370f4f2012-03-12 20:16:23128 scoped_ptr<DemoStackingClient> stacking_client(new DemoStackingClient(
129 root_window.get()));
[email protected]81585f32011-07-29 19:32:06130
[email protected]b1b155512011-08-18 22:47:50131 // Create a hierarchy of test windows.
[email protected]8d8c7732011-08-25 22:35:13132 DemoWindowDelegate window_delegate1(SK_ColorBLUE);
133 aura::Window window1(&window_delegate1);
[email protected]b1b155512011-08-18 22:47:50134 window1.set_id(1);
[email protected]595b52a2012-03-23 16:17:24135 window1.Init(ui::LAYER_TEXTURED);
[email protected]7fca53d42011-09-29 15:38:12136 window1.SetBounds(gfx::Rect(100, 100, 400, 400));
[email protected]a3929aba2011-09-30 18:30:17137 window1.Show();
[email protected]8d8c7732011-08-25 22:35:13138 window1.SetParent(NULL);
[email protected]b1b155512011-08-18 22:47:50139
[email protected]8d8c7732011-08-25 22:35:13140 DemoWindowDelegate window_delegate2(SK_ColorRED);
141 aura::Window window2(&window_delegate2);
[email protected]b1b155512011-08-18 22:47:50142 window2.set_id(2);
[email protected]595b52a2012-03-23 16:17:24143 window2.Init(ui::LAYER_TEXTURED);
[email protected]7fca53d42011-09-29 15:38:12144 window2.SetBounds(gfx::Rect(200, 200, 350, 350));
[email protected]a3929aba2011-09-30 18:30:17145 window2.Show();
[email protected]8d8c7732011-08-25 22:35:13146 window2.SetParent(NULL);
[email protected]b1b155512011-08-18 22:47:50147
[email protected]8d8c7732011-08-25 22:35:13148 DemoWindowDelegate window_delegate3(SK_ColorGREEN);
149 aura::Window window3(&window_delegate3);
[email protected]b1b155512011-08-18 22:47:50150 window3.set_id(3);
[email protected]595b52a2012-03-23 16:17:24151 window3.Init(ui::LAYER_TEXTURED);
[email protected]7fca53d42011-09-29 15:38:12152 window3.SetBounds(gfx::Rect(10, 10, 50, 50));
[email protected]a3929aba2011-09-30 18:30:17153 window3.Show();
[email protected]8d8c7732011-08-25 22:35:13154 window3.SetParent(&window2);
[email protected]b1b155512011-08-18 22:47:50155
[email protected]58482fa2012-03-02 14:57:39156 root_window->ShowRootWindow();
[email protected]01c5bab2012-02-25 02:37:43157 MessageLoopForUI::current()->Run();
[email protected]9783633c2011-10-27 15:41:52158
159 ui::CompositorTestSupport::Terminate();
160
[email protected]81585f32011-07-29 19:32:06161 return 0;
162}
[email protected]f7a0b4d22012-09-18 16:31:01163
[email protected]f7a0b4d22012-09-18 16:31:01164} // namespace
165
166int main(int argc, char** argv) {
167 CommandLine::Init(argc, argv);
168
169 // The exit manager is in charge of calling the dtors of singleton objects.
170 base::AtExitManager exit_manager;
171
172 ui::RegisterPathProvider();
173 icu_util::Initialize();
174 ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
175
[email protected]56deede2012-10-01 21:25:12176 return DemoMain();
[email protected]f7a0b4d22012-09-18 16:31:01177}