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

Unified Diff: chrome/browser/ui/views/location_bar/icon_label_bubble_view.h

Issue 2720183002: [Views] Update ink drop for omnibox icons (Closed)
Patch Set: Removed CanProcessEventsWithinSubtree Created 3 years, 7 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
Index: chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
index 5d7f5f9c95636f78f16e45ce0c143fe32ca7db3e..fe7d6d501086e2185868983c3e6ca20431ac9f28 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -9,32 +9,40 @@
#include "base/macros.h"
#include "base/strings/string16.h"
+#include "ui/compositor/layer_animation_observer.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/animation/ink_drop_host_view.h"
+#include "ui/views/animation/ink_drop_observer.h"
+#include "ui/views/controls/button/custom_button.h"
#include "ui/views/controls/label.h"
+#include "ui/views/widget/widget_observer.h"
namespace gfx {
-class Canvas;
class FontList;
class ImageSkia;
}
namespace views {
class ImageView;
-class Label;
+class InkDropContainerView;
}
// View used to draw a bubble, containing an icon and a label. We use this as a
// base for the classes that handle the location icon (including the EV bubble),
// tab-to-search UI, and content settings.
-class IconLabelBubbleView : public views::InkDropHostView {
+class IconLabelBubbleView : public views::InkDropObserver,
+ public views::CustomButton,
+ public views::WidgetObserver {
public:
static constexpr int kTrailingPaddingPreMd = 2;
IconLabelBubbleView(const gfx::FontList& font_list, bool elide_in_middle);
~IconLabelBubbleView() override;
+ // views::InkDropObserver:
+ void InkDropAnimationStarted() override;
+
void SetLabel(const base::string16& label);
void SetImage(const gfx::ImageSkia& image);
@@ -48,6 +56,9 @@ class IconLabelBubbleView : public views::InkDropHostView {
const views::ImageView* image() const { return image_; }
views::Label* label() { return label_; }
const views::Label* label() const { return label_; }
+ const views::InkDropContainerView* ink_drop_container() const {
+ return ink_drop_container_;
+ }
void set_next_element_interior_padding(int padding) {
next_element_interior_padding_ = padding;
@@ -67,30 +78,70 @@ class IconLabelBubbleView : public views::InkDropHostView {
// Returns true when animation is in progress and is shrinking.
virtual bool IsShrinking() const;
- // The view has been activated by a user gesture such as spacebar. Returns
- // true if some handling was performed.
- virtual bool OnActivate(const ui::Event& event);
+ // Returns true if a bubble was shown.
+ virtual bool ShowBubble(const ui::Event& event);
+
+ // Returns true if the bubble anchored to the icon is shown. This is to
+ // prevent the bubble from reshowing on a mouse release.
+ virtual bool IsBubbleShowing() const;
// views::InkDropHostView:
gfx::Size GetPreferredSize() const override;
void Layout() override;
- bool OnKeyPressed(const ui::KeyEvent& event) override;
- bool OnKeyReleased(const ui::KeyEvent& event) override;
+ bool OnMousePressed(const ui::MouseEvent& event) override;
void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
+ void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
void OnNativeThemeChanged(const ui::NativeTheme* native_theme) override;
void AddInkDropLayer(ui::Layer* ink_drop_layer) override;
void RemoveInkDropLayer(ui::Layer* ink_drop_layer) override;
+ std::unique_ptr<views::InkDrop> CreateInkDrop() override;
std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
const override;
+ std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override;
SkColor GetInkDropBaseColor() const override;
+ // views::CustomButton:
+ bool IsTriggerableEvent(const ui::Event& event) override;
+ bool ShouldUpdateInkDropOnClickCanceled() const override;
+ void NotifyClick(const ui::Event& event) override;
+
+ // views::WidgetObserver:
+ void OnWidgetDestroying(views::Widget* widget) override;
+ void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
+
const gfx::FontList& font_list() const { return label_->font_list(); }
SkColor GetParentBackgroundColor() const;
gfx::Size GetSizeForLabelWidth(int label_width) const;
+ // Returns the maximum size for the label width. The value ignores
+ // WidthMultiplier().
+ gfx::Size GetMaxSizeForLabelWidth(int label_width) const;
+
private:
+ // A view that draws the separator.
+ class SeparatorView : public views::View,
+ public ui::ImplicitAnimationObserver {
+ public:
+ explicit SeparatorView(IconLabelBubbleView* owner);
+
+ // views::View:
+ void OnPaint(gfx::Canvas* canvas) override;
+
+ // ui::ImplicitAnimationObserver:
+ void OnImplicitAnimationsCompleted() override;
+
+ // Updates the opacity based on the ink drop's state.
+ void UpdateOpacity();
+
+ private:
+ // Weak.
+ IconLabelBubbleView* owner_;
+
+ DISALLOW_COPY_AND_ASSIGN(SeparatorView);
+ };
+
// Amount of padding from the leading edge of the view to the leading edge of
// the image, and from the trailing edge of the label (or image, if the label
// is invisible) to the trailing edge of the view.
@@ -107,19 +158,30 @@ class IconLabelBubbleView : public views::InkDropHostView {
float GetScaleFactor() const;
+ // The view has been activated by a user gesture such as spacebar.
+ // Returns true if some handling was performed.
+ bool OnActivate(const ui::Event& event);
+
// views::View:
const char* GetClassName() const override;
- void OnPaint(gfx::Canvas* canvas) override;
// The contents of the bubble.
views::ImageView* image_;
views::Label* label_;
+ views::InkDropContainerView* ink_drop_container_;
+ SeparatorView* separator_view_;
// The padding of the element that will be displayed after |this|. This value
// is relevant for calculating the amount of space to reserve after the
// separator.
int next_element_interior_padding_ = 0;
+ // This is used to check if the bubble was showing in the last mouse press
+ // event. If this is true then IsTriggerableEvent() will return false to
+ // prevent the bubble from reshowing. This flag is necessary because the
+ // bubble gets dismissed before the button handles the mouse release event.
+ bool suppress_button_release_;
+
DISALLOW_COPY_AND_ASSIGN(IconLabelBubbleView);
};

Powered by Google App Engine
This is Rietveld 408576698