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

Unified Diff: ui/views/bubble/bubble_frame_view.cc

Issue 1633403002: MacViews: Add native drop shadow to dialogs on OSX < 10.10. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/views/bubble/bubble_frame_view.cc
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index b11ee79c6f1d4f79990482f5e17aeca8e8a753ea..a59d195249864244a2952316fb52e5623c1362e6 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -152,28 +152,45 @@ int BubbleFrameView::NonClientHitTest(const gfx::Point& point) {
void BubbleFrameView::GetWindowMask(const gfx::Size& size,
gfx::Path* window_mask) {
// NOTE: this only provides implementations for the types used by dialogs.
- if ((bubble_border_->arrow() != BubbleBorder::NONE &&
- bubble_border_->arrow() != BubbleBorder::FLOAT) ||
- (bubble_border_->shadow() != BubbleBorder::SMALL_SHADOW &&
- bubble_border_->shadow() != BubbleBorder::NO_SHADOW_OPAQUE_BORDER))
- return;
+ bool is_dialog_shadow =
+ bubble_border_->shadow() == BubbleBorder::SMALL_SHADOW ||
+ bubble_border_->shadow() == BubbleBorder::NO_SHADOW_OPAQUE_BORDER;
+ bool is_arrow_type_ok = bubble_border_->arrow() == BubbleBorder::NONE ||
+ bubble_border_->arrow() == BubbleBorder::FLOAT;
- // Use a window mask roughly matching the border in the image assets.
- static const int kBorderStrokeSize = 1;
- static const SkScalar kCornerRadius = SkIntToScalar(6);
- const gfx::Insets border_insets = bubble_border_->GetInsets();
- SkRect rect = { SkIntToScalar(border_insets.left() - kBorderStrokeSize),
- SkIntToScalar(border_insets.top() - kBorderStrokeSize),
- SkIntToScalar(size.width() - border_insets.right() +
- kBorderStrokeSize),
- SkIntToScalar(size.height() - border_insets.bottom() +
- kBorderStrokeSize) };
- if (bubble_border_->shadow() == BubbleBorder::NO_SHADOW_OPAQUE_BORDER) {
- window_mask->addRoundRect(rect, kCornerRadius, kCornerRadius);
- } else {
- static const int kBottomBorderShadowSize = 2;
- rect.fBottom += SkIntToScalar(kBottomBorderShadowSize);
- window_mask->addRect(rect);
+#if defined(OS_MACOSX)
+ // On Mac versions earlier than Yosemite, GetWindowMask() is used to define
+ // the window boundary. Hence on Mac, we provide mask for bubbles with arrows.
+ is_arrow_type_ok = true;
+ // On Mac, BubbleBorder::NO_ASSETS is used as the border type for dialogs.
+ is_dialog_shadow = is_dialog_shadow || BubbleBorder::NO_ASSETS;
+#endif // OS_MACOSX
tapted 2016/01/28 05:59:22 What actually needed to change for the bookmark bu
karandeepb 2016/02/04 03:39:28 We also need to return a mask for bubbles with arr
+
+ if (is_dialog_shadow && is_arrow_type_ok) {
tapted 2016/01/28 05:59:22 There's a Chrome idiom "prefer early returns" for
karandeepb 2016/02/04 03:39:28 Done.
+ // Use a window mask roughly matching the border in the image assets.
+ const int kBorderStrokeSize =
+ bubble_border_->shadow() == BubbleBorder::NO_ASSETS ? 0 : 1;
+ const SkScalar kCornerRadius =
+ SkIntToScalar(bubble_border_->GetBorderCornerRadius());
+ const gfx::Insets border_insets = bubble_border_->GetInsets();
+ SkRect rect = {
+ SkIntToScalar(border_insets.left() - kBorderStrokeSize),
+ SkIntToScalar(border_insets.top() - kBorderStrokeSize),
+ SkIntToScalar(size.width() - border_insets.right() + kBorderStrokeSize),
+ SkIntToScalar(size.height() - border_insets.bottom() +
+ kBorderStrokeSize)};
+
+ if (bubble_border_->shadow() == BubbleBorder::NO_SHADOW_OPAQUE_BORDER ||
+ bubble_border_->shadow() == BubbleBorder::NO_ASSETS) {
+ window_mask->addRoundRect(rect, kCornerRadius, kCornerRadius);
+ } else {
+ static const int kBottomBorderShadowSize = 2;
+ rect.fBottom += SkIntToScalar(kBottomBorderShadowSize);
+ window_mask->addRect(rect);
+ }
+ gfx::Path arrow_mask;
+ bubble_border_->GetArrowMask(gfx::Rect(size), &arrow_mask);
+ window_mask->addPath(arrow_mask, 0, 0);
tapted 2016/01/28 05:59:22 Should GetArrowMask/Path return a bool? (adding an
karandeepb 2016/02/04 03:39:28 Done.
}
}

Powered by Google App Engine
This is Rietveld 408576698