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

Unified 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: Added new browser test 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 side-by-side diff with in-line comments
Download patch
Index: ui/app_list/views/app_list_view.cc
diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc
index 7857271768cc3a70e5e547a038d37ae606946ccc..a2311d3dc39022d47c9f9163fa986890a352d222 100644
--- a/ui/app_list/views/app_list_view.cc
+++ b/ui/app_list/views/app_list_view.cc
@@ -28,6 +28,7 @@
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
+#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/insets.h"
#include "ui/gfx/path.h"
@@ -78,6 +79,28 @@ bool SupportsShadow() {
return true;
}
+// The background for the App List overlay, which appears as a white rounded
+// rectangle with the given radius and the same size as the target view.
+class AppListOverlayBackground : public views::Background {
+ public:
+ AppListOverlayBackground(int corner_radius)
+ : corner_radius_(corner_radius) {};
+ virtual ~AppListOverlayBackground() {};
+
+ // Overridden from views::Background:
+ virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE {
+ SkPaint paint;
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setColor(SK_ColorWHITE);
+ canvas->DrawRoundRect(view->GetContentsBounds(), corner_radius_, paint);
+ }
+
+ private:
+ const int corner_radius_;
+
+ DISALLOW_COPY_AND_ASSIGN(AppListOverlayBackground);
+};
+
} // namespace
// An animation observer to hide the view at the end of the animation.
@@ -127,6 +150,7 @@ AppListView::AppListView(AppListViewDelegate* delegate)
app_list_main_view_(NULL),
signin_view_(NULL),
speech_view_(NULL),
+ overlay_view_(NULL),
animation_observer_(new HideViewAnimationObserver()) {
CHECK(delegate);
@@ -194,6 +218,11 @@ void AppListView::UpdateBounds() {
SizeToContents();
}
+void AppListView::SetAppListOverlayVisible(bool visible) {
+ DCHECK(overlay_view_);
+ overlay_view_->SetVisible(visible);
+}
+
bool AppListView::ShouldCenterWindow() const {
return delegate_->ShouldCenterWindow();
}
@@ -334,6 +363,33 @@ void AppListView::InitAsBubbleInternal(gfx::NativeView parent,
GetWidget()->Hide();
#endif
+ // To make the overlay view, construct a view with a white background, rather
+ // than a white rectangle in it. This is because we need overlay_view_ to be
+ // drawn to its own layer (so it appears correctly in the foreground).
+ const float kOverlayOpacity = 0.75f;
+ overlay_view_ = new views::View();
+ overlay_view_->SetPaintToLayer(true);
+ overlay_view_->layer()->SetOpacity(kOverlayOpacity);
+ overlay_view_->SetBoundsRect(GetContentsBounds());
+ overlay_view_->SetVisible(false);
+
+ if (SupportsShadow()) {
+ overlay_view_->set_background(
+ views::Background::CreateSolidBackground(SK_ColorWHITE));
tapted 2014/05/23 02:09:21 do you still want rounded corners in this case? Ma
sashab 2014/05/23 06:10:21 Okay, after testing this on all platforms, here's
+ } else {
+ // On platforms that don't support a shadow, the rounded border is
+ // constructed _inside_ the view, so a rectangular background goes over the
+ // border in the rounded corners. To fix this, give the background a corner
+ // radius 1px smaller than the outer border, so it just reaches but doesn't
+ // cover it.
+ const int kOverlayCornerRadius =
+ GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius() - 1;
+ overlay_view_->set_background(
+ new AppListOverlayBackground(kOverlayCornerRadius));
+ }
+
+ AddChildView(overlay_view_);
+
if (delegate_)
delegate_->ViewInitialized();
}
« chrome/browser/ui/apps/app_info_dialog.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