Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1716)

Unified Diff: ui/views/animation/ink_drop_host_view.h

Issue 2042073002: Centered flood fill style ink drop ripples on mouse/touch points. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renamed LocatedEvent::AsLocatedIfLocatedEvent() as FromIfValid(). Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/animation/ink_drop.h ('k') | ui/views/animation/ink_drop_host_view.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/animation/ink_drop_host_view.h
diff --git a/ui/views/animation/ink_drop_host_view.h b/ui/views/animation/ink_drop_host_view.h
index c6334de5912abd181a17ef7b441d92aec9152b78..af3621fb68a48388814171acadc9ad17be17b1a1 100644
--- a/ui/views/animation/ink_drop_host_view.h
+++ b/ui/views/animation/ink_drop_host_view.h
@@ -8,6 +8,7 @@
#include <memory>
#include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/animation/ink_drop.h"
#include "ui/views/animation/ink_drop_host.h"
@@ -25,6 +26,9 @@ class InkDropHighlight;
// A view that provides InkDropHost functionality.
class VIEWS_EXPORT InkDropHostView : public View, public InkDropHost {
public:
+ InkDropHostView();
+ ~InkDropHostView() override;
+
// Overridden from InkDropHost:
void AddInkDropLayer(ui::Layer* ink_drop_layer) override;
void RemoveInkDropLayer(ui::Layer* ink_drop_layer) override;
@@ -34,11 +38,29 @@ class VIEWS_EXPORT InkDropHostView : public View, public InkDropHost {
void set_ink_drop_size(const gfx::Size& size) { ink_drop_size_ = size; }
protected:
- InkDropHostView();
- ~InkDropHostView() override;
-
static const int kInkDropSmallCornerRadius;
+ // Returns the default InkDropRipple centered on |center_point|.
+ std::unique_ptr<InkDropRipple> CreateDefaultInkDropRipple(
+ const gfx::Point& center_point) const;
+
+ // Returns the default InkDropHighlight centered on |center_point|.
+ std::unique_ptr<InkDropHighlight> CreateDefaultInkDropHighlight(
+ const gfx::Point& center_point) const;
+
+ // Returns the point of the |last_ripple_triggering_event_| if it was a
+ // LocatedEvent, otherwise the center point of the local bounds is returned.
+ gfx::Point GetInkDropCenterBasedOnLastEvent() const;
+
+ // Animates |ink_drop_| to the desired |ink_drop_state|. Caches |event| as the
+ // last_ripple_triggering_event().
+ //
+ // *** NOTE ***: |event| has been plumbed through on a best effort basis for
+ // the purposes of centering ink drop ripples on located Events. Thus nullptr
+ // has been used by clients who do not have an Event instance available to
+ // them.
+ void AnimateInkDrop(InkDropState state, const ui::LocatedEvent* event);
+
// View:
void VisibilityChanged(View* starting_from, bool is_visible) override;
void OnFocus() override;
@@ -47,7 +69,6 @@ class VIEWS_EXPORT InkDropHostView : public View, public InkDropHost {
// Overrideable methods to allow views to provide minor tweaks to the default
// ink drop.
- virtual gfx::Point GetInkDropCenter() const;
virtual SkColor GetInkDropBaseColor() const;
// Should return true if the ink drop is also used to depict focus.
@@ -60,17 +81,14 @@ class VIEWS_EXPORT InkDropHostView : public View, public InkDropHost {
// of the InkDrop.
void SetHasInkDrop(bool has_an_ink_drop);
- // Animates |ink_drop_| to the desired |ink_drop_state|.
- //
- // TODO(bruthig): Enhance to accept a ui::Event parameter so InkDrops can be
- // centered (see https://crbug.com/597273) and disabled for touch events on
- // Windows (see https://crbug.com/595315).
- void AnimateInkDrop(InkDropState ink_drop_state);
-
private:
class InkDropGestureHandler;
+ friend class InkDropGestureHandler;
friend class test::InkDropHostViewTestApi;
+ // The last user Event to trigger an ink drop ripple animation.
+ std::unique_ptr<ui::LocatedEvent> last_ripple_triggering_event_;
+
std::unique_ptr<InkDrop> ink_drop_;
// Intentionally declared after |ink_drop_| so that it doesn't access a
« no previous file with comments | « ui/views/animation/ink_drop.h ('k') | ui/views/animation/ink_drop_host_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698