| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/download/download_started_animation.h" | 5 #include "chrome/browser/download/download_started_animation.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "content/browser/tab_contents/tab_contents.h" | 10 #include "content/browser/tab_contents/tab_contents.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 // Move the arrow to wherever it should currently be. | 42 // Move the arrow to wherever it should currently be. |
| 43 void Reposition(); | 43 void Reposition(); |
| 44 | 44 |
| 45 // Shut down cleanly. | 45 // Shut down cleanly. |
| 46 void Close(); | 46 void Close(); |
| 47 | 47 |
| 48 // Animation implementation. | 48 // Animation implementation. |
| 49 virtual void AnimateToState(double state); | 49 virtual void AnimateToState(double state); |
| 50 | 50 |
| 51 // NotificationObserver | 51 // NotificationObserver |
| 52 virtual void Observe(NotificationType type, | 52 virtual void Observe(int type, |
| 53 const NotificationSource& source, | 53 const NotificationSource& source, |
| 54 const NotificationDetails& details); | 54 const NotificationDetails& details); |
| 55 | 55 |
| 56 // The top level window that floats over the browser and displays the | 56 // The top level window that floats over the browser and displays the |
| 57 // image. | 57 // image. |
| 58 GtkWidget* popup_; | 58 GtkWidget* popup_; |
| 59 | 59 |
| 60 // Dimensions of the image. | 60 // Dimensions of the image. |
| 61 int width_; | 61 int width_; |
| 62 int height_; | 62 int height_; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 91 height_ = gdk_pixbuf_get_height(kDownloadImage); | 91 height_ = gdk_pixbuf_get_height(kDownloadImage); |
| 92 | 92 |
| 93 // If we're too small to show the download image, then don't bother - | 93 // If we're too small to show the download image, then don't bother - |
| 94 // the shelf will be enough. | 94 // the shelf will be enough. |
| 95 tab_contents_->GetContainerBounds(&tab_contents_bounds_); | 95 tab_contents_->GetContainerBounds(&tab_contents_bounds_); |
| 96 if (tab_contents_bounds_.height() < height_) | 96 if (tab_contents_bounds_.height() < height_) |
| 97 return; | 97 return; |
| 98 | 98 |
| 99 registrar_.Add( | 99 registrar_.Add( |
| 100 this, | 100 this, |
| 101 NotificationType::TAB_CONTENTS_HIDDEN, | 101 content::NOTIFICATION_TAB_CONTENTS_HIDDEN, |
| 102 Source<TabContents>(tab_contents_)); | 102 Source<TabContents>(tab_contents_)); |
| 103 registrar_.Add( | 103 registrar_.Add( |
| 104 this, | 104 this, |
| 105 NotificationType::TAB_CONTENTS_DESTROYED, | 105 content::NOTIFICATION_TAB_CONTENTS_DESTROYED, |
| 106 Source<TabContents>(tab_contents_)); | 106 Source<TabContents>(tab_contents_)); |
| 107 | 107 |
| 108 // TODO(estade): don't show up on the wrong virtual desktop. | 108 // TODO(estade): don't show up on the wrong virtual desktop. |
| 109 | 109 |
| 110 popup_ = gtk_window_new(GTK_WINDOW_POPUP); | 110 popup_ = gtk_window_new(GTK_WINDOW_POPUP); |
| 111 GtkWidget* image = gtk_image_new_from_pixbuf(kDownloadImage); | 111 GtkWidget* image = gtk_image_new_from_pixbuf(kDownloadImage); |
| 112 gtk_container_add(GTK_CONTAINER(popup_), image); | 112 gtk_container_add(GTK_CONTAINER(popup_), image); |
| 113 | 113 |
| 114 // Set the shape of the window to that of the arrow. Areas with | 114 // Set the shape of the window to that of the arrow. Areas with |
| 115 // opacity less than 0xff (i.e. <100% opacity) will be transparent. | 115 // opacity less than 0xff (i.e. <100% opacity) will be transparent. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 143 static_cast<int>(tab_contents_bounds_.bottom() - | 143 static_cast<int>(tab_contents_bounds_.bottom() - |
| 144 height_ - height_ * (1 - GetCurrentValue()))); | 144 height_ - height_ * (1 - GetCurrentValue()))); |
| 145 } | 145 } |
| 146 | 146 |
| 147 void DownloadStartedAnimationGtk::Close() { | 147 void DownloadStartedAnimationGtk::Close() { |
| 148 if (!tab_contents_) | 148 if (!tab_contents_) |
| 149 return; | 149 return; |
| 150 | 150 |
| 151 registrar_.Remove( | 151 registrar_.Remove( |
| 152 this, | 152 this, |
| 153 NotificationType::TAB_CONTENTS_HIDDEN, | 153 content::NOTIFICATION_TAB_CONTENTS_HIDDEN, |
| 154 Source<TabContents>(tab_contents_)); | 154 Source<TabContents>(tab_contents_)); |
| 155 registrar_.Remove( | 155 registrar_.Remove( |
| 156 this, | 156 this, |
| 157 NotificationType::TAB_CONTENTS_DESTROYED, | 157 content::NOTIFICATION_TAB_CONTENTS_DESTROYED, |
| 158 Source<TabContents>(tab_contents_)); | 158 Source<TabContents>(tab_contents_)); |
| 159 | 159 |
| 160 tab_contents_ = NULL; | 160 tab_contents_ = NULL; |
| 161 gtk_widget_destroy(popup_); | 161 gtk_widget_destroy(popup_); |
| 162 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 162 MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 163 } | 163 } |
| 164 | 164 |
| 165 void DownloadStartedAnimationGtk::AnimateToState(double state) { | 165 void DownloadStartedAnimationGtk::AnimateToState(double state) { |
| 166 if (!tab_contents_) | 166 if (!tab_contents_) |
| 167 return; | 167 return; |
| 168 | 168 |
| 169 if (state >= 1.0) { | 169 if (state >= 1.0) { |
| 170 Close(); | 170 Close(); |
| 171 } else { | 171 } else { |
| 172 Reposition(); | 172 Reposition(); |
| 173 | 173 |
| 174 // Start at zero, peak halfway and end at zero. | 174 // Start at zero, peak halfway and end at zero. |
| 175 double opacity = std::min(1.0 - pow(GetCurrentValue() - 0.5, 2) * 4.0, | 175 double opacity = std::min(1.0 - pow(GetCurrentValue() - 0.5, 2) * 4.0, |
| 176 static_cast<double>(1.0)); | 176 static_cast<double>(1.0)); |
| 177 | 177 |
| 178 // This only works when there's a compositing manager running. Oh well. | 178 // This only works when there's a compositing manager running. Oh well. |
| 179 gtk_window_set_opacity(GTK_WINDOW(popup_), opacity); | 179 gtk_window_set_opacity(GTK_WINDOW(popup_), opacity); |
| 180 } | 180 } |
| 181 } | 181 } |
| 182 | 182 |
| 183 void DownloadStartedAnimationGtk::Observe(NotificationType type, | 183 void DownloadStartedAnimationGtk::Observe(int type, |
| 184 const NotificationSource& source, | 184 const NotificationSource& source, |
| 185 const NotificationDetails& details) { | 185 const NotificationDetails& details) { |
| 186 Close(); | 186 Close(); |
| 187 } | 187 } |
| 188 | 188 |
| 189 } // namespace | 189 } // namespace |
| 190 | 190 |
| 191 // static | 191 // static |
| 192 void DownloadStartedAnimation::Show(TabContents* tab_contents) { | 192 void DownloadStartedAnimation::Show(TabContents* tab_contents) { |
| 193 // The animation will delete itself. | 193 // The animation will delete itself. |
| 194 new DownloadStartedAnimationGtk(tab_contents); | 194 new DownloadStartedAnimationGtk(tab_contents); |
| 195 } | 195 } |
| OLD | NEW |