OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/browser/views/bookmark_bar_view.h" | 5 #include "chrome/browser/views/bookmark_bar_view.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "app/gfx/canvas.h" | 9 #include "app/gfx/canvas.h" |
10 #include "app/gfx/text_elider.h" | 10 #include "app/gfx/text_elider.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 | 73 |
74 // Icon to display when one isn't found for the page. | 74 // Icon to display when one isn't found for the page. |
75 static SkBitmap* kDefaultFavIcon = NULL; | 75 static SkBitmap* kDefaultFavIcon = NULL; |
76 | 76 |
77 // Icon used for folders. | 77 // Icon used for folders. |
78 static SkBitmap* kFolderIcon = NULL; | 78 static SkBitmap* kFolderIcon = NULL; |
79 | 79 |
80 // Border colors for the BookmarBarView. | 80 // Border colors for the BookmarBarView. |
81 static const SkColor kTopBorderColor = SkColorSetRGB(222, 234, 248); | 81 static const SkColor kTopBorderColor = SkColorSetRGB(222, 234, 248); |
82 | 82 |
83 // How round the 'new tab' style bookmarks bar is. | |
84 static const int kNewtabBarRoundness = 5; | |
85 | |
86 // Offset for where the menu is shown relative to the bottom of the | 83 // Offset for where the menu is shown relative to the bottom of the |
87 // BookmarkBarView. | 84 // BookmarkBarView. |
88 static const int kMenuOffset = 3; | 85 static const int kMenuOffset = 3; |
89 | 86 |
90 // Delay during drag and drop before the menu pops up. This is only used if | 87 // Delay during drag and drop before the menu pops up. This is only used if |
91 // we can't get the value from the OS. | 88 // we can't get the value from the OS. |
92 static const int kShowFolderDropMenuDelay = 400; | 89 static const int kShowFolderDropMenuDelay = 400; |
93 | 90 |
94 // Color of the drop indicator. | 91 // Color of the drop indicator. |
95 static const SkColor kDropIndicatorColor = SK_ColorBLACK; | 92 static const SkColor kDropIndicatorColor = SK_ColorBLACK; |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 }; | 287 }; |
291 | 288 |
292 // ButtonSeparatorView -------------------------------------------------------- | 289 // ButtonSeparatorView -------------------------------------------------------- |
293 | 290 |
294 class BookmarkBarView::ButtonSeparatorView : public views::View { | 291 class BookmarkBarView::ButtonSeparatorView : public views::View { |
295 public: | 292 public: |
296 ButtonSeparatorView() {} | 293 ButtonSeparatorView() {} |
297 virtual ~ButtonSeparatorView() {} | 294 virtual ~ButtonSeparatorView() {} |
298 | 295 |
299 virtual void Paint(gfx::Canvas* canvas) { | 296 virtual void Paint(gfx::Canvas* canvas) { |
300 SkPaint paint; | 297 DetachableToolbarView::PaintVerticalDivider( |
301 paint.setShader(skia::CreateGradientShader(0, | 298 canvas, kSeparatorStartX, height(), 1, kTopBorderColor, |
302 height() / 2, | |
303 kTopBorderColor, | |
304 kSeparatorColor))->safeUnref(); | |
305 SkRect rc = {SkIntToScalar(kSeparatorStartX), SkIntToScalar(0), | |
306 SkIntToScalar(1), SkIntToScalar(height() / 2) }; | |
307 canvas->drawRect(rc, paint); | |
308 | |
309 SkPaint paint_down; | |
310 paint_down.setShader(skia::CreateGradientShader(height() / 2, | |
311 height(), | |
312 kSeparatorColor, | 299 kSeparatorColor, |
313 GetThemeProvider()->GetColor(BrowserThemeProvider::COLOR_TOOLBAR) | 300 GetThemeProvider()->GetColor(BrowserThemeProvider::COLOR_TOOLBAR)); |
314 ))->safeUnref(); | |
315 SkRect rc_down = { | |
316 SkIntToScalar(kSeparatorStartX), SkIntToScalar(height() / 2), | |
317 SkIntToScalar(1), SkIntToScalar(height() - 1) }; | |
318 canvas->drawRect(rc_down, paint_down); | |
319 } | 301 } |
320 | 302 |
321 virtual gfx::Size GetPreferredSize() { | 303 virtual gfx::Size GetPreferredSize() { |
322 // We get the full height of the bookmark bar, so that the height returned | 304 // We get the full height of the bookmark bar, so that the height returned |
323 // here doesn't matter. | 305 // here doesn't matter. |
324 return gfx::Size(kSeparatorWidth, 1); | 306 return gfx::Size(kSeparatorWidth, 1); |
325 } | 307 } |
326 | 308 |
327 virtual bool GetAccessibleName(std::wstring* name) { | 309 virtual bool GetAccessibleName(std::wstring* name) { |
328 DCHECK(name); | 310 DCHECK(name); |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 } | 711 } |
730 | 712 |
731 #ifdef CHROME_PERSONALIZATION | 713 #ifdef CHROME_PERSONALIZATION |
732 void BookmarkBarView::OnStateChanged() { | 714 void BookmarkBarView::OnStateChanged() { |
733 // When the sync state changes, it is sufficient to invoke View::Layout since | 715 // When the sync state changes, it is sufficient to invoke View::Layout since |
734 // during layout we query the profile sync service and determine whether the | 716 // during layout we query the profile sync service and determine whether the |
735 // new state requires showing the sync error button so that the user can | 717 // new state requires showing the sync error button so that the user can |
736 // re-enter her password. If extension shelf appears along with the bookmark | 718 // re-enter her password. If extension shelf appears along with the bookmark |
737 // shelf, it too needs to be layed out. Since both have the same parent, it is | 719 // shelf, it too needs to be layed out. Since both have the same parent, it is |
738 // enough to let the parent layout both of these children. | 720 // enough to let the parent layout both of these children. |
739 // TODO (sky): This should not require Layout() and SchedulePaint(). Needs | 721 // TODO(sky): This should not require Layout() and SchedulePaint(). Needs |
740 // some cleanup. | 722 // some cleanup. |
741 PreferredSizeChanged(); | 723 PreferredSizeChanged(); |
742 Layout(); | 724 Layout(); |
743 SchedulePaint(); | 725 SchedulePaint(); |
744 } | 726 } |
745 #endif | 727 #endif |
746 | 728 |
747 void BookmarkBarView::OnFullscreenToggled(bool fullscreen) { | 729 void BookmarkBarView::OnFullscreenToggled(bool fullscreen) { |
748 if (!fullscreen) | 730 if (!fullscreen) |
749 size_animation_->Reset(IsAlwaysShown() ? 1 : 0); | 731 size_animation_->Reset(IsAlwaysShown() ? 1 : 0); |
750 else if (IsAlwaysShown()) | 732 else if (IsAlwaysShown()) |
751 size_animation_->Reset(0); | 733 size_animation_->Reset(0); |
752 } | 734 } |
753 | 735 |
754 bool BookmarkBarView::IsDetachedStyle() { | 736 bool BookmarkBarView::IsDetached() const { |
755 return OnNewTabPage() && (size_animation_->GetCurrentValue() != 1); | 737 return OnNewTabPage() && (size_animation_->GetCurrentValue() != 1); |
756 } | 738 } |
757 | 739 |
758 bool BookmarkBarView::IsAlwaysShown() { | 740 bool BookmarkBarView::IsOnTop() const { |
| 741 return true; |
| 742 } |
| 743 |
| 744 bool BookmarkBarView::IsAlwaysShown() const { |
759 return profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); | 745 return profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); |
760 } | 746 } |
761 | 747 |
762 bool BookmarkBarView::OnNewTabPage() { | 748 bool BookmarkBarView::OnNewTabPage() const { |
763 return (browser_ && browser_->GetSelectedTabContents() && | 749 return (browser_ && browser_->GetSelectedTabContents() && |
764 browser_->GetSelectedTabContents()->IsBookmarkBarAlwaysVisible()); | 750 browser_->GetSelectedTabContents()->IsBookmarkBarAlwaysVisible()); |
765 } | 751 } |
766 | 752 |
767 int BookmarkBarView::GetToolbarOverlap(bool return_max) { | 753 int BookmarkBarView::GetToolbarOverlap(bool return_max) { |
768 return static_cast<int>(kToolbarOverlap * | 754 return static_cast<int>(kToolbarOverlap * |
769 (return_max ? 1.0 : size_animation_->GetCurrentValue())); | 755 (return_max ? 1.0 : size_animation_->GetCurrentValue())); |
770 } | 756 } |
771 | 757 |
772 void BookmarkBarView::AnimationProgressed(const Animation* animation) { | 758 void BookmarkBarView::AnimationProgressed(const Animation* animation) { |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1083 gfx::NativeView hwnd) { | 1069 gfx::NativeView hwnd) { |
1084 const BookmarkNode* node; | 1070 const BookmarkNode* node; |
1085 MenuItemView::AnchorPosition anchor_point = MenuItemView::TOPLEFT; | 1071 MenuItemView::AnchorPosition anchor_point = MenuItemView::TOPLEFT; |
1086 | 1072 |
1087 // When we set the menu's position, we must take into account the mirrored | 1073 // When we set the menu's position, we must take into account the mirrored |
1088 // position of the View relative to its parent. This can be easily done by | 1074 // position of the View relative to its parent. This can be easily done by |
1089 // passing the right flag to View::x(). | 1075 // passing the right flag to View::x(). |
1090 int x = view->GetX(APPLY_MIRRORING_TRANSFORMATION); | 1076 int x = view->GetX(APPLY_MIRRORING_TRANSFORMATION); |
1091 int bar_height = height() - kMenuOffset; | 1077 int bar_height = height() - kMenuOffset; |
1092 | 1078 |
1093 if (IsDetachedStyle()) | 1079 if (IsDetached()) |
1094 bar_height -= kNewtabVerticalPadding; | 1080 bar_height -= kNewtabVerticalPadding; |
1095 | 1081 |
1096 int start_index = 0; | 1082 int start_index = 0; |
1097 if (view == other_bookmarked_button_) { | 1083 if (view == other_bookmarked_button_) { |
1098 UserMetrics::RecordAction(L"BookmarkBar_ShowOtherBookmarks", profile_); | 1084 UserMetrics::RecordAction(L"BookmarkBar_ShowOtherBookmarks", profile_); |
1099 | 1085 |
1100 node = model_->other_node(); | 1086 node = model_->other_node(); |
1101 if (UILayoutIsRightToLeft()) | 1087 if (UILayoutIsRightToLeft()) |
1102 anchor_point = MenuItemView::TOPLEFT; | 1088 anchor_point = MenuItemView::TOPLEFT; |
1103 else | 1089 else |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 height); | 1664 height); |
1679 } | 1665 } |
1680 x += other_bookmarked_pref.width() + kButtonPadding; | 1666 x += other_bookmarked_pref.width() + kButtonPadding; |
1681 | 1667 |
1682 #ifdef CHROME_PERSONALIZATION | 1668 #ifdef CHROME_PERSONALIZATION |
1683 // Set the real bounds of the sync error button only if it needs to appear on | 1669 // Set the real bounds of the sync error button only if it needs to appear on |
1684 // the bookmarks bar. | 1670 // the bookmarks bar. |
1685 if (should_show_sync_error_button) { | 1671 if (should_show_sync_error_button) { |
1686 x += kButtonPadding; | 1672 x += kButtonPadding; |
1687 if (!compute_bounds_only) { | 1673 if (!compute_bounds_only) { |
1688 sync_error_button_->SetBounds(x, y, sync_error_button_pref.width(), height
); | 1674 sync_error_button_->SetBounds( |
| 1675 x, y, sync_error_button_pref.width(), height); |
1689 sync_error_button_->SetVisible(true); | 1676 sync_error_button_->SetVisible(true); |
1690 } | 1677 } |
1691 x += sync_error_button_pref.width(); | 1678 x += sync_error_button_pref.width(); |
1692 } else if (!compute_bounds_only) { | 1679 } else if (!compute_bounds_only) { |
1693 sync_error_button_->SetBounds(x, y, 0, height); | 1680 sync_error_button_->SetBounds(x, y, 0, height); |
1694 sync_error_button_->SetVisible(false); | 1681 sync_error_button_->SetVisible(false); |
1695 } | 1682 } |
1696 #endif | 1683 #endif |
1697 | 1684 |
1698 // Set the preferred size computed so far. | 1685 // Set the preferred size computed so far. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1742 sync_error_button->SetTooltipText( | 1729 sync_error_button->SetTooltipText( |
1743 l10n_util::GetString(IDS_SYNC_BOOKMARK_BAR_ERROR_DESC)); | 1730 l10n_util::GetString(IDS_SYNC_BOOKMARK_BAR_ERROR_DESC)); |
1744 sync_error_button->SetAccessibleName( | 1731 sync_error_button->SetAccessibleName( |
1745 l10n_util::GetString(IDS_ACCNAME_SYNC_ERROR_BUTTON)); | 1732 l10n_util::GetString(IDS_ACCNAME_SYNC_ERROR_BUTTON)); |
1746 sync_error_button->SetIcon( | 1733 sync_error_button->SetIcon( |
1747 *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING)); | 1734 *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING)); |
1748 return sync_error_button; | 1735 return sync_error_button; |
1749 } | 1736 } |
1750 #endif | 1737 #endif |
1751 | 1738 |
OLD | NEW |