Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: ui/app_list/views/app_list_view.cc

Issue 276833002: Make the App Info Dialog appear modal (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changed the AppList overlay to be a Background Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/app_list/views/app_list_view.h" 5 #include "ui/app_list/views/app_list_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 10 matching lines...) Expand all
21 #include "ui/app_list/views/app_list_view_observer.h" 21 #include "ui/app_list/views/app_list_view_observer.h"
22 #include "ui/app_list/views/apps_container_view.h" 22 #include "ui/app_list/views/apps_container_view.h"
23 #include "ui/app_list/views/contents_view.h" 23 #include "ui/app_list/views/contents_view.h"
24 #include "ui/app_list/views/search_box_view.h" 24 #include "ui/app_list/views/search_box_view.h"
25 #include "ui/app_list/views/signin_view.h" 25 #include "ui/app_list/views/signin_view.h"
26 #include "ui/app_list/views/speech_view.h" 26 #include "ui/app_list/views/speech_view.h"
27 #include "ui/base/ui_base_switches.h" 27 #include "ui/base/ui_base_switches.h"
28 #include "ui/compositor/layer.h" 28 #include "ui/compositor/layer.h"
29 #include "ui/compositor/layer_animation_observer.h" 29 #include "ui/compositor/layer_animation_observer.h"
30 #include "ui/compositor/scoped_layer_animation_settings.h" 30 #include "ui/compositor/scoped_layer_animation_settings.h"
31 #include "ui/gfx/canvas.h"
31 #include "ui/gfx/image/image_skia.h" 32 #include "ui/gfx/image/image_skia.h"
32 #include "ui/gfx/insets.h" 33 #include "ui/gfx/insets.h"
33 #include "ui/gfx/path.h" 34 #include "ui/gfx/path.h"
34 #include "ui/gfx/skia_util.h" 35 #include "ui/gfx/skia_util.h"
35 #include "ui/views/bubble/bubble_frame_view.h" 36 #include "ui/views/bubble/bubble_frame_view.h"
36 #include "ui/views/bubble/bubble_window_targeter.h" 37 #include "ui/views/bubble/bubble_window_targeter.h"
37 #include "ui/views/controls/textfield/textfield.h" 38 #include "ui/views/controls/textfield/textfield.h"
38 #include "ui/views/layout/fill_layout.h" 39 #include "ui/views/layout/fill_layout.h"
39 #include "ui/views/widget/widget.h" 40 #include "ui/views/widget/widget.h"
40 41
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 switches::kDisableDwmComposition)) { 74 switches::kDisableDwmComposition)) {
74 return false; 75 return false;
75 } 76 }
76 #elif defined(OS_LINUX) && !defined(USE_ASH) 77 #elif defined(OS_LINUX) && !defined(USE_ASH)
77 // Shadows are not supported on (non-ChromeOS) Linux. 78 // Shadows are not supported on (non-ChromeOS) Linux.
78 return false; 79 return false;
79 #endif 80 #endif
80 return true; 81 return true;
81 } 82 }
82 83
84 // An background for a view that appears as a colored rounded rectangle with the
85 // given radius and the same size as the target view.
86 class ColoredRoundRectBackground : public views::Background {
87 public:
88 ColoredRoundRectBackground(int corner_radius, SkColor color)
89 : corner_radius_(corner_radius), color_(color) {};
90 virtual ~ColoredRoundRectBackground() {};
91
92 virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE {
93 SkPaint paint;
94 paint.setStyle(SkPaint::kFill_Style);
95 paint.setColor(color_);
96 canvas->DrawRoundRect(view->GetContentsBounds(), corner_radius_, paint);
97 }
98
99 private:
100 const int corner_radius_;
101 const SkColor color_;
102 };
103
83 } // namespace 104 } // namespace
84 105
85 // An animation observer to hide the view at the end of the animation. 106 // An animation observer to hide the view at the end of the animation.
86 class HideViewAnimationObserver : public ui::ImplicitAnimationObserver { 107 class HideViewAnimationObserver : public ui::ImplicitAnimationObserver {
87 public: 108 public:
88 HideViewAnimationObserver() 109 HideViewAnimationObserver()
89 : frame_(NULL), 110 : frame_(NULL),
90 target_(NULL) { 111 target_(NULL) {
91 } 112 }
92 113
(...skipping 29 matching lines...) Expand all
122 }; 143 };
123 144
124 //////////////////////////////////////////////////////////////////////////////// 145 ////////////////////////////////////////////////////////////////////////////////
125 // AppListView: 146 // AppListView:
126 147
127 AppListView::AppListView(AppListViewDelegate* delegate) 148 AppListView::AppListView(AppListViewDelegate* delegate)
128 : delegate_(delegate), 149 : delegate_(delegate),
129 app_list_main_view_(NULL), 150 app_list_main_view_(NULL),
130 signin_view_(NULL), 151 signin_view_(NULL),
131 speech_view_(NULL), 152 speech_view_(NULL),
153 overlay_view_(NULL),
132 animation_observer_(new HideViewAnimationObserver()) { 154 animation_observer_(new HideViewAnimationObserver()) {
133 CHECK(delegate); 155 CHECK(delegate);
134 156
135 delegate_->AddObserver(this); 157 delegate_->AddObserver(this);
136 delegate_->GetSpeechUI()->AddObserver(this); 158 delegate_->GetSpeechUI()->AddObserver(this);
137 } 159 }
138 160
139 AppListView::~AppListView() { 161 AppListView::~AppListView() {
140 delegate_->GetSpeechUI()->RemoveObserver(this); 162 delegate_->GetSpeechUI()->RemoveObserver(this);
141 delegate_->RemoveObserver(this); 163 delegate_->RemoveObserver(this);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 211
190 void AppListView::Close() { 212 void AppListView::Close() {
191 app_list_main_view_->Close(); 213 app_list_main_view_->Close();
192 delegate_->Dismiss(); 214 delegate_->Dismiss();
193 } 215 }
194 216
195 void AppListView::UpdateBounds() { 217 void AppListView::UpdateBounds() {
196 SizeToContents(); 218 SizeToContents();
197 } 219 }
198 220
221 void AppListView::ShowAppListOverlay(bool visible) {
222 if (overlay_view_ == NULL) {
calamity 2014/05/16 05:54:32 Any reason not to just construct this in the initi
sashab 2014/05/19 07:24:53 Originally I thought it would be a memory leak - i
calamity 2014/05/20 01:25:17 Actually, you're right. Better to DCHECK overlay_v
223 // The contents corner radius is 1px smaller than border corner radius.
224 const int kOverlayCornerRadius =
225 GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius() - 1;
calamity 2014/05/16 05:54:32 Good news! Since this is a view inside the bubble
sashab 2014/05/19 07:24:53 Cool!!!
226 const float kOverlayOpacity = 0.75f;
227
228 // To make the overlay view, construct a regular view with
229 // ColoredRoundRectBackground as the background. This is because we need
230 // overlay_view_ to be drawn to its own layer (so it appears correctly in
231 // the foreground), but we also need a custom Paint() method to draw our
232 // custom rounded rectangle (View::Paint() is not called when
233 // SetPaintToLayer is true).
234 overlay_view_ = new views::View();
235 overlay_view_->SetPaintToLayer(true);
236 overlay_view_->set_background(
237 new ColoredRoundRectBackground(kOverlayCornerRadius, SK_ColorWHITE));
calamity 2014/05/16 05:54:32 That means you can get away with views::Background
sashab 2014/05/19 07:24:53 Nice!! Done.
238 overlay_view_->layer()->SetOpacity(kOverlayOpacity);
239 overlay_view_->SetBoundsRect(bounds());
240
241 // Add this view to the 'front' of the screen (end of the child view list).
242 AddChildViewAt(overlay_view_, this->child_count());
calamity 2014/05/16 05:54:32 This is equivalent to AddChildView().
sashab 2014/05/19 07:24:53 So it is. Thanks.
243 }
244 overlay_view_->SetVisible(visible);
245 }
246
199 bool AppListView::ShouldCenterWindow() const { 247 bool AppListView::ShouldCenterWindow() const {
200 return delegate_->ShouldCenterWindow(); 248 return delegate_->ShouldCenterWindow();
201 } 249 }
202 250
203 gfx::Size AppListView::GetPreferredSize() { 251 gfx::Size AppListView::GetPreferredSize() {
204 return app_list_main_view_->GetPreferredSize(); 252 return app_list_main_view_->GetPreferredSize();
205 } 253 }
206 254
207 void AppListView::Paint(gfx::Canvas* canvas) { 255 void AppListView::Paint(gfx::Canvas* canvas) {
208 views::BubbleDelegateView::Paint(canvas); 256 views::BubbleDelegateView::Paint(canvas);
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 #else 561 #else
514 speech_view_->SetVisible(recognizing); 562 speech_view_->SetVisible(recognizing);
515 app_list_main_view_->SetVisible(!recognizing); 563 app_list_main_view_->SetVisible(!recognizing);
516 564
517 // Needs to schedule paint of AppListView itself, to repaint the background. 565 // Needs to schedule paint of AppListView itself, to repaint the background.
518 GetBubbleFrameView()->SchedulePaint(); 566 GetBubbleFrameView()->SchedulePaint();
519 #endif 567 #endif
520 } 568 }
521 569
522 } // namespace app_list 570 } // namespace app_list
OLDNEW
« chrome/browser/ui/app_list/app_list_service.h ('K') | « ui/app_list/views/app_list_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698