| Index: chrome/browser/ui/gtk/hover_controller_gtk.h
|
| diff --git a/chrome/browser/ui/gtk/hover_controller_gtk.h b/chrome/browser/ui/gtk/hover_controller_gtk.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8359869f6d97a84191613ed705a6d967380bf83e
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/gtk/hover_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_UI_GTK_HOVER_CONTROLLER_GTK_H_
|
| +#define CHROME_BROWSER_UI_GTK_HOVER_CONTROLLER_GTK_H_
|
| +#pragma once
|
| +
|
| +#include <gtk/gtk.h>
|
| +
|
| +#include "app/gtk_signal.h"
|
| +#include "app/gtk_signal_registrar.h"
|
| +#include "ui/base/animation/animation_delegate.h"
|
| +#include "ui/base/animation/slide_animation.h"
|
| +#include "ui/base/animation/throb_animation.h"
|
| +
|
| +// 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).
|
| +class HoverControllerGtk : public ui::AnimationDelegate {
|
| + public:
|
| + virtual ~HoverControllerGtk();
|
| +
|
| + GtkWidget* button() { return button_; }
|
| +
|
| + // Throb for |cycles| cycles. This will override the current remaining
|
| + // number of cycles. Note that a "cycle" is (somewhat unintuitively) half of
|
| + // a complete throb revolution.
|
| + void StartThrobbing(int cycles);
|
| +
|
| + // Get the HoverControllerGtk for a given GtkChromeButton*. It is an error
|
| + // to call this on a widget that is not a GtkChromeButton*.
|
| + static HoverControllerGtk* GetHoverControllerGtk(GtkWidget* button);
|
| +
|
| + // Creates a GtkChromeButton and adds a HoverControllerGtk for it.
|
| + static GtkWidget* CreateChromeButton();
|
| +
|
| + // Stop throbbing and delete |this|.
|
| + void Destroy();
|
| +
|
| + private:
|
| + explicit HoverControllerGtk(GtkWidget* button);
|
| +
|
| + // Overridden from ui::AnimationDelegate.
|
| + virtual void AnimationProgressed(const ui::Animation* animation);
|
| + virtual void AnimationEnded(const ui::Animation* animation);
|
| + virtual void AnimationCanceled(const ui::Animation* animation);
|
| +
|
| + CHROMEGTK_CALLBACK_1(HoverControllerGtk, gboolean, OnEnter,
|
| + GdkEventCrossing*);
|
| + CHROMEGTK_CALLBACK_1(HoverControllerGtk, gboolean, OnLeave,
|
| + GdkEventCrossing*);
|
| + CHROMEGTK_CALLBACK_1(HoverControllerGtk, void, OnHierarchyChanged,
|
| + GtkWidget*);
|
| + CHROMEGTK_CALLBACK_0(HoverControllerGtk, void, OnDestroy);
|
| +
|
| + ui::ThrobAnimation throb_animation_;
|
| + ui::SlideAnimation hover_animation_;
|
| + GtkWidget* button_;
|
| +
|
| + GtkSignalRegistrar signals_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HoverControllerGtk);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_UI_GTK_HOVER_CONTROLLER_GTK_H_
|
|
|