Chromium Code Reviews| 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 "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" | 5 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 #include "grit/ui_resources.h" | 64 #include "grit/ui_resources.h" |
| 65 #include "ui/accessibility/ax_view_state.h" | 65 #include "ui/accessibility/ax_view_state.h" |
| 66 #include "ui/base/dragdrop/drag_utils.h" | 66 #include "ui/base/dragdrop/drag_utils.h" |
| 67 #include "ui/base/dragdrop/os_exchange_data.h" | 67 #include "ui/base/dragdrop/os_exchange_data.h" |
| 68 #include "ui/base/l10n/l10n_util.h" | 68 #include "ui/base/l10n/l10n_util.h" |
| 69 #include "ui/base/resource/resource_bundle.h" | 69 #include "ui/base/resource/resource_bundle.h" |
| 70 #include "ui/base/theme_provider.h" | 70 #include "ui/base/theme_provider.h" |
| 71 #include "ui/base/window_open_disposition.h" | 71 #include "ui/base/window_open_disposition.h" |
| 72 #include "ui/gfx/animation/slide_animation.h" | 72 #include "ui/gfx/animation/slide_animation.h" |
| 73 #include "ui/gfx/canvas.h" | 73 #include "ui/gfx/canvas.h" |
| 74 #include "ui/gfx/text_constants.h" | |
| 74 #include "ui/gfx/text_elider.h" | 75 #include "ui/gfx/text_elider.h" |
| 75 #include "ui/views/button_drag_utils.h" | 76 #include "ui/views/button_drag_utils.h" |
| 77 #include "ui/views/controls/button/label_button.h" | |
| 78 #include "ui/views/controls/button/label_button_border.h" | |
| 76 #include "ui/views/controls/button/menu_button.h" | 79 #include "ui/views/controls/button/menu_button.h" |
| 77 #include "ui/views/controls/label.h" | 80 #include "ui/views/controls/label.h" |
| 78 #include "ui/views/drag_utils.h" | 81 #include "ui/views/drag_utils.h" |
| 79 #include "ui/views/metrics.h" | 82 #include "ui/views/metrics.h" |
| 80 #include "ui/views/view_constants.h" | 83 #include "ui/views/view_constants.h" |
| 81 #include "ui/views/widget/tooltip_manager.h" | 84 #include "ui/views/widget/tooltip_manager.h" |
| 82 #include "ui/views/widget/widget.h" | 85 #include "ui/views/widget/widget.h" |
| 83 #include "ui/views/window/non_client_view.h" | 86 #include "ui/views/window/non_client_view.h" |
| 84 | 87 |
| 85 using base::UserMetricsAction; | 88 using base::UserMetricsAction; |
| 86 using content::OpenURLParams; | 89 using content::OpenURLParams; |
| 87 using content::PageNavigator; | 90 using content::PageNavigator; |
| 88 using content::Referrer; | 91 using content::Referrer; |
| 89 using ui::DropTargetEvent; | 92 using ui::DropTargetEvent; |
| 90 using views::CustomButton; | 93 using views::CustomButton; |
| 94 using views::LabelButtonBorder; | |
| 91 using views::MenuButton; | 95 using views::MenuButton; |
| 92 using views::View; | 96 using views::View; |
| 93 | 97 |
| 94 // Margins around the content. | 98 // Margins around the content. |
| 95 static const int kDetachedTopMargin = 1; // When attached, we use 0 and let the | 99 static const int kDetachedTopMargin = 1; // When attached, we use 0 and let the |
| 96 // toolbar above serve as the margin. | 100 // toolbar above serve as the margin. |
| 97 static const int kBottomMargin = 2; | 101 static const int kBottomMargin = 2; |
| 98 static const int kLeftMargin = 1; | 102 static const int kLeftMargin = 1; |
| 99 static const int kRightMargin = 1; | 103 static const int kRightMargin = 1; |
| 100 | 104 |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 128 | 132 |
| 129 // Left-padding for the instructional text. | 133 // Left-padding for the instructional text. |
| 130 static const int kInstructionsPadding = 6; | 134 static const int kInstructionsPadding = 6; |
| 131 | 135 |
| 132 // Tag for the 'Other bookmarks' button. | 136 // Tag for the 'Other bookmarks' button. |
| 133 static const int kOtherFolderButtonTag = 1; | 137 static const int kOtherFolderButtonTag = 1; |
| 134 | 138 |
| 135 // Tag for the 'Apps Shortcut' button. | 139 // Tag for the 'Apps Shortcut' button. |
| 136 static const int kAppsShortcutButtonTag = 2; | 140 static const int kAppsShortcutButtonTag = 2; |
| 137 | 141 |
| 142 // Preferred padding between text and edge. | |
| 143 // | |
| 144 // Note that the vertical padding is one pixel less than it was in TextButton; | |
| 145 // we clip the bottom of letters like 'g' or 'p' if we don't. | |
| 146 static const int kButtonPaddingHorizontal = 6; | |
| 147 static const int kButtonPaddingVertical = 4; | |
| 148 | |
| 138 // Tag for the 'Managed bookmarks' button. | 149 // Tag for the 'Managed bookmarks' button. |
| 139 static const int kManagedFolderButtonTag = 3; | 150 static const int kManagedFolderButtonTag = 3; |
| 140 | 151 |
| 141 namespace { | 152 namespace { |
| 142 | 153 |
| 143 // To enable/disable BookmarkBar animations during testing. In production | 154 // To enable/disable BookmarkBar animations during testing. In production |
| 144 // animations are enabled by default. | 155 // animations are enabled by default. |
| 145 bool animations_enabled = true; | 156 bool animations_enabled = true; |
| 146 | 157 |
| 147 // BookmarkButtonBase ----------------------------------------------- | 158 // BookmarkButtonBase ----------------------------------------------- |
| 148 | 159 |
| 149 // Base class for text buttons used on the bookmark bar. | 160 // Base class for text buttons used on the bookmark bar. |
| 150 | 161 |
| 151 class BookmarkButtonBase : public views::TextButton { | 162 class BookmarkButtonBase : public views::LabelButton { |
| 152 public: | 163 public: |
| 153 BookmarkButtonBase(views::ButtonListener* listener, | 164 BookmarkButtonBase(views::ButtonListener* listener, |
| 154 const base::string16& title) | 165 const base::string16& title) |
| 155 : TextButton(listener, title) { | 166 : LabelButton(listener, title) { |
| 167 SetElideBehavior(gfx::FADE_TAIL); | |
|
msw
2014/06/11 00:55:46
This changed the appearance of elided bookmark but
| |
| 156 show_animation_.reset(new gfx::SlideAnimation(this)); | 168 show_animation_.reset(new gfx::SlideAnimation(this)); |
| 157 if (!animations_enabled) { | 169 if (!animations_enabled) { |
| 158 // For some reason during testing the events generated by animating | 170 // For some reason during testing the events generated by animating |
| 159 // throw off the test. So, don't animate while testing. | 171 // throw off the test. So, don't animate while testing. |
| 160 show_animation_->Reset(1); | 172 show_animation_->Reset(1); |
| 161 } else { | 173 } else { |
| 162 show_animation_->Show(); | 174 show_animation_->Show(); |
| 163 } | 175 } |
| 164 } | 176 } |
| 165 | 177 |
| 166 virtual bool IsTriggerableEvent(const ui::Event& e) OVERRIDE { | 178 virtual bool IsTriggerableEvent(const ui::Event& e) OVERRIDE { |
| 167 return e.type() == ui::ET_GESTURE_TAP || | 179 return e.type() == ui::ET_GESTURE_TAP || |
| 168 e.type() == ui::ET_GESTURE_TAP_DOWN || | 180 e.type() == ui::ET_GESTURE_TAP_DOWN || |
| 169 event_utils::IsPossibleDispositionEvent(e); | 181 event_utils::IsPossibleDispositionEvent(e); |
| 170 } | 182 } |
| 171 | 183 |
| 184 virtual scoped_ptr<LabelButtonBorder> CreateDefaultBorder() const OVERRIDE { | |
| 185 // We change the insets on the border to match the previous TextButton. | |
| 186 scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder(); | |
| 187 border->set_insets(gfx::Insets(kButtonPaddingVertical, | |
| 188 kButtonPaddingHorizontal, | |
| 189 kButtonPaddingVertical, | |
| 190 kButtonPaddingHorizontal)); | |
| 191 return border.Pass(); | |
| 192 } | |
| 193 | |
| 172 private: | 194 private: |
| 173 scoped_ptr<gfx::SlideAnimation> show_animation_; | 195 scoped_ptr<gfx::SlideAnimation> show_animation_; |
| 174 | 196 |
| 175 DISALLOW_COPY_AND_ASSIGN(BookmarkButtonBase); | 197 DISALLOW_COPY_AND_ASSIGN(BookmarkButtonBase); |
| 176 }; | 198 }; |
| 177 | 199 |
| 178 // BookmarkButton ------------------------------------------------------------- | 200 // BookmarkButton ------------------------------------------------------------- |
| 179 | 201 |
| 180 // Buttons used for the bookmarks on the bookmark bar. | 202 // Buttons used for the bookmarks on the bookmark bar. |
| 181 | 203 |
| 182 class BookmarkButton : public BookmarkButtonBase { | 204 class BookmarkButton : public BookmarkButtonBase { |
| 183 public: | 205 public: |
| 184 // The internal view class name. | 206 // The internal view class name. |
| 185 static const char kViewClassName[]; | 207 static const char kViewClassName[]; |
| 186 | 208 |
| 187 BookmarkButton(views::ButtonListener* listener, | 209 BookmarkButton(views::ButtonListener* listener, |
| 188 const GURL& url, | 210 const GURL& url, |
| 189 const base::string16& title, | 211 const base::string16& title, |
| 190 Profile* profile) | 212 Profile* profile) |
| 191 : BookmarkButtonBase(listener, title), | 213 : BookmarkButtonBase(listener, title), |
| 192 url_(url), | 214 url_(url), |
| 193 profile_(profile) { | 215 profile_(profile) { |
| 194 } | 216 } |
| 195 | 217 |
| 196 virtual bool GetTooltipText(const gfx::Point& p, | 218 virtual bool GetTooltipText(const gfx::Point& p, |
| 197 base::string16* tooltip) const OVERRIDE { | 219 base::string16* tooltip) const OVERRIDE { |
| 198 gfx::Point location(p); | 220 gfx::Point location(p); |
| 199 ConvertPointToScreen(this, &location); | 221 ConvertPointToScreen(this, &location); |
| 200 *tooltip = BookmarkBarView::CreateToolTipForURLAndTitle( | 222 *tooltip = BookmarkBarView::CreateToolTipForURLAndTitle( |
| 201 GetWidget(), location, url_, text(), profile_); | 223 GetWidget(), location, url_, GetText(), profile_); |
| 202 return !tooltip->empty(); | 224 return !tooltip->empty(); |
| 203 } | 225 } |
| 204 | 226 |
| 205 virtual const char* GetClassName() const OVERRIDE { | 227 virtual const char* GetClassName() const OVERRIDE { |
| 206 return kViewClassName; | 228 return kViewClassName; |
| 207 } | 229 } |
| 208 | 230 |
| 209 private: | 231 private: |
| 210 const GURL& url_; | 232 const GURL& url_; |
| 211 Profile* profile_; | 233 Profile* profile_; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 258 // For some reason during testing the events generated by animating | 280 // For some reason during testing the events generated by animating |
| 259 // throw off the test. So, don't animate while testing. | 281 // throw off the test. So, don't animate while testing. |
| 260 show_animation_->Reset(1); | 282 show_animation_->Reset(1); |
| 261 } else { | 283 } else { |
| 262 show_animation_->Show(); | 284 show_animation_->Show(); |
| 263 } | 285 } |
| 264 } | 286 } |
| 265 | 287 |
| 266 virtual bool GetTooltipText(const gfx::Point& p, | 288 virtual bool GetTooltipText(const gfx::Point& p, |
| 267 base::string16* tooltip) const OVERRIDE { | 289 base::string16* tooltip) const OVERRIDE { |
| 268 if (text_size_.width() > GetTextBounds().width()) | 290 if (label()->GetPreferredSize().width() > label()->size().width()) |
| 269 *tooltip = text_; | 291 *tooltip = GetText(); |
| 270 return !tooltip->empty(); | 292 return !tooltip->empty(); |
| 271 } | 293 } |
| 272 | 294 |
| 273 virtual bool IsTriggerableEvent(const ui::Event& e) OVERRIDE { | 295 virtual bool IsTriggerableEvent(const ui::Event& e) OVERRIDE { |
| 274 // Left clicks and taps should show the menu contents and right clicks | 296 // Left clicks and taps should show the menu contents and right clicks |
| 275 // should show the context menu. They should not trigger the opening of | 297 // should show the context menu. They should not trigger the opening of |
| 276 // underlying urls. | 298 // underlying urls. |
| 277 if (e.type() == ui::ET_GESTURE_TAP || | 299 if (e.type() == ui::ET_GESTURE_TAP || |
| 278 (e.IsMouseEvent() && (e.flags() & | 300 (e.IsMouseEvent() && (e.flags() & |
| 279 (ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON)))) | 301 (ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON)))) |
| 280 return false; | 302 return false; |
| 281 | 303 |
| 282 if (e.IsMouseEvent()) | 304 if (e.IsMouseEvent()) |
| 283 return ui::DispositionFromEventFlags(e.flags()) != CURRENT_TAB; | 305 return ui::DispositionFromEventFlags(e.flags()) != CURRENT_TAB; |
| 284 return false; | 306 return false; |
| 285 } | 307 } |
| 286 | 308 |
| 287 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { | |
| 288 views::MenuButton::PaintButton(canvas, views::MenuButton::PB_NORMAL); | |
| 289 } | |
| 290 | |
| 291 private: | 309 private: |
| 292 scoped_ptr<gfx::SlideAnimation> show_animation_; | 310 scoped_ptr<gfx::SlideAnimation> show_animation_; |
| 293 | 311 |
| 294 DISALLOW_COPY_AND_ASSIGN(BookmarkFolderButton); | 312 DISALLOW_COPY_AND_ASSIGN(BookmarkFolderButton); |
| 295 }; | 313 }; |
| 296 | 314 |
| 297 // OverFlowButton (chevron) -------------------------------------------------- | 315 // OverFlowButton (chevron) -------------------------------------------------- |
| 298 | 316 |
| 299 class OverFlowButton : public views::MenuButton { | 317 class OverFlowButton : public views::MenuButton { |
| 300 public: | 318 public: |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 413 DISALLOW_COPY_AND_ASSIGN(ButtonSeparatorView); | 431 DISALLOW_COPY_AND_ASSIGN(ButtonSeparatorView); |
| 414 }; | 432 }; |
| 415 | 433 |
| 416 // BookmarkBarView ------------------------------------------------------------ | 434 // BookmarkBarView ------------------------------------------------------------ |
| 417 | 435 |
| 418 // static | 436 // static |
| 419 const int BookmarkBarView::kMaxButtonWidth = 150; | 437 const int BookmarkBarView::kMaxButtonWidth = 150; |
| 420 const int BookmarkBarView::kNewtabHorizontalPadding = 2; | 438 const int BookmarkBarView::kNewtabHorizontalPadding = 2; |
| 421 const int BookmarkBarView::kToolbarAttachedBookmarkBarOverlap = 3; | 439 const int BookmarkBarView::kToolbarAttachedBookmarkBarOverlap = 3; |
| 422 | 440 |
| 423 static const gfx::ImageSkia& GetDefaultFavicon() { | 441 const gfx::ImageSkia& GetDefaultFavicon() { |
| 424 if (!kDefaultFavicon) { | 442 if (!kDefaultFavicon) { |
| 425 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); | 443 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| 426 kDefaultFavicon = rb->GetImageSkiaNamed(IDR_DEFAULT_FAVICON); | 444 kDefaultFavicon = rb->GetImageSkiaNamed(IDR_DEFAULT_FAVICON); |
| 427 } | 445 } |
| 428 return *kDefaultFavicon; | 446 return *kDefaultFavicon; |
| 429 } | 447 } |
| 430 | 448 |
| 431 static const gfx::ImageSkia& GetFolderIcon() { | 449 const gfx::ImageSkia& GetFolderIcon() { |
| 432 if (!kFolderIcon) { | 450 if (!kFolderIcon) { |
| 433 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); | 451 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| 434 kFolderIcon = rb->GetImageSkiaNamed(IDR_BOOKMARK_BAR_FOLDER); | 452 kFolderIcon = rb->GetImageSkiaNamed(IDR_BOOKMARK_BAR_FOLDER); |
| 435 } | 453 } |
| 436 return *kFolderIcon; | 454 return *kFolderIcon; |
| 437 } | 455 } |
| 438 | 456 |
| 439 BookmarkBarView::BookmarkBarView(Browser* browser, BrowserView* browser_view) | 457 BookmarkBarView::BookmarkBarView(Browser* browser, BrowserView* browser_view) |
| 440 : page_navigator_(NULL), | 458 : page_navigator_(NULL), |
| 441 client_(NULL), | 459 client_(NULL), |
| (...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1113 BookmarkNodeChangedImpl(model, node); | 1131 BookmarkNodeChangedImpl(model, node); |
| 1114 } | 1132 } |
| 1115 | 1133 |
| 1116 void BookmarkBarView::WriteDragDataForView(View* sender, | 1134 void BookmarkBarView::WriteDragDataForView(View* sender, |
| 1117 const gfx::Point& press_pt, | 1135 const gfx::Point& press_pt, |
| 1118 ui::OSExchangeData* data) { | 1136 ui::OSExchangeData* data) { |
| 1119 content::RecordAction(UserMetricsAction("BookmarkBar_DragButton")); | 1137 content::RecordAction(UserMetricsAction("BookmarkBar_DragButton")); |
| 1120 | 1138 |
| 1121 for (int i = 0; i < GetBookmarkButtonCount(); ++i) { | 1139 for (int i = 0; i < GetBookmarkButtonCount(); ++i) { |
| 1122 if (sender == GetBookmarkButton(i)) { | 1140 if (sender == GetBookmarkButton(i)) { |
| 1123 views::TextButton* button = GetBookmarkButton(i); | 1141 views::LabelButton* button = GetBookmarkButton(i); |
| 1124 scoped_ptr<gfx::Canvas> canvas( | 1142 const BookmarkNode* node = model()->bookmark_bar_node()->GetChild(i); |
| 1125 views::GetCanvasForDragImage(button->GetWidget(), button->size())); | 1143 |
| 1126 button->PaintButton(canvas.get(), views::TextButton::PB_FOR_DRAG); | 1144 const gfx::Image& image_from_model = model()->GetFavicon(node); |
| 1127 drag_utils::SetDragImageOnDataObject(*canvas, button->size(), | 1145 const gfx::ImageSkia& icon = image_from_model.IsEmpty() ? |
| 1128 press_pt.OffsetFromOrigin(), | 1146 (node->is_folder() ? GetFolderIcon() : GetDefaultFavicon()) : |
| 1129 data); | 1147 *image_from_model.ToImageSkia(); |
| 1148 | |
| 1149 button_drag_utils::SetDragImage( | |
| 1150 node->url(), | |
| 1151 node->GetTitle(), | |
| 1152 icon, | |
| 1153 &press_pt, | |
| 1154 data, | |
| 1155 button->GetWidget()); | |
| 1130 WriteBookmarkDragData(model()->bookmark_bar_node()->GetChild(i), data); | 1156 WriteBookmarkDragData(model()->bookmark_bar_node()->GetChild(i), data); |
| 1131 return; | 1157 return; |
| 1132 } | 1158 } |
| 1133 } | 1159 } |
| 1134 NOTREACHED(); | 1160 NOTREACHED(); |
| 1135 } | 1161 } |
| 1136 | 1162 |
| 1137 int BookmarkBarView::GetDragOperationsForView(View* sender, | 1163 int BookmarkBarView::GetDragOperationsForView(View* sender, |
| 1138 const gfx::Point& p) { | 1164 const gfx::Point& p) { |
| 1139 if (size_animation_->is_animating() || | 1165 if (size_animation_->is_animating() || |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1345 } | 1371 } |
| 1346 } | 1372 } |
| 1347 | 1373 |
| 1348 int BookmarkBarView::GetBookmarkButtonCount() const { | 1374 int BookmarkBarView::GetBookmarkButtonCount() const { |
| 1349 // We contain six non-bookmark button views: managed bookmarks, | 1375 // We contain six non-bookmark button views: managed bookmarks, |
| 1350 // other bookmarks, bookmarks separator, chevrons (for overflow), apps page, | 1376 // other bookmarks, bookmarks separator, chevrons (for overflow), apps page, |
| 1351 // and the instruction label. | 1377 // and the instruction label. |
| 1352 return child_count() - 6; | 1378 return child_count() - 6; |
| 1353 } | 1379 } |
| 1354 | 1380 |
| 1355 views::TextButton* BookmarkBarView::GetBookmarkButton(int index) { | 1381 views::LabelButton* BookmarkBarView::GetBookmarkButton(int index) { |
| 1356 DCHECK(index >= 0 && index < GetBookmarkButtonCount()); | 1382 DCHECK(index >= 0 && index < GetBookmarkButtonCount()); |
| 1357 return static_cast<views::TextButton*>(child_at(index)); | 1383 return static_cast<views::LabelButton*>(child_at(index)); |
| 1358 } | 1384 } |
| 1359 | 1385 |
| 1360 BookmarkLaunchLocation BookmarkBarView::GetBookmarkLaunchLocation() const { | 1386 BookmarkLaunchLocation BookmarkBarView::GetBookmarkLaunchLocation() const { |
| 1361 return IsDetached() ? BOOKMARK_LAUNCH_LOCATION_DETACHED_BAR : | 1387 return IsDetached() ? BOOKMARK_LAUNCH_LOCATION_DETACHED_BAR : |
| 1362 BOOKMARK_LAUNCH_LOCATION_ATTACHED_BAR; | 1388 BOOKMARK_LAUNCH_LOCATION_ATTACHED_BAR; |
| 1363 } | 1389 } |
| 1364 | 1390 |
| 1365 int BookmarkBarView::GetFirstHiddenNodeIndex() { | 1391 int BookmarkBarView::GetFirstHiddenNodeIndex() { |
| 1366 const int bb_count = GetBookmarkButtonCount(); | 1392 const int bb_count = GetBookmarkButtonCount(); |
| 1367 for (int i = 0; i < bb_count; ++i) { | 1393 for (int i = 0; i < bb_count; ++i) { |
| 1368 if (!GetBookmarkButton(i)->visible()) | 1394 if (!GetBookmarkButton(i)->visible()) |
| 1369 return i; | 1395 return i; |
| 1370 } | 1396 } |
| 1371 return bb_count; | 1397 return bb_count; |
| 1372 } | 1398 } |
| 1373 | 1399 |
| 1374 MenuButton* BookmarkBarView::CreateOtherBookmarkedButton() { | 1400 MenuButton* BookmarkBarView::CreateOtherBookmarkedButton() { |
| 1375 // Title is set in Loaded. | 1401 // Title is set in Loaded. |
| 1376 MenuButton* button = | 1402 MenuButton* button = |
| 1377 new BookmarkFolderButton(this, base::string16(), this, false); | 1403 new BookmarkFolderButton(this, base::string16(), this, false); |
| 1378 button->set_id(VIEW_ID_OTHER_BOOKMARKS); | 1404 button->set_id(VIEW_ID_OTHER_BOOKMARKS); |
| 1379 button->SetIcon(GetFolderIcon()); | 1405 button->SetImage(views::Button::STATE_NORMAL, GetFolderIcon()); |
| 1380 button->set_context_menu_controller(this); | 1406 button->set_context_menu_controller(this); |
| 1381 button->set_tag(kOtherFolderButtonTag); | 1407 button->set_tag(kOtherFolderButtonTag); |
| 1382 return button; | 1408 return button; |
| 1383 } | 1409 } |
| 1384 | 1410 |
| 1385 MenuButton* BookmarkBarView::CreateManagedBookmarksButton() { | 1411 MenuButton* BookmarkBarView::CreateManagedBookmarksButton() { |
| 1386 // Title is set in Loaded. | 1412 // Title is set in Loaded. |
| 1387 MenuButton* button = | 1413 MenuButton* button = |
| 1388 new BookmarkFolderButton(this, base::string16(), this, false); | 1414 new BookmarkFolderButton(this, base::string16(), this, false); |
| 1389 button->set_id(VIEW_ID_MANAGED_BOOKMARKS); | 1415 button->set_id(VIEW_ID_MANAGED_BOOKMARKS); |
| 1390 // TODO(joaodasilva): replace with a "managed folder" icon. | 1416 // TODO(joaodasilva): replace with a "managed folder" icon. |
| 1391 // http://crbug.com/49598 | 1417 // http://crbug.com/49598 |
| 1392 button->SetIcon(GetFolderIcon()); | 1418 button->SetImage(views::Button::STATE_NORMAL, GetFolderIcon()); |
| 1393 button->set_context_menu_controller(this); | 1419 button->set_context_menu_controller(this); |
| 1394 button->set_tag(kManagedFolderButtonTag); | 1420 button->set_tag(kManagedFolderButtonTag); |
| 1395 return button; | 1421 return button; |
| 1396 } | 1422 } |
| 1397 | 1423 |
| 1398 MenuButton* BookmarkBarView::CreateOverflowButton() { | 1424 MenuButton* BookmarkBarView::CreateOverflowButton() { |
| 1399 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); | 1425 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| 1400 MenuButton* button = new OverFlowButton(this); | 1426 MenuButton* button = new OverFlowButton(this); |
| 1401 button->SetIcon(*rb->GetImageSkiaNamed(IDR_BOOKMARK_BAR_CHEVRONS)); | 1427 button->SetImage(views::Button::STATE_NORMAL, |
| 1428 *rb->GetImageSkiaNamed(IDR_BOOKMARK_BAR_CHEVRONS)); | |
| 1402 | 1429 |
| 1403 // The overflow button's image contains an arrow and therefore it is a | 1430 // The overflow button's image contains an arrow and therefore it is a |
| 1404 // direction sensitive image and we need to flip it if the UI layout is | 1431 // direction sensitive image and we need to flip it if the UI layout is |
| 1405 // right-to-left. | 1432 // right-to-left. |
| 1406 // | 1433 // |
| 1407 // By default, menu buttons are not flipped because they generally contain | 1434 // By default, menu buttons are not flipped because they generally contain |
| 1408 // text and flipping the gfx::Canvas object will break text rendering. Since | 1435 // text and flipping the gfx::Canvas object will break text rendering. Since |
| 1409 // the overflow button does not contain text, we can safely flip it. | 1436 // the overflow button does not contain text, we can safely flip it. |
| 1410 button->EnableCanvasFlippingForRTLUI(true); | 1437 button->EnableCanvasFlippingForRTLUI(true); |
| 1411 | 1438 |
| 1412 // Make visible as necessary. | 1439 // Make visible as necessary. |
| 1413 button->SetVisible(false); | 1440 button->SetVisible(false); |
| 1414 // Set accessibility name. | 1441 // Set accessibility name. |
| 1415 button->SetAccessibleName( | 1442 button->SetAccessibleName( |
| 1416 l10n_util::GetStringUTF16(IDS_ACCNAME_BOOKMARKS_CHEVRON)); | 1443 l10n_util::GetStringUTF16(IDS_ACCNAME_BOOKMARKS_CHEVRON)); |
| 1417 return button; | 1444 return button; |
| 1418 } | 1445 } |
| 1419 | 1446 |
| 1420 views::View* BookmarkBarView::CreateBookmarkButton(const BookmarkNode* node) { | 1447 views::View* BookmarkBarView::CreateBookmarkButton(const BookmarkNode* node) { |
| 1421 if (node->is_url()) { | 1448 if (node->is_url()) { |
| 1422 BookmarkButton* button = new BookmarkButton( | 1449 BookmarkButton* button = new BookmarkButton( |
| 1423 this, node->url(), node->GetTitle(), browser_->profile()); | 1450 this, node->url(), node->GetTitle(), browser_->profile()); |
| 1424 ConfigureButton(node, button); | 1451 ConfigureButton(node, button); |
| 1425 return button; | 1452 return button; |
| 1426 } else { | 1453 } else { |
| 1427 views::MenuButton* button = new BookmarkFolderButton( | 1454 views::MenuButton* button = new BookmarkFolderButton( |
| 1428 this, node->GetTitle(), this, false); | 1455 this, node->GetTitle(), this, false); |
| 1429 button->SetIcon(GetFolderIcon()); | 1456 button->SetImage(views::Button::STATE_NORMAL, GetFolderIcon()); |
| 1430 ConfigureButton(node, button); | 1457 ConfigureButton(node, button); |
| 1431 return button; | 1458 return button; |
| 1432 } | 1459 } |
| 1433 } | 1460 } |
| 1434 | 1461 |
| 1435 views::TextButton* BookmarkBarView::CreateAppsPageShortcutButton() { | 1462 views::LabelButton* BookmarkBarView::CreateAppsPageShortcutButton() { |
| 1436 views::TextButton* button = new ShortcutButton( | 1463 views::LabelButton* button = new ShortcutButton( |
| 1437 this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_APPS_SHORTCUT_NAME)); | 1464 this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_APPS_SHORTCUT_NAME)); |
| 1438 button->SetTooltipText(l10n_util::GetStringUTF16( | 1465 button->SetTooltipText(l10n_util::GetStringUTF16( |
| 1439 IDS_BOOKMARK_BAR_APPS_SHORTCUT_TOOLTIP)); | 1466 IDS_BOOKMARK_BAR_APPS_SHORTCUT_TOOLTIP)); |
| 1440 button->set_id(VIEW_ID_BOOKMARK_BAR_ELEMENT); | 1467 button->set_id(VIEW_ID_BOOKMARK_BAR_ELEMENT); |
| 1441 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); | 1468 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| 1442 button->SetIcon(*rb->GetImageSkiaNamed(IDR_BOOKMARK_BAR_APPS_SHORTCUT)); | 1469 button->SetImage(views::Button::STATE_NORMAL, |
| 1470 *rb->GetImageSkiaNamed(IDR_BOOKMARK_BAR_APPS_SHORTCUT)); | |
| 1443 button->set_context_menu_controller(this); | 1471 button->set_context_menu_controller(this); |
| 1444 button->set_tag(kAppsShortcutButtonTag); | 1472 button->set_tag(kAppsShortcutButtonTag); |
| 1445 return button; | 1473 return button; |
| 1446 } | 1474 } |
| 1447 | 1475 |
| 1448 void BookmarkBarView::ConfigureButton(const BookmarkNode* node, | 1476 void BookmarkBarView::ConfigureButton(const BookmarkNode* node, |
| 1449 views::TextButton* button) { | 1477 views::LabelButton* button) { |
| 1450 button->SetText(node->GetTitle()); | 1478 button->SetText(node->GetTitle()); |
| 1451 button->SetAccessibleName(node->GetTitle()); | 1479 button->SetAccessibleName(node->GetTitle()); |
| 1452 button->set_id(VIEW_ID_BOOKMARK_BAR_ELEMENT); | 1480 button->set_id(VIEW_ID_BOOKMARK_BAR_ELEMENT); |
| 1453 // We don't always have a theme provider (ui tests, for example). | 1481 // We don't always have a theme provider (ui tests, for example). |
| 1454 if (GetThemeProvider()) { | 1482 if (GetThemeProvider()) { |
| 1455 button->SetEnabledColor(GetThemeProvider()->GetColor( | 1483 button->SetTextColor( |
| 1456 ThemeProperties::COLOR_BOOKMARK_TEXT)); | 1484 views::Button::STATE_NORMAL, |
| 1485 GetThemeProvider()->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)); | |
| 1457 } | 1486 } |
| 1458 | 1487 |
| 1459 button->ClearMaxTextSize(); | 1488 button->set_min_size(gfx::Size()); |
| 1460 button->set_context_menu_controller(this); | 1489 button->set_context_menu_controller(this); |
| 1461 button->set_drag_controller(this); | 1490 button->set_drag_controller(this); |
| 1462 if (node->is_url()) { | 1491 if (node->is_url()) { |
| 1463 const gfx::Image& favicon = model()->GetFavicon(node); | 1492 const gfx::Image& favicon = model()->GetFavicon(node); |
| 1464 if (!favicon.IsEmpty()) | 1493 if (!favicon.IsEmpty()) |
| 1465 button->SetIcon(*favicon.ToImageSkia()); | 1494 button->SetImage(views::Button::STATE_NORMAL, *favicon.ToImageSkia()); |
| 1466 else | 1495 else |
| 1467 button->SetIcon(GetDefaultFavicon()); | 1496 button->SetImage(views::Button::STATE_NORMAL, GetDefaultFavicon()); |
| 1468 } | 1497 } |
| 1469 button->set_max_width(kMaxButtonWidth); | 1498 button->set_max_size(gfx::Size(kMaxButtonWidth, 0)); |
| 1470 } | 1499 } |
| 1471 | 1500 |
| 1472 void BookmarkBarView::BookmarkNodeAddedImpl(BookmarkModel* model, | 1501 void BookmarkBarView::BookmarkNodeAddedImpl(BookmarkModel* model, |
| 1473 const BookmarkNode* parent, | 1502 const BookmarkNode* parent, |
| 1474 int index) { | 1503 int index) { |
| 1475 UpdateButtonsVisibility(); | 1504 UpdateButtonsVisibility(); |
| 1476 if (parent != model->bookmark_bar_node()) { | 1505 if (parent != model->bookmark_bar_node()) { |
| 1477 // We only care about nodes on the bookmark bar. | 1506 // We only care about nodes on the bookmark bar. |
| 1478 return; | 1507 return; |
| 1479 } | 1508 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1511 } | 1540 } |
| 1512 | 1541 |
| 1513 void BookmarkBarView::BookmarkNodeChangedImpl(BookmarkModel* model, | 1542 void BookmarkBarView::BookmarkNodeChangedImpl(BookmarkModel* model, |
| 1514 const BookmarkNode* node) { | 1543 const BookmarkNode* node) { |
| 1515 if (node->parent() != model->bookmark_bar_node()) { | 1544 if (node->parent() != model->bookmark_bar_node()) { |
| 1516 // We only care about nodes on the bookmark bar. | 1545 // We only care about nodes on the bookmark bar. |
| 1517 return; | 1546 return; |
| 1518 } | 1547 } |
| 1519 int index = model->bookmark_bar_node()->GetIndexOf(node); | 1548 int index = model->bookmark_bar_node()->GetIndexOf(node); |
| 1520 DCHECK_NE(-1, index); | 1549 DCHECK_NE(-1, index); |
| 1521 views::TextButton* button = GetBookmarkButton(index); | 1550 views::LabelButton* button = GetBookmarkButton(index); |
| 1522 gfx::Size old_pref = button->GetPreferredSize(); | 1551 gfx::Size old_pref = button->GetPreferredSize(); |
| 1523 ConfigureButton(node, button); | 1552 ConfigureButton(node, button); |
| 1524 gfx::Size new_pref = button->GetPreferredSize(); | 1553 gfx::Size new_pref = button->GetPreferredSize(); |
| 1525 if (old_pref.width() != new_pref.width()) { | 1554 if (old_pref.width() != new_pref.width()) { |
| 1526 Layout(); | 1555 Layout(); |
| 1527 SchedulePaint(); | 1556 SchedulePaint(); |
| 1528 } else if (button->visible()) { | 1557 } else if (button->visible()) { |
| 1529 button->SchedulePaint(); | 1558 button->SchedulePaint(); |
| 1530 } | 1559 } |
| 1531 } | 1560 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1606 int ops = node && client_->CanBeEditedByUser(node) ? | 1635 int ops = node && client_->CanBeEditedByUser(node) ? |
| 1607 ui::DragDropTypes::DRAG_MOVE : | 1636 ui::DragDropTypes::DRAG_MOVE : |
| 1608 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK; | 1637 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK; |
| 1609 location->operation = chrome::GetPreferredBookmarkDropOperation( | 1638 location->operation = chrome::GetPreferredBookmarkDropOperation( |
| 1610 event.source_operations(), ops); | 1639 event.source_operations(), ops); |
| 1611 return; | 1640 return; |
| 1612 } | 1641 } |
| 1613 | 1642 |
| 1614 for (int i = 0; i < GetBookmarkButtonCount() && | 1643 for (int i = 0; i < GetBookmarkButtonCount() && |
| 1615 GetBookmarkButton(i)->visible() && !found; i++) { | 1644 GetBookmarkButton(i)->visible() && !found; i++) { |
| 1616 views::TextButton* button = GetBookmarkButton(i); | 1645 views::LabelButton* button = GetBookmarkButton(i); |
| 1617 int button_x = mirrored_x - button->x(); | 1646 int button_x = mirrored_x - button->x(); |
| 1618 int button_w = button->width(); | 1647 int button_w = button->width(); |
| 1619 if (button_x < button_w) { | 1648 if (button_x < button_w) { |
| 1620 found = true; | 1649 found = true; |
| 1621 const BookmarkNode* node = model()->bookmark_bar_node()->GetChild(i); | 1650 const BookmarkNode* node = model()->bookmark_bar_node()->GetChild(i); |
| 1622 if (node->is_folder()) { | 1651 if (node->is_folder()) { |
| 1623 if (button_x <= views::kDropBetweenPixels) { | 1652 if (button_x <= views::kDropBetweenPixels) { |
| 1624 location->index = i; | 1653 location->index = i; |
| 1625 } else if (button_x < button_w - views::kDropBetweenPixels) { | 1654 } else if (button_x < button_w - views::kDropBetweenPixels) { |
| 1626 location->index = i; | 1655 location->index = i; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1747 return other_bookmarked_button_; | 1776 return other_bookmarked_button_; |
| 1748 } | 1777 } |
| 1749 | 1778 |
| 1750 void BookmarkBarView::UpdateColors() { | 1779 void BookmarkBarView::UpdateColors() { |
| 1751 // We don't always have a theme provider (ui tests, for example). | 1780 // We don't always have a theme provider (ui tests, for example). |
| 1752 const ui::ThemeProvider* theme_provider = GetThemeProvider(); | 1781 const ui::ThemeProvider* theme_provider = GetThemeProvider(); |
| 1753 if (!theme_provider) | 1782 if (!theme_provider) |
| 1754 return; | 1783 return; |
| 1755 SkColor text_color = | 1784 SkColor text_color = |
| 1756 theme_provider->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT); | 1785 theme_provider->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT); |
| 1757 for (int i = 0; i < GetBookmarkButtonCount(); ++i) | 1786 for (int i = 0; i < GetBookmarkButtonCount(); ++i) { |
| 1758 GetBookmarkButton(i)->SetEnabledColor(text_color); | 1787 GetBookmarkButton(i)->SetTextColor(views::Button::STATE_NORMAL, |
| 1759 other_bookmarked_button_->SetEnabledColor(text_color); | 1788 text_color); |
|
msw
2014/06/11 00:55:45
nit: fits on line above.
| |
| 1760 managed_bookmarks_button_->SetEnabledColor(text_color); | 1789 } |
| 1790 other_bookmarked_button_->SetTextColor(views::Button::STATE_NORMAL, | |
| 1791 text_color); | |
|
msw
2014/06/11 00:55:46
nit: |color| would make this call and the one belo
| |
| 1792 managed_bookmarks_button_->SetTextColor(views::Button::STATE_NORMAL, | |
| 1793 text_color); | |
| 1761 if (apps_page_shortcut_->visible()) | 1794 if (apps_page_shortcut_->visible()) |
| 1762 apps_page_shortcut_->SetEnabledColor(text_color); | 1795 apps_page_shortcut_->SetTextColor(views::Button::STATE_NORMAL, text_color); |
| 1763 } | 1796 } |
| 1764 | 1797 |
| 1765 void BookmarkBarView::UpdateButtonsVisibility() { | 1798 void BookmarkBarView::UpdateButtonsVisibility() { |
| 1766 bool has_other_children = !model()->other_node()->empty(); | 1799 bool has_other_children = !model()->other_node()->empty(); |
| 1767 bool update_other = has_other_children != other_bookmarked_button_->visible(); | 1800 bool update_other = has_other_children != other_bookmarked_button_->visible(); |
| 1768 if (update_other) { | 1801 if (update_other) { |
| 1769 other_bookmarked_button_->SetVisible(has_other_children); | 1802 other_bookmarked_button_->SetVisible(has_other_children); |
| 1770 UpdateBookmarksSeparatorVisibility(); | 1803 UpdateBookmarksSeparatorVisibility(); |
| 1771 } | 1804 } |
| 1772 | 1805 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1903 DCHECK(apps_page_shortcut_); | 1936 DCHECK(apps_page_shortcut_); |
| 1904 // Only perform layout if required. | 1937 // Only perform layout if required. |
| 1905 bool visible = chrome::ShouldShowAppsShortcutInBookmarkBar( | 1938 bool visible = chrome::ShouldShowAppsShortcutInBookmarkBar( |
| 1906 browser_->profile(), browser_->host_desktop_type()); | 1939 browser_->profile(), browser_->host_desktop_type()); |
| 1907 if (apps_page_shortcut_->visible() == visible) | 1940 if (apps_page_shortcut_->visible() == visible) |
| 1908 return; | 1941 return; |
| 1909 apps_page_shortcut_->SetVisible(visible); | 1942 apps_page_shortcut_->SetVisible(visible); |
| 1910 UpdateBookmarksSeparatorVisibility(); | 1943 UpdateBookmarksSeparatorVisibility(); |
| 1911 Layout(); | 1944 Layout(); |
| 1912 } | 1945 } |
| OLD | NEW |