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

Unified Diff: views/bubble/border_contents_view.cc

Issue 8588064: views: Move bubble, events, focus and layout to ui/views/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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
« no previous file with comments | « views/bubble/border_contents_view.h ('k') | views/bubble/bubble_border.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « views/bubble/border_contents_view.h ('k') | views/bubble/bubble_border.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698