| Index: views/bubble/border_contents_view.cc
|
| diff --git a/views/bubble/border_contents_view.cc b/views/bubble/border_contents_view.cc
|
| deleted file mode 100644
|
| index 67c893ae1d8f6a751277079240941e58e5f03b54..0000000000000000000000000000000000000000
|
| --- a/views/bubble/border_contents_view.cc
|
| +++ /dev/null
|
| @@ -1,185 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "views/bubble/border_contents_view.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "ui/gfx/screen.h"
|
| -
|
| -static const int kTopMargin = 6;
|
| -static const int kLeftMargin = 6;
|
| -static const int kBottomMargin = 6;
|
| -static const int kRightMargin = 6;
|
| -
|
| -namespace {
|
| -
|
| -// Computes how much |window_bounds| is off-screen of the monitor bounds
|
| -// |monitor_bounds| and puts the values in |offscreen_insets|.
|
| -// Returns false if |window_bounds| is actually contained in |monitor_bounds|,
|
| -// in which case |offscreen_insets| is not modified.
|
| -bool ComputeOffScreenInsets(const gfx::Rect& monitor_bounds,
|
| - const gfx::Rect& window_bounds,
|
| - gfx::Insets* offscreen_insets) {
|
| - if (monitor_bounds.Contains(window_bounds))
|
| - return false;
|
| -
|
| - if (!offscreen_insets)
|
| - return true;
|
| -
|
| - // window_bounds
|
| - // +-------------------------------+
|
| - // | top |
|
| - // | +----------------+ |
|
| - // | left | monitor_bounds | right |
|
| - // | +----------------+ |
|
| - // | bottom |
|
| - // +-------------------------------+
|
| - int top = std::max(0, monitor_bounds.y() - window_bounds.y());
|
| - int left = std::max(0, monitor_bounds.x() - window_bounds.x());
|
| - int bottom = std::max(0, window_bounds.bottom() - monitor_bounds.bottom());
|
| - int right = std::max(0, window_bounds.right() - monitor_bounds.right());
|
| -
|
| - offscreen_insets->Set(top, left, bottom, right);
|
| - return true;
|
| -}
|
| -
|
| -// Convenience method that returns the height of |insets| if |vertical| is
|
| -// true, its width otherwise.
|
| -int GetInsetsLength(const gfx::Insets& insets, bool vertical) {
|
| - return vertical ? insets.height() : insets.width();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace views {
|
| -
|
| -BorderContentsView::BorderContentsView()
|
| - : bubble_border_(NULL),
|
| - content_margins_(kTopMargin, kLeftMargin, kBottomMargin, kRightMargin) {
|
| -}
|
| -
|
| -BorderContentsView::BorderContentsView(int top_margin,
|
| - int left_margin,
|
| - int bottom_margin,
|
| - int right_margin)
|
| - : bubble_border_(NULL),
|
| - content_margins_(top_margin, left_margin, bottom_margin, right_margin) {
|
| -}
|
| -
|
| -BorderContentsView::~BorderContentsView() {}
|
| -
|
| -void BorderContentsView::Init() {
|
| - // Default arrow location.
|
| - BubbleBorder::ArrowLocation arrow_location =
|
| - BubbleBorder::TOP_LEFT;
|
| - if (base::i18n::IsRTL())
|
| - arrow_location = BubbleBorder::horizontal_mirror(arrow_location);
|
| - DCHECK(!bubble_border_);
|
| -
|
| - // TODO(alicet): Expose the shadow option in BorderContentsView when we make
|
| - // the fullscreen exit bubble use the new bubble code.
|
| - bubble_border_ = new BubbleBorder(arrow_location,
|
| - views::BubbleBorder::NO_SHADOW);
|
| - set_border(bubble_border_);
|
| - set_background(new BubbleBackground(bubble_border_));
|
| -}
|
| -
|
| -void BorderContentsView::SetBackgroundColor(SkColor color) {
|
| - bubble_border_->set_background_color(color);
|
| -}
|
| -
|
| -void BorderContentsView::SetAlignment(
|
| - views::BubbleBorder::BubbleAlignment alignment) {
|
| - bubble_border_->set_alignment(alignment);
|
| -}
|
| -
|
| -void BorderContentsView::SizeAndGetBounds(
|
| - const gfx::Rect& position_relative_to,
|
| - BubbleBorder::ArrowLocation arrow_location,
|
| - bool allow_bubble_offscreen,
|
| - const gfx::Size& contents_size,
|
| - gfx::Rect* contents_bounds,
|
| - gfx::Rect* window_bounds) {
|
| - if (base::i18n::IsRTL())
|
| - arrow_location = BubbleBorder::horizontal_mirror(arrow_location);
|
| - bubble_border_->set_arrow_location(arrow_location);
|
| - // Set the border.
|
| - set_border(bubble_border_);
|
| -
|
| - // Give the contents a margin.
|
| - gfx::Size local_contents_size(contents_size);
|
| - local_contents_size.Enlarge(content_margins_.width(),
|
| - content_margins_.height());
|
| -
|
| - // Try putting the arrow in its initial location, and calculating the bounds.
|
| - *window_bounds =
|
| - bubble_border_->GetBounds(position_relative_to, local_contents_size);
|
| - if (!allow_bubble_offscreen) {
|
| - gfx::Rect monitor_bounds = GetMonitorBounds(position_relative_to);
|
| - if (!monitor_bounds.IsEmpty()) {
|
| - // Try to resize vertically if this does not fit on the screen.
|
| - MirrorArrowIfOffScreen(true, // |vertical|.
|
| - position_relative_to, monitor_bounds,
|
| - local_contents_size, &arrow_location,
|
| - window_bounds);
|
| - // Then try to resize horizontally if it still does not fit on the screen.
|
| - MirrorArrowIfOffScreen(false, // |vertical|.
|
| - position_relative_to, monitor_bounds,
|
| - local_contents_size, &arrow_location,
|
| - window_bounds);
|
| - }
|
| - }
|
| -
|
| - // Calculate the bounds of the contained contents (in window coordinates) by
|
| - // subtracting the border dimensions and margin amounts.
|
| - *contents_bounds = gfx::Rect(gfx::Point(), window_bounds->size());
|
| - gfx::Insets insets;
|
| - bubble_border_->GetInsets(&insets);
|
| - insets += content_margins_;
|
| - contents_bounds->Inset(insets);
|
| -}
|
| -
|
| -gfx::Rect BorderContentsView::GetMonitorBounds(const gfx::Rect& rect) {
|
| - return gfx::Screen::GetMonitorWorkAreaNearestPoint(rect.CenterPoint());
|
| -}
|
| -
|
| -void BorderContentsView::MirrorArrowIfOffScreen(
|
| - bool vertical,
|
| - const gfx::Rect& position_relative_to,
|
| - const gfx::Rect& monitor_bounds,
|
| - const gfx::Size& local_contents_size,
|
| - BubbleBorder::ArrowLocation* arrow_location,
|
| - gfx::Rect* window_bounds) {
|
| - // If the bounds don't fit, move the arrow to its mirrored position to see if
|
| - // it improves things.
|
| - gfx::Insets offscreen_insets;
|
| - if (ComputeOffScreenInsets(monitor_bounds, *window_bounds,
|
| - &offscreen_insets) &&
|
| - GetInsetsLength(offscreen_insets, vertical) > 0) {
|
| - BubbleBorder::ArrowLocation original_arrow_location =
|
| - *arrow_location;
|
| - *arrow_location =
|
| - vertical ? BubbleBorder::vertical_mirror(*arrow_location) :
|
| - BubbleBorder::horizontal_mirror(*arrow_location);
|
| -
|
| - // Change the arrow and get the new bounds.
|
| - bubble_border_->set_arrow_location(*arrow_location);
|
| - *window_bounds = bubble_border_->GetBounds(position_relative_to,
|
| - local_contents_size);
|
| - gfx::Insets new_offscreen_insets;
|
| - // If there is more of the window offscreen, we'll keep the old arrow.
|
| - if (ComputeOffScreenInsets(monitor_bounds, *window_bounds,
|
| - &new_offscreen_insets) &&
|
| - GetInsetsLength(new_offscreen_insets, vertical) >=
|
| - GetInsetsLength(offscreen_insets, vertical)) {
|
| - *arrow_location = original_arrow_location;
|
| - bubble_border_->set_arrow_location(*arrow_location);
|
| - *window_bounds = bubble_border_->GetBounds(position_relative_to,
|
| - local_contents_size);
|
| - }
|
| - }
|
| -}
|
| -
|
| -} // namespace views
|
|
|