1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
// 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 "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 "ui/aura/root_window.h"
#include "ui/aura_shell/examples/toplevel_window.h"
#include "ui/aura_shell/launcher/launcher_types.h"
#include "ui/aura_shell/shell.h"
#include "ui/aura_shell/shell_delegate.h"
#include "ui/aura_shell/shell_factory.h"
#include "ui/aura_shell/window_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/ui_base_paths.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/compositor/test/compositor_test_support.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
namespace {
class AppListWindow : public views::WidgetDelegateView {
public:
AppListWindow() {
}
// static
static views::Widget* Create(const gfx::Rect& bounds) {
AppListWindow* app_list = new AppListWindow;
views::Widget::InitParams widget_params(
views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
widget_params.bounds = bounds;
widget_params.delegate = app_list;
widget_params.keep_on_top = true;
widget_params.transparent = true;
views::Widget* widget = new views::Widget;
widget->Init(widget_params);
widget->SetContentsView(app_list);
return widget;
}
// Overridden from views::View:
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
canvas->FillRect(SkColorSetARGB(0x4F, 0xFF, 0, 0), bounds());
}
};
class ShellDelegateImpl : public aura_shell::ShellDelegate {
public:
ShellDelegateImpl() {
}
virtual void CreateNewWindow() OVERRIDE {
aura_shell::examples::ToplevelWindow::CreateParams create_params;
create_params.can_resize = true;
create_params.can_maximize = true;
aura_shell::examples::ToplevelWindow::CreateToplevelWindow(create_params);
}
virtual views::Widget* CreateStatusArea() OVERRIDE {
return aura_shell::internal::CreateStatusArea();
}
virtual void RequestAppListWidget(
const gfx::Rect& bounds,
const SetWidgetCallback& callback) OVERRIDE {
callback.Run(AppListWindow::Create(bounds));
}
virtual void LauncherItemClicked(
const aura_shell::LauncherItem& item) OVERRIDE {
aura_shell::ActivateWindow(item.window);
}
virtual bool ConfigureLauncherItem(aura_shell::LauncherItem* item) OVERRIDE {
static int image_count = 0;
item->tab_images.resize(image_count + 1);
for (int i = 0; i < image_count + 1; ++i) {
item->tab_images[i].image.setConfig(SkBitmap::kARGB_8888_Config, 16, 16);
item->tab_images[i].image.allocPixels();
item->tab_images[i].image.eraseARGB(255,
i == 0 ? 255 : 0,
i == 1 ? 255 : 0,
i == 2 ? 255 : 0);
}
image_count = (image_count + 1) % 3;
return true; // Makes the entry show up in the launcher.
}
};
} // namespace
namespace aura_shell {
namespace examples {
void InitWindowTypeLauncher();
} // namespace examples
} // namespace aura_shell
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");
// Create the message-loop here before creating the root window.
MessageLoop message_loop(MessageLoop::TYPE_UI);
ui::CompositorTestSupport::Initialize();
aura_shell::Shell::CreateInstance(new ShellDelegateImpl);
aura_shell::examples::InitWindowTypeLauncher();
aura::RootWindow::GetInstance()->Run();
aura_shell::Shell::DeleteInstance();
aura::RootWindow::DeleteInstance();
ui::CompositorTestSupport::Terminate();
return 0;
}
|