summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/pinned_contents_info_bubble.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/views/pinned_contents_info_bubble.cc')
-rw-r--r--chrome/browser/ui/views/pinned_contents_info_bubble.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/chrome/browser/ui/views/pinned_contents_info_bubble.cc b/chrome/browser/ui/views/pinned_contents_info_bubble.cc
new file mode 100644
index 0000000..c064c16
--- /dev/null
+++ b/chrome/browser/ui/views/pinned_contents_info_bubble.cc
@@ -0,0 +1,53 @@
+// Copyright (c) 2010 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 "chrome/browser/views/pinned_contents_info_bubble.h"
+
+#include "chrome/browser/views/bubble_border.h"
+
+void PinnedContentsBorderContents::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) {
+ // Arrow offset is calculated from the middle of the |position_relative_to|.
+ int offset = position_relative_to.x() + (position_relative_to.width() / 2);
+ offset -= bubble_anchor_.x();
+
+ gfx::Insets insets;
+ bubble_border_->GetInsets(&insets);
+ offset += kLeftMargin + insets.left() + 1;
+ bubble_border_->SetArrowOffset(offset, contents_size);
+
+ BorderContents::SizeAndGetBounds(
+ position_relative_to, arrow_location,
+ true, // Don't move the bubble around if it does not fit on the screen.
+ contents_size, contents_bounds, window_bounds);
+
+ // Now move the y position to make sure the bubble contents overlap the view.
+ window_bounds->Offset(0, -(kTopMargin + 1));
+}
+
+// InfoBubble -----------------------------------------------------------------
+
+// static
+PinnedContentsInfoBubble* PinnedContentsInfoBubble::Show(
+ views::Widget* parent,
+ const gfx::Rect& position_relative_to,
+ BubbleBorder::ArrowLocation arrow_location,
+ const gfx::Point& bubble_anchor,
+ views::View* contents,
+ InfoBubbleDelegate* delegate) {
+ PinnedContentsInfoBubble* window =
+ new PinnedContentsInfoBubble(bubble_anchor);
+ window->Init(parent, position_relative_to, arrow_location,
+ contents, delegate);
+ return window;
+}
+
+BorderContents* PinnedContentsInfoBubble::CreateBorderContents() {
+ return new PinnedContentsBorderContents(bubble_anchor_);
+}