Index: chrome/browser/gtk/theme_install_bubble_view_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/theme_install_bubble_view_gtk.cc (revision 71352) |
+++ chrome/browser/gtk/theme_install_bubble_view_gtk.cc (working copy) |
@@ -1,185 +0,0 @@ |
-// 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/gtk/theme_install_bubble_view_gtk.h" |
- |
-#include <math.h> |
- |
-#include "app/l10n_util.h" |
-#include "chrome/browser/gtk/gtk_util.h" |
-#include "chrome/browser/gtk/rounded_window.h" |
-#include "chrome/common/notification_service.h" |
-#include "chrome/common/notification_type.h" |
-#include "grit/generated_resources.h" |
- |
-// Roundedness of bubble. |
-static const int kBubbleCornerRadius = 4; |
- |
-// Padding between border of bubble and text. |
-static const int kTextPadding = 8; |
- |
-// The bubble is partially transparent. |
-static const double kBubbleOpacity = static_cast<double>(0xcc) / 0xff; |
- |
-ThemeInstallBubbleViewGtk* ThemeInstallBubbleViewGtk::instance_ = NULL; |
- |
-// ThemeInstallBubbleViewGtk, public ------------------------------------------- |
- |
-// static |
-void ThemeInstallBubbleViewGtk::Show(GtkWindow* parent) { |
- if (instance_) |
- instance_->increment_num_loading(); |
- else |
- instance_ = new ThemeInstallBubbleViewGtk(GTK_WIDGET(parent)); |
-} |
- |
-void ThemeInstallBubbleViewGtk::Observe(NotificationType type, |
- const NotificationSource& source, |
- const NotificationDetails& details) { |
- if (--num_loads_extant_ == 0) |
- delete this; |
-} |
- |
-// ThemeInstallBubbleViewGtk, private ------------------------------------------ |
- |
-ThemeInstallBubbleViewGtk::ThemeInstallBubbleViewGtk(GtkWidget* parent) |
- : widget_(NULL), |
- parent_(parent), |
- num_loads_extant_(1) { |
- InitWidgets(); |
- |
- // Close when theme has been installed. |
- registrar_.Add( |
- this, |
- NotificationType::BROWSER_THEME_CHANGED, |
- NotificationService::AllSources()); |
- |
- // Close when we are installing an extension, not a theme. |
- registrar_.Add( |
- this, |
- NotificationType::NO_THEME_DETECTED, |
- NotificationService::AllSources()); |
- registrar_.Add( |
- this, |
- NotificationType::EXTENSION_INSTALLED, |
- NotificationService::AllSources()); |
- registrar_.Add( |
- this, |
- NotificationType::EXTENSION_INSTALL_ERROR, |
- NotificationService::AllSources()); |
- |
- // Don't let the bubble overlap the confirm dialog. |
- registrar_.Add( |
- this, |
- NotificationType::EXTENSION_WILL_SHOW_CONFIRM_DIALOG, |
- NotificationService::AllSources()); |
-} |
- |
-ThemeInstallBubbleViewGtk::~ThemeInstallBubbleViewGtk() { |
- gtk_widget_destroy(widget_); |
- instance_ = NULL; |
-} |
- |
-void ThemeInstallBubbleViewGtk::InitWidgets() { |
- // Widgematically, the bubble is just a label in a popup window. |
- widget_ = gtk_window_new(GTK_WINDOW_POPUP); |
- gtk_container_set_border_width(GTK_CONTAINER(widget_), kTextPadding); |
- GtkWidget* label = gtk_label_new(NULL); |
- |
- gchar* markup = g_markup_printf_escaped( |
- "<span size='xx-large'>%s</span>", |
- l10n_util::GetStringUTF8(IDS_THEME_LOADING_TITLE).c_str()); |
- gtk_label_set_markup(GTK_LABEL(label), markup); |
- g_free(markup); |
- |
- gtk_widget_modify_fg(label, GTK_STATE_NORMAL, >k_util::kGdkWhite); |
- gtk_container_add(GTK_CONTAINER(widget_), label); |
- |
- // We need to show the label so we'll know the widget's actual size when we |
- // call MoveWindow(). |
- gtk_widget_show_all(label); |
- |
- bool composited = false; |
- if (gtk_util::IsScreenComposited()) { |
- composited = true; |
- GdkScreen* screen = gtk_widget_get_screen(widget_); |
- GdkColormap* colormap = gdk_screen_get_rgba_colormap(screen); |
- |
- if (colormap) |
- gtk_widget_set_colormap(widget_, colormap); |
- else |
- composited = false; |
- } |
- |
- if (composited) { |
- gtk_widget_set_app_paintable(widget_, TRUE); |
- g_signal_connect(widget_, "expose-event", |
- G_CALLBACK(OnExposeThunk), this); |
- gtk_widget_realize(widget_); |
- } else { |
- gtk_widget_modify_bg(widget_, GTK_STATE_NORMAL, >k_util::kGdkBlack); |
- GdkColor color; |
- gtk_util::ActAsRoundedWindow(widget_, color, kBubbleCornerRadius, |
- gtk_util::ROUNDED_ALL, gtk_util::BORDER_NONE); |
- } |
- |
- MoveWindow(); |
- |
- g_signal_connect(widget_, "unmap-event", |
- G_CALLBACK(OnUnmapEventThunk), this); |
- |
- gtk_widget_show_all(widget_); |
-} |
- |
-void ThemeInstallBubbleViewGtk::MoveWindow() { |
- GtkRequisition req; |
- gtk_widget_size_request(widget_, &req); |
- |
- gint parent_x = 0, parent_y = 0; |
- gdk_window_get_position(parent_->window, &parent_x, &parent_y); |
- gint parent_width = parent_->allocation.width; |
- gint parent_height = parent_->allocation.height; |
- |
- gint x = parent_x + parent_width / 2 - req.width / 2; |
- gint y = parent_y + parent_height / 2 - req.height / 2; |
- |
- gtk_window_move(GTK_WINDOW(widget_), x, y); |
-} |
- |
-gboolean ThemeInstallBubbleViewGtk::OnUnmapEvent(GtkWidget* widget) { |
- delete this; |
- return FALSE; |
-} |
- |
-gboolean ThemeInstallBubbleViewGtk::OnExpose(GtkWidget* widget, |
- GdkEventExpose* event) { |
- cairo_t* cr = gdk_cairo_create(event->window); |
- gdk_cairo_rectangle(cr, &event->area); |
- cairo_clip(cr); |
- |
- cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR); |
- cairo_paint(cr); |
- cairo_set_operator(cr, CAIRO_OPERATOR_OVER); |
- |
- // |inner_rect| has its corners at the centerpoints of the corner arcs. |
- gfx::Rect inner_rect(widget_->allocation); |
- int inset = kBubbleCornerRadius; |
- inner_rect.Inset(inset, inset); |
- |
- // The positive y axis is down, so M_PI_2 is down. |
- cairo_arc(cr, inner_rect.x(), inner_rect.y(), inset, |
- M_PI, 3 * M_PI_2); |
- cairo_arc(cr, inner_rect.right(), inner_rect.y(), inset, |
- 3 * M_PI_2, 0); |
- cairo_arc(cr, inner_rect.right(), inner_rect.bottom(), inset, |
- 0, M_PI_2); |
- cairo_arc(cr, inner_rect.x(), inner_rect.bottom(), inset, |
- M_PI_2, M_PI); |
- |
- cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, kBubbleOpacity); |
- cairo_fill(cr); |
- cairo_destroy(cr); |
- |
- return FALSE; |
-} |