diff options
Diffstat (limited to 'chrome/browser/gtk/throb_controller_gtk.h')
-rw-r--r-- | chrome/browser/gtk/throb_controller_gtk.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/chrome/browser/gtk/throb_controller_gtk.h b/chrome/browser/gtk/throb_controller_gtk.h new file mode 100644 index 0000000..9b596cc --- /dev/null +++ b/chrome/browser/gtk/throb_controller_gtk.h @@ -0,0 +1,67 @@ +// 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. + +#ifndef CHROME_BROWSER_GTK_THROB_CONTROLLER_GTK_H_ +#define CHROME_BROWSER_GTK_THROB_CONTROLLER_GTK_H_ + +#include "app/throb_animation.h" +#include "base/scoped_ptr.h" + +typedef struct _GtkWidget GtkWidget; + +// This class handles the "throbbing" of a GtkChromeButton. The visual effect +// of throbbing is created by painting partially transparent hover effects. It +// only works in non-gtk theme mode. This class mainly exists to glue an +// AnimationDelegate (C++ class) to a GtkChromeButton* (GTK/c object). Usage is +// as follows: +// +// GtkWidget* button = gtk_chrome_button_new(); +// ThrobControllerGtk::ThrobFor(button); +// +// The ThrobFor() function will handle creation of the ThrobControllerGtk +// object, which will delete itself automatically when the throbbing is done, +// or when the widget is destroyed. It may also be canceled prematurely with +// +// ThrobControllerGtk* throbber = +// ThrobControllerGtk::GetThrobControllerGtk(button); +// throbber->Destroy(); +class ThrobControllerGtk : public AnimationDelegate { + public: + virtual ~ThrobControllerGtk(); + + GtkWidget* button() { return button_; } + + // Throb for |cycles| cycles. This will override the current remaining + // number of cycles. + void StartThrobbing(int cycles); + + // Get the ThrobControllerGtk for a given GtkChromeButton*. It is an error + // to call this on a widget that is not a GtkChromeButton*. + static ThrobControllerGtk* GetThrobControllerGtk(GtkWidget* button); + + // Make |button| throb. It is an error to try to have two ThrobControllerGtk + // instances for one GtkChromeButton*. + static void ThrobFor(GtkWidget* button); + + // Stop throbbing and delete |this|. + void Destroy(); + + private: + explicit ThrobControllerGtk(GtkWidget* button); + + // Overridden from AnimationDelegate. + virtual void AnimationProgressed(const Animation* animation); + virtual void AnimationEnded(const Animation* animation); + virtual void AnimationCanceled(const Animation* animation); + + static void OnButtonDestroy(GtkWidget* widget, + ThrobControllerGtk* button); + + ThrobAnimation animation_; + GtkWidget* button_; + + DISALLOW_COPY_AND_ASSIGN(ThrobControllerGtk); +}; + +#endif // CHROME_BROWSER_GTK_THROB_CONTROLLER_GTK_H_ |