| OLD | NEW |
| 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/views/bubble/tray_bubble_view.h" | 5 #include "ui/views/bubble/tray_bubble_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "third_party/skia/include/core/SkCanvas.h" | 9 #include "third_party/skia/include/core/SkCanvas.h" |
| 10 #include "third_party/skia/include/core/SkColor.h" | 10 #include "third_party/skia/include/core/SkColor.h" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 namespace internal { | 49 namespace internal { |
| 50 | 50 |
| 51 // Detects any mouse movement. This is needed to detect mouse movements by the | 51 // Detects any mouse movement. This is needed to detect mouse movements by the |
| 52 // user over the bubble if the bubble got created underneath the cursor. | 52 // user over the bubble if the bubble got created underneath the cursor. |
| 53 class MouseMoveDetectorHost : public MouseWatcherHost { | 53 class MouseMoveDetectorHost : public MouseWatcherHost { |
| 54 public: | 54 public: |
| 55 MouseMoveDetectorHost(); | 55 MouseMoveDetectorHost(); |
| 56 virtual ~MouseMoveDetectorHost(); | 56 virtual ~MouseMoveDetectorHost(); |
| 57 | 57 |
| 58 virtual bool Contains(const gfx::Point& screen_point, | 58 virtual bool Contains(const gfx::Point& screen_point, |
| 59 MouseEventType type) OVERRIDE; | 59 MouseEventType type) override; |
| 60 private: | 60 private: |
| 61 DISALLOW_COPY_AND_ASSIGN(MouseMoveDetectorHost); | 61 DISALLOW_COPY_AND_ASSIGN(MouseMoveDetectorHost); |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 MouseMoveDetectorHost::MouseMoveDetectorHost() { | 64 MouseMoveDetectorHost::MouseMoveDetectorHost() { |
| 65 } | 65 } |
| 66 | 66 |
| 67 MouseMoveDetectorHost::~MouseMoveDetectorHost() { | 67 MouseMoveDetectorHost::~MouseMoveDetectorHost() { |
| 68 } | 68 } |
| 69 | 69 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 87 set_alignment(params.arrow_alignment); | 87 set_alignment(params.arrow_alignment); |
| 88 set_background_color(params.arrow_color); | 88 set_background_color(params.arrow_color); |
| 89 set_paint_arrow(params.arrow_paint_type); | 89 set_paint_arrow(params.arrow_paint_type); |
| 90 } | 90 } |
| 91 | 91 |
| 92 virtual ~TrayBubbleBorder() {} | 92 virtual ~TrayBubbleBorder() {} |
| 93 | 93 |
| 94 // Overridden from BubbleBorder. | 94 // Overridden from BubbleBorder. |
| 95 // Sets the bubble on top of the anchor when it has no arrow. | 95 // Sets the bubble on top of the anchor when it has no arrow. |
| 96 virtual gfx::Rect GetBounds(const gfx::Rect& position_relative_to, | 96 virtual gfx::Rect GetBounds(const gfx::Rect& position_relative_to, |
| 97 const gfx::Size& contents_size) const OVERRIDE { | 97 const gfx::Size& contents_size) const override { |
| 98 if (has_arrow(arrow())) { | 98 if (has_arrow(arrow())) { |
| 99 gfx::Rect rect = | 99 gfx::Rect rect = |
| 100 BubbleBorder::GetBounds(position_relative_to, contents_size); | 100 BubbleBorder::GetBounds(position_relative_to, contents_size); |
| 101 if (first_item_has_no_margin_) { | 101 if (first_item_has_no_margin_) { |
| 102 if (arrow() == BubbleBorder::BOTTOM_RIGHT || | 102 if (arrow() == BubbleBorder::BOTTOM_RIGHT || |
| 103 arrow() == BubbleBorder::BOTTOM_LEFT) { | 103 arrow() == BubbleBorder::BOTTOM_LEFT) { |
| 104 rect.set_y(rect.y() + kArrowOffsetTopBottom); | 104 rect.set_y(rect.y() + kArrowOffsetTopBottom); |
| 105 int rtl_factor = base::i18n::IsRTL() ? -1 : 1; | 105 int rtl_factor = base::i18n::IsRTL() ? -1 : 1; |
| 106 rect.set_x(rect.x() + | 106 rect.set_x(rect.x() + |
| 107 rtl_factor * kOffsetLeftRightForTopBottomOrientation); | 107 rtl_factor * kOffsetLeftRightForTopBottomOrientation); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 // TODO(miket): This does not work on Windows. Implement layer masking or | 175 // TODO(miket): This does not work on Windows. Implement layer masking or |
| 176 // alternate solutions if the TrayBubbleView is needed there in the future. | 176 // alternate solutions if the TrayBubbleView is needed there in the future. |
| 177 class TrayBubbleContentMask : public ui::LayerDelegate { | 177 class TrayBubbleContentMask : public ui::LayerDelegate { |
| 178 public: | 178 public: |
| 179 explicit TrayBubbleContentMask(int corner_radius); | 179 explicit TrayBubbleContentMask(int corner_radius); |
| 180 virtual ~TrayBubbleContentMask(); | 180 virtual ~TrayBubbleContentMask(); |
| 181 | 181 |
| 182 ui::Layer* layer() { return &layer_; } | 182 ui::Layer* layer() { return &layer_; } |
| 183 | 183 |
| 184 // Overridden from LayerDelegate. | 184 // Overridden from LayerDelegate. |
| 185 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; | 185 virtual void OnPaintLayer(gfx::Canvas* canvas) override; |
| 186 virtual void OnDelegatedFrameDamage( | 186 virtual void OnDelegatedFrameDamage( |
| 187 const gfx::Rect& damage_rect_in_dip) OVERRIDE {} | 187 const gfx::Rect& damage_rect_in_dip) override {} |
| 188 virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE; | 188 virtual void OnDeviceScaleFactorChanged(float device_scale_factor) override; |
| 189 virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; | 189 virtual base::Closure PrepareForLayerBoundsChange() override; |
| 190 | 190 |
| 191 private: | 191 private: |
| 192 ui::Layer layer_; | 192 ui::Layer layer_; |
| 193 int corner_radius_; | 193 int corner_radius_; |
| 194 | 194 |
| 195 DISALLOW_COPY_AND_ASSIGN(TrayBubbleContentMask); | 195 DISALLOW_COPY_AND_ASSIGN(TrayBubbleContentMask); |
| 196 }; | 196 }; |
| 197 | 197 |
| 198 TrayBubbleContentMask::TrayBubbleContentMask(int corner_radius) | 198 TrayBubbleContentMask::TrayBubbleContentMask(int corner_radius) |
| 199 : layer_(ui::LAYER_TEXTURED), | 199 : layer_(ui::LAYER_TEXTURED), |
| (...skipping 27 matching lines...) Expand all Loading... |
| 227 class BottomAlignedBoxLayout : public BoxLayout { | 227 class BottomAlignedBoxLayout : public BoxLayout { |
| 228 public: | 228 public: |
| 229 explicit BottomAlignedBoxLayout(TrayBubbleView* bubble_view) | 229 explicit BottomAlignedBoxLayout(TrayBubbleView* bubble_view) |
| 230 : BoxLayout(BoxLayout::kVertical, 0, 0, 0), | 230 : BoxLayout(BoxLayout::kVertical, 0, 0, 0), |
| 231 bubble_view_(bubble_view) { | 231 bubble_view_(bubble_view) { |
| 232 } | 232 } |
| 233 | 233 |
| 234 virtual ~BottomAlignedBoxLayout() {} | 234 virtual ~BottomAlignedBoxLayout() {} |
| 235 | 235 |
| 236 private: | 236 private: |
| 237 virtual void Layout(View* host) OVERRIDE { | 237 virtual void Layout(View* host) override { |
| 238 if (host->height() >= host->GetPreferredSize().height() || | 238 if (host->height() >= host->GetPreferredSize().height() || |
| 239 !bubble_view_->is_gesture_dragging()) { | 239 !bubble_view_->is_gesture_dragging()) { |
| 240 BoxLayout::Layout(host); | 240 BoxLayout::Layout(host); |
| 241 return; | 241 return; |
| 242 } | 242 } |
| 243 | 243 |
| 244 int consumed_height = 0; | 244 int consumed_height = 0; |
| 245 for (int i = host->child_count() - 1; | 245 for (int i = host->child_count() - 1; |
| 246 i >= 0 && consumed_height < host->height(); --i) { | 246 i >= 0 && consumed_height < host->height(); --i) { |
| 247 View* child = host->child_at(i); | 247 View* child = host->child_at(i); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 void TrayBubbleView::ViewHierarchyChanged( | 499 void TrayBubbleView::ViewHierarchyChanged( |
| 500 const ViewHierarchyChangedDetails& details) { | 500 const ViewHierarchyChangedDetails& details) { |
| 501 if (details.is_add && details.child == this) { | 501 if (details.is_add && details.child == this) { |
| 502 details.parent->SetPaintToLayer(true); | 502 details.parent->SetPaintToLayer(true); |
| 503 details.parent->SetFillsBoundsOpaquely(true); | 503 details.parent->SetFillsBoundsOpaquely(true); |
| 504 details.parent->layer()->SetMasksToBounds(true); | 504 details.parent->layer()->SetMasksToBounds(true); |
| 505 } | 505 } |
| 506 } | 506 } |
| 507 | 507 |
| 508 } // namespace views | 508 } // namespace views |
| OLD | NEW |