Index: chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc |
diff --git a/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc b/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc |
deleted file mode 100644 |
index 260e4879661dcfa81606ea8286eae0fe3a3daa59..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/infobars/extension_infobar_gtk.cc |
+++ /dev/null |
@@ -1,243 +0,0 @@ |
-// Copyright (c) 2012 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/ui/gtk/infobars/extension_infobar_gtk.h" |
- |
-#include "base/debug/trace_event.h" |
-#include "chrome/browser/extensions/extension_context_menu_model.h" |
-#include "chrome/browser/extensions/extension_view_host.h" |
-#include "chrome/browser/extensions/image_loader.h" |
-#include "chrome/browser/platform_util.h" |
-#include "chrome/browser/ui/gtk/browser_window_gtk.h" |
-#include "chrome/browser/ui/gtk/custom_button.h" |
-#include "chrome/browser/ui/gtk/gtk_chrome_button.h" |
-#include "chrome/browser/ui/gtk/gtk_util.h" |
-#include "chrome/browser/ui/gtk/infobars/infobar_container_gtk.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/render_widget_host_view.h" |
-#include "extensions/common/constants.h" |
-#include "extensions/common/extension.h" |
-#include "extensions/common/extension_icon_set.h" |
-#include "extensions/common/extension_resource.h" |
-#include "extensions/common/manifest_handlers/icons_handler.h" |
-#include "grit/theme_resources.h" |
-#include "ui/base/gtk/gtk_signal_registrar.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/gtk_util.h" |
-#include "ui/gfx/image/image.h" |
- |
- |
-// ExtensionInfoBarDelegate --------------------------------------------------- |
- |
-// static |
-scoped_ptr<InfoBar> ExtensionInfoBarDelegate::CreateInfoBar( |
- scoped_ptr<ExtensionInfoBarDelegate> delegate) { |
- return scoped_ptr<InfoBar>(new ExtensionInfoBarGtk(delegate.Pass())); |
-} |
- |
- |
-// ExtensionInfoBarGtk -------------------------------------------------------- |
- |
-ExtensionInfoBarGtk::ExtensionInfoBarGtk( |
- scoped_ptr<ExtensionInfoBarDelegate> delegate) |
- : InfoBarGtk(delegate.PassAs<InfoBarDelegate>()), |
- view_(NULL), |
- button_(NULL), |
- icon_(NULL), |
- alignment_(NULL), |
- weak_ptr_factory_(this) { |
- int height = GetDelegate()->height(); |
- SetBarTargetHeight((height > 0) ? (height + kSeparatorLineHeight) : 0); |
-} |
- |
-ExtensionInfoBarGtk::~ExtensionInfoBarGtk() { |
-} |
- |
-void ExtensionInfoBarGtk::PlatformSpecificSetOwner() { |
- InfoBarGtk::PlatformSpecificSetOwner(); |
- |
- // Always render the close button as if we were doing chrome style widget |
- // rendering. For extension infobars, we force chrome style rendering because |
- // extension authors are going to expect to match the declared gradient in |
- // extensions_infobar.css, and the close button provided by some GTK+ themes |
- // won't look good on this background. |
- ForceCloseButtonToUseChromeTheme(); |
- |
- icon_ = gtk_image_new(); |
- gtk_misc_set_alignment(GTK_MISC(icon_), 0.5, 0.5); |
- |
- extensions::ExtensionViewHost* extension_view_host = |
- GetDelegate()->extension_view_host(); |
- const extensions::Extension* extension = extension_view_host->extension(); |
- |
- if (extension->ShowConfigureContextMenus()) { |
- button_ = gtk_chrome_button_new(); |
- gtk_chrome_button_set_use_gtk_rendering(GTK_CHROME_BUTTON(button_), FALSE); |
- g_object_set_data(G_OBJECT(button_), "left-align-popup", |
- reinterpret_cast<void*>(true)); |
- |
- gtk_button_set_image(GTK_BUTTON(button_), icon_); |
- gtk_util::CenterWidgetInHBox(hbox(), button_, false, 0); |
- } else { |
- gtk_util::CenterWidgetInHBox(hbox(), icon_, false, 0); |
- } |
- |
- // Start loading the image for the menu button. |
- extensions::ExtensionResource icon_resource = |
- extensions::IconsInfo::GetIconResource( |
- extension, |
- extension_misc::EXTENSION_ICON_BITTY, |
- ExtensionIconSet::MATCH_EXACTLY); |
- // Load image asynchronously, calling back OnImageLoaded. |
- extensions::ImageLoader* loader = |
- extensions::ImageLoader::Get(extension_view_host->browser_context()); |
- loader->LoadImageAsync(extension, icon_resource, |
- gfx::Size(extension_misc::EXTENSION_ICON_BITTY, |
- extension_misc::EXTENSION_ICON_BITTY), |
- base::Bind(&ExtensionInfoBarGtk::OnImageLoaded, |
- weak_ptr_factory_.GetWeakPtr())); |
- |
- // Pad the bottom of the infobar by one pixel for the border. |
- alignment_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); |
- gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_), 0, 1, 0, 0); |
- gtk_box_pack_start(GTK_BOX(hbox()), alignment_, TRUE, TRUE, 0); |
- |
- view_ = extension_view_host->view(); |
- |
- if (gtk_widget_get_parent(view_->native_view())) { |
- gtk_widget_reparent(view_->native_view(), alignment_); |
- } else { |
- gtk_container_add(GTK_CONTAINER(alignment_), view_->native_view()); |
- } |
- |
- if (button_) { |
- signals()->Connect(button_, "button-press-event", |
- G_CALLBACK(&OnButtonPressThunk), this); |
- } |
- signals()->Connect(view_->native_view(), "expose-event", |
- G_CALLBACK(&OnExposeThunk), this); |
- signals()->Connect(view_->native_view(), "size_allocate", |
- G_CALLBACK(&OnSizeAllocateThunk), this); |
-} |
- |
-void ExtensionInfoBarGtk::PlatformSpecificHide(bool animate) { |
- DCHECK(view_); |
- DCHECK(alignment_); |
- gtk_util::RemoveAllChildren(alignment_); |
-} |
- |
-void ExtensionInfoBarGtk::GetTopColor(InfoBarDelegate::Type type, |
- double* r, double* g, double* b) { |
- // Extension infobars are always drawn with chrome-theme colors. |
- *r = *g = *b = 233.0 / 255.0; |
-} |
- |
-void ExtensionInfoBarGtk::GetBottomColor(InfoBarDelegate::Type type, |
- double* r, double* g, double* b) { |
- *r = *g = *b = 218.0 / 255.0; |
-} |
- |
-void ExtensionInfoBarGtk::StoppedShowing() { |
- if (button_) |
- gtk_chrome_button_unset_paint_state(GTK_CHROME_BUTTON(button_)); |
-} |
- |
-void ExtensionInfoBarGtk::OnImageLoaded(const gfx::Image& image) { |
- |
- DCHECK(icon_); |
- // TODO(erg): IDR_EXTENSIONS_SECTION should have an IDR_INFOBAR_EXTENSIONS |
- // icon of the correct size with real subpixel shading and such. |
- const gfx::ImageSkia* icon = NULL; |
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
- if (image.IsEmpty()) |
- icon = rb.GetImageSkiaNamed(IDR_EXTENSIONS_SECTION); |
- else |
- icon = image.ToImageSkia(); |
- |
- SkBitmap bitmap; |
- if (button_) { |
- gfx::ImageSkia* drop_image = rb.GetImageSkiaNamed(IDR_APP_DROPARROW); |
- |
- int image_size = extension_misc::EXTENSION_ICON_BITTY; |
- // The margin between the extension icon and the drop-down arrow bitmap. |
- static const int kDropArrowLeftMargin = 3; |
- scoped_ptr<gfx::Canvas> canvas(new gfx::Canvas( |
- gfx::Size(image_size + kDropArrowLeftMargin + drop_image->width(), |
- image_size), 1.0f, false)); |
- canvas->DrawImageInt(*icon, 0, 0, icon->width(), icon->height(), 0, 0, |
- image_size, image_size, false); |
- canvas->DrawImageInt(*drop_image, image_size + kDropArrowLeftMargin, |
- image_size / 2); |
- bitmap = canvas->ExtractImageRep().sk_bitmap(); |
- } else { |
- bitmap = *icon->bitmap(); |
- } |
- |
- GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(bitmap); |
- gtk_image_set_from_pixbuf(GTK_IMAGE(icon_), pixbuf); |
- g_object_unref(pixbuf); |
-} |
- |
-ExtensionInfoBarDelegate* ExtensionInfoBarGtk::GetDelegate() { |
- return delegate()->AsExtensionInfoBarDelegate(); |
-} |
- |
-Browser* ExtensionInfoBarGtk::GetBrowser() { |
- DCHECK(icon_); |
- // Get the Browser object this infobar is attached to. |
- GtkWindow* parent = platform_util::GetTopLevel(icon_); |
- return parent ? |
- BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent)->browser() : |
- NULL; |
-} |
- |
-ExtensionContextMenuModel* ExtensionInfoBarGtk::BuildMenuModel() { |
- const extensions::Extension* extension = GetDelegate()->extension(); |
- if (!extension->ShowConfigureContextMenus()) |
- return NULL; |
- |
- Browser* browser = GetBrowser(); |
- if (!browser) |
- return NULL; |
- |
- return new ExtensionContextMenuModel(extension, browser); |
-} |
- |
-void ExtensionInfoBarGtk::OnSizeAllocate(GtkWidget* widget, |
- GtkAllocation* allocation) { |
- gfx::Size new_size(allocation->width, allocation->height); |
- |
- GetDelegate()->extension_view_host()->view()->render_view_host()->GetView()-> |
- SetSize(new_size); |
-} |
- |
-gboolean ExtensionInfoBarGtk::OnButtonPress(GtkWidget* widget, |
- GdkEventButton* event) { |
- if (event->button != 1) |
- return FALSE; |
- |
- DCHECK(button_); |
- |
- context_menu_model_ = BuildMenuModel(); |
- if (!context_menu_model_.get()) |
- return FALSE; |
- |
- gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(widget), |
- GTK_STATE_ACTIVE); |
- ShowMenuWithModel(widget, this, context_menu_model_.get()); |
- |
- return TRUE; |
-} |
- |
-gboolean ExtensionInfoBarGtk::OnExpose(GtkWidget* sender, |
- GdkEventExpose* event) { |
- TRACE_EVENT0("ui::gtk", "ExtensionInfoBarGtk::OnExpose"); |
- |
- // We also need to draw our infobar arrows over the renderer. |
- static_cast<InfoBarContainerGtk*>(container())-> |
- PaintInfobarBitsOn(sender, event, this); |
- |
- return FALSE; |
-} |