OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/strings/string_util.h" | 6 #include "base/strings/string_util.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "mojo/public/cpp/application/application.h" | 8 #include "mojo/public/cpp/application/application.h" |
9 #include "mojo/services/navigation/navigation.mojom.h" | 9 #include "mojo/services/navigation/navigation.mojom.h" |
10 #include "mojo/services/public/cpp/view_manager/node.h" | 10 #include "mojo/services/public/cpp/view_manager/node.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 | 45 |
46 DISALLOW_COPY_AND_ASSIGN(BrowserLayoutManager); | 46 DISALLOW_COPY_AND_ASSIGN(BrowserLayoutManager); |
47 }; | 47 }; |
48 | 48 |
49 // This is the basics of creating a views widget with a textfield. | 49 // This is the basics of creating a views widget with a textfield. |
50 // TODO: cleanup! | 50 // TODO: cleanup! |
51 class Browser : public Application, | 51 class Browser : public Application, |
52 public view_manager::ViewManagerDelegate, | 52 public view_manager::ViewManagerDelegate, |
53 public views::TextfieldController { | 53 public views::TextfieldController { |
54 public: | 54 public: |
55 Browser() : view_manager_(NULL), view_(NULL) {} | 55 Browser() : view_manager_(NULL) {} |
56 | 56 |
57 virtual ~Browser() { | 57 virtual ~Browser() { |
58 } | 58 } |
59 | 59 |
60 private: | 60 private: |
61 // Overridden from Application: | 61 // Overridden from Application: |
62 virtual void Initialize() MOJO_OVERRIDE { | 62 virtual void Initialize() MOJO_OVERRIDE { |
63 views_init_.reset(new ViewsInit); | 63 views_init_.reset(new ViewsInit); |
64 view_manager::ViewManager::Create(this, this); | 64 view_manager::ViewManager::Create(this, this); |
65 ConnectTo("mojo:mojo_window_manager", &navigator_host_); | 65 ConnectTo("mojo:mojo_window_manager", &navigator_host_); |
66 } | 66 } |
67 | 67 |
68 void CreateWidget(const gfx::Size& size) { | 68 void CreateWidget(view_manager::Node* node) { |
69 views::Textfield* textfield = new views::Textfield; | 69 views::Textfield* textfield = new views::Textfield; |
70 textfield->set_controller(this); | 70 textfield->set_controller(this); |
71 | 71 |
72 views::WidgetDelegateView* widget_delegate = new views::WidgetDelegateView; | 72 views::WidgetDelegateView* widget_delegate = new views::WidgetDelegateView; |
73 widget_delegate->GetContentsView()->AddChildView(textfield); | 73 widget_delegate->GetContentsView()->AddChildView(textfield); |
74 widget_delegate->GetContentsView()->SetLayoutManager( | 74 widget_delegate->GetContentsView()->SetLayoutManager( |
75 new BrowserLayoutManager); | 75 new BrowserLayoutManager); |
76 | 76 |
77 views::Widget* widget = new views::Widget; | 77 views::Widget* widget = new views::Widget; |
78 views::Widget::InitParams params( | 78 views::Widget::InitParams params( |
79 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); | 79 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
80 params.native_widget = new NativeWidgetViewManager(widget, view_); | 80 params.native_widget = new NativeWidgetViewManager(widget, node); |
81 params.delegate = widget_delegate; | 81 params.delegate = widget_delegate; |
82 params.bounds = gfx::Rect(size.width(), size.height()); | 82 params.bounds = gfx::Rect(node->bounds().width(), node->bounds().height()); |
83 widget->Init(params); | 83 widget->Init(params); |
84 widget->Show(); | 84 widget->Show(); |
85 textfield->RequestFocus(); | 85 textfield->RequestFocus(); |
86 } | 86 } |
87 | 87 |
88 // view_manager::ViewManagerDelegate: | 88 // view_manager::ViewManagerDelegate: |
89 virtual void OnRootAdded(view_manager::ViewManager* view_manager, | 89 virtual void OnRootAdded(view_manager::ViewManager* view_manager, |
90 view_manager::Node* root) OVERRIDE { | 90 view_manager::Node* root) OVERRIDE { |
91 // TODO: deal with OnRootAdded() being invoked multiple times. | 91 // TODO: deal with OnRootAdded() being invoked multiple times. |
92 view_manager_ = view_manager; | 92 view_manager_ = view_manager; |
93 view_ = view_manager::View::Create(view_manager_); | 93 root->SetActiveView(view_manager::View::Create(view_manager)); |
94 view_manager_->GetRoots().front()->SetActiveView(view_); | |
95 root->SetFocus(); | 94 root->SetFocus(); |
96 CreateWidget(root->bounds().size()); | 95 CreateWidget(root); |
97 } | 96 } |
98 | 97 |
99 // views::TextfieldController: | 98 // views::TextfieldController: |
100 virtual bool HandleKeyEvent(views::Textfield* sender, | 99 virtual bool HandleKeyEvent(views::Textfield* sender, |
101 const ui::KeyEvent& key_event) OVERRIDE { | 100 const ui::KeyEvent& key_event) OVERRIDE { |
102 if (key_event.key_code() == ui::VKEY_RETURN) { | 101 if (key_event.key_code() == ui::VKEY_RETURN) { |
103 GURL url(sender->text()); | 102 GURL url(sender->text()); |
104 printf("User entered this URL: %s\n", url.spec().c_str()); | 103 printf("User entered this URL: %s\n", url.spec().c_str()); |
105 navigation::NavigationDetailsPtr nav_details( | 104 navigation::NavigationDetailsPtr nav_details( |
106 navigation::NavigationDetails::New()); | 105 navigation::NavigationDetails::New()); |
(...skipping 10 matching lines...) Expand all Loading... |
117 if (EndsWith(new_contents, base::ASCIIToUTF16("]"), false)) { | 116 if (EndsWith(new_contents, base::ASCIIToUTF16("]"), false)) { |
118 sender->SetText(new_contents.substr(0, new_contents.size() - 1)); | 117 sender->SetText(new_contents.substr(0, new_contents.size() - 1)); |
119 HandleKeyEvent(sender, ui::KeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_RETURN, | 118 HandleKeyEvent(sender, ui::KeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_RETURN, |
120 0, false)); | 119 0, false)); |
121 } | 120 } |
122 } | 121 } |
123 | 122 |
124 scoped_ptr<ViewsInit> views_init_; | 123 scoped_ptr<ViewsInit> views_init_; |
125 | 124 |
126 view_manager::ViewManager* view_manager_; | 125 view_manager::ViewManager* view_manager_; |
127 view_manager::View* view_; | |
128 navigation::NavigatorHostPtr navigator_host_; | 126 navigation::NavigatorHostPtr navigator_host_; |
129 | 127 |
130 DISALLOW_COPY_AND_ASSIGN(Browser); | 128 DISALLOW_COPY_AND_ASSIGN(Browser); |
131 }; | 129 }; |
132 | 130 |
133 } // namespace examples | 131 } // namespace examples |
134 | 132 |
135 // static | 133 // static |
136 Application* Application::Create() { | 134 Application* Application::Create() { |
137 return new examples::Browser; | 135 return new examples::Browser; |
138 } | 136 } |
139 | 137 |
140 } // namespace mojo | 138 } // namespace mojo |
OLD | NEW |