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

Side by Side Diff: chrome/browser/ui/gtk/location_bar_view_gtk.cc

Issue 10806058: Move icon fallbacks into ExtensionAction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix kalman's comments. Created 8 years, 5 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/gtk/location_bar_view_gtk.h" 5 #include "chrome/browser/ui/gtk/location_bar_view_gtk.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 1603 matching lines...) Expand 10 before | Expand all | Expand 10 after
1614 } 1614 }
1615 1615
1616 //////////////////////////////////////////////////////////////////////////////// 1616 ////////////////////////////////////////////////////////////////////////////////
1617 // LocationBarViewGtk::PageActionViewGtk 1617 // LocationBarViewGtk::PageActionViewGtk
1618 1618
1619 LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk( 1619 LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk(
1620 LocationBarViewGtk* owner, 1620 LocationBarViewGtk* owner,
1621 ExtensionAction* page_action) 1621 ExtensionAction* page_action)
1622 : owner_(NULL), 1622 : owner_(NULL),
1623 page_action_(page_action), 1623 page_action_(page_action),
1624 last_icon_pixbuf_(NULL),
1625 tracker_(this), 1624 tracker_(this),
1626 current_tab_id_(-1), 1625 current_tab_id_(-1),
1627 window_(NULL), 1626 window_(NULL),
1628 accel_group_(NULL), 1627 accel_group_(NULL),
1629 preview_enabled_(false), 1628 preview_enabled_(false),
1630 ALLOW_THIS_IN_INITIALIZER_LIST(scoped_icon_animation_observer_( 1629 ALLOW_THIS_IN_INITIALIZER_LIST(scoped_icon_animation_observer_(
1631 page_action->GetIconAnimation( 1630 page_action->GetIconAnimation(
1632 SessionID::IdForTab(owner->GetTabContents())), 1631 SessionID::IdForTab(owner->GetTabContents())),
1633 this)) { 1632 this)) {
1634 event_box_.Own(gtk_event_box_new()); 1633 event_box_.Own(gtk_event_box_new());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1670 // We set the owner last of all so that we can determine whether we are in 1669 // We set the owner last of all so that we can determine whether we are in
1671 // the process of initializing this class or not. 1670 // the process of initializing this class or not.
1672 owner_ = owner; 1671 owner_ = owner;
1673 } 1672 }
1674 1673
1675 LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() { 1674 LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() {
1676 DisconnectPageActionAccelerator(); 1675 DisconnectPageActionAccelerator();
1677 1676
1678 image_.Destroy(); 1677 image_.Destroy();
1679 event_box_.Destroy(); 1678 event_box_.Destroy();
1680 for (PixbufMap::iterator iter = pixbufs_.begin(); iter != pixbufs_.end();
1681 ++iter) {
1682 g_object_unref(iter->second);
1683 }
1684 if (last_icon_pixbuf_)
1685 g_object_unref(last_icon_pixbuf_);
1686 } 1679 }
1687 1680
1688 bool LocationBarViewGtk::PageActionViewGtk::IsVisible() { 1681 bool LocationBarViewGtk::PageActionViewGtk::IsVisible() {
1689 return gtk_widget_get_visible(widget()); 1682 return gtk_widget_get_visible(widget());
1690 } 1683 }
1691 1684
1692 void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility( 1685 void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility(
1693 WebContents* contents, const GURL& url) { 1686 WebContents* contents, const GURL& url) {
1694 // Save this off so we can pass it back to the extension when the action gets 1687 // Save this off so we can pass it back to the extension when the action gets
1695 // executed. See PageActionImageView::OnMousePressed. 1688 // executed. See PageActionImageView::OnMousePressed.
1696 current_tab_id_ = contents ? ExtensionTabUtil::GetTabId(contents) : -1; 1689 current_tab_id_ = contents ? ExtensionTabUtil::GetTabId(contents) : -1;
1697 current_url_ = url; 1690 current_url_ = url;
1698 1691
1699 bool visible = contents && 1692 bool visible = contents &&
1700 (preview_enabled_ || page_action_->GetIsVisible(current_tab_id_)); 1693 (preview_enabled_ || page_action_->GetIsVisible(current_tab_id_));
1701 if (visible) { 1694 if (visible) {
1702 // Set the tooltip. 1695 // Set the tooltip.
1703 gtk_widget_set_tooltip_text(event_box_.get(), 1696 gtk_widget_set_tooltip_text(event_box_.get(),
1704 page_action_->GetTitle(current_tab_id_).c_str()); 1697 page_action_->GetTitle(current_tab_id_).c_str());
1705 1698
1706 // Set the image. 1699 // Set the image.
1707 // It can come from three places. In descending order of priority: 1700 gfx::Image icon = page_action_->GetIcon(current_tab_id_, loaded_icons_);
1708 // - The developer can set it dynamically by path or bitmap. It will be in 1701 if (!icon.IsEmpty()) {
1709 // page_action_->GetIcon(). 1702 GdkPixbuf* pixbuf = icon.ToGdkPixbuf();
1710 // - The developer can set it dyanmically by index. It will be in 1703 DCHECK(pixbuf);
1711 // page_action_->GetIconIndex(). 1704 gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbuf);
1712 // - It can be set in the manifest by path. It will be in page_action_->
1713 // default_icon_path().
1714
1715 // First look for a dynamically set bitmap.
1716 SkBitmap icon = page_action_->GetIcon(current_tab_id_);
1717 GdkPixbuf* pixbuf = NULL;
1718 if (!icon.isNull()) {
1719 if (icon.pixelRef() != last_icon_skbitmap_.pixelRef()) {
1720 if (last_icon_pixbuf_)
1721 g_object_unref(last_icon_pixbuf_);
1722 last_icon_skbitmap_ = icon;
1723 last_icon_pixbuf_ = gfx::GdkPixbufFromSkBitmap(icon);
1724 }
1725 DCHECK(last_icon_pixbuf_);
1726 pixbuf = last_icon_pixbuf_;
1727 } else {
1728 // Otherwise look for a dynamically set index, or fall back to the
1729 // default path.
1730 int icon_index = page_action_->GetIconIndex(current_tab_id_);
1731 std::string icon_path = (icon_index < 0) ?
1732 page_action_->default_icon_path() :
1733 page_action_->icon_paths()->at(icon_index);
1734 if (!icon_path.empty()) {
1735 PixbufMap::iterator iter = pixbufs_.find(icon_path);
1736 if (iter != pixbufs_.end())
1737 pixbuf = iter->second;
1738 }
1739 }
1740 // The pixbuf might not be loaded yet.
1741 if (pixbuf) {
1742 const ExtensionAction::IconAnimation* icon_animation =
1743 scoped_icon_animation_observer_.icon_animation();
1744 if (icon_animation) {
1745 // Draw |pixbuf| with the fade-in |icon_animation_| applied to it.
1746 // Use a temporary gfx::Image to do the conversion to/from a SkBitmap.
1747 g_object_ref(pixbuf); // don't let gfx::Image take ownership.
1748 gfx::Image animated_image(
1749 icon_animation->Apply(*gfx::Image(pixbuf).ToSkBitmap()));
1750 gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()),
1751 animated_image.ToGdkPixbuf());
1752 } else {
1753 gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbuf);
1754 }
1755 } 1705 }
1756 } 1706 }
1757 1707
1758 bool old_visible = IsVisible(); 1708 bool old_visible = IsVisible();
1759 if (visible) 1709 if (visible)
1760 gtk_widget_show_all(event_box_.get()); 1710 gtk_widget_show_all(event_box_.get());
1761 else 1711 else
1762 gtk_widget_hide_all(event_box_.get()); 1712 gtk_widget_hide_all(event_box_.get());
1763 1713
1764 if (visible != old_visible) { 1714 if (visible != old_visible) {
(...skipping 11 matching lines...) Expand all
1776 // We loaded icons()->size() icons, plus one extra if the page action had 1726 // We loaded icons()->size() icons, plus one extra if the page action had
1777 // a default icon. 1727 // a default icon.
1778 int total_icons = static_cast<int>(page_action_->icon_paths()->size()); 1728 int total_icons = static_cast<int>(page_action_->icon_paths()->size());
1779 if (!page_action_->default_icon_path().empty()) 1729 if (!page_action_->default_icon_path().empty())
1780 total_icons++; 1730 total_icons++;
1781 DCHECK(index < total_icons); 1731 DCHECK(index < total_icons);
1782 1732
1783 // Map the index of the loaded image back to its name. If we ever get an 1733 // Map the index of the loaded image back to its name. If we ever get an
1784 // index greater than the number of icons, it must be the default icon. 1734 // index greater than the number of icons, it must be the default icon.
1785 if (!image.IsEmpty()) { 1735 if (!image.IsEmpty()) {
1786 GdkPixbuf* pixbuf =
1787 static_cast<GdkPixbuf*>(g_object_ref(image.ToGdkPixbuf()));
1788 if (index < static_cast<int>(page_action_->icon_paths()->size())) 1736 if (index < static_cast<int>(page_action_->icon_paths()->size()))
1789 pixbufs_[page_action_->icon_paths()->at(index)] = pixbuf; 1737 loaded_icons_[page_action_->icon_paths()->at(index)] = image;
1790 else 1738 else
1791 pixbufs_[page_action_->default_icon_path()] = pixbuf; 1739 loaded_icons_[page_action_->default_icon_path()] = image;
1792 } 1740 }
1793 1741
1794 // If we have no owner, that means this class is still being constructed. 1742 // If we have no owner, that means this class is still being constructed.
1795 TabContents* tab_contents = owner_ ? owner_->GetTabContents() : NULL; 1743 TabContents* tab_contents = owner_ ? owner_->GetTabContents() : NULL;
1796 if (tab_contents) 1744 if (tab_contents)
1797 UpdateVisibility(tab_contents->web_contents(), current_url_); 1745 UpdateVisibility(tab_contents->web_contents(), current_url_);
1798 } 1746 }
1799 1747
1800 void LocationBarViewGtk::PageActionViewGtk::TestActivatePageAction() { 1748 void LocationBarViewGtk::PageActionViewGtk::TestActivatePageAction() {
1801 GdkEventButton event = {}; 1749 GdkEventButton event = {};
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1972 } 1920 }
1973 1921
1974 void LocationBarViewGtk::PageActionViewGtk::InspectPopup( 1922 void LocationBarViewGtk::PageActionViewGtk::InspectPopup(
1975 ExtensionAction* action) { 1923 ExtensionAction* action) {
1976 ExtensionPopupGtk::Show( 1924 ExtensionPopupGtk::Show(
1977 action->GetPopupUrl(current_tab_id_), 1925 action->GetPopupUrl(current_tab_id_),
1978 owner_->browser_, 1926 owner_->browser_,
1979 event_box_.get(), 1927 event_box_.get(),
1980 ExtensionPopupGtk::SHOW_AND_INSPECT); 1928 ExtensionPopupGtk::SHOW_AND_INSPECT);
1981 } 1929 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698