Index: chrome/browser/ui/views/download/download_item_view.h |
diff --git a/chrome/browser/ui/views/download/download_item_view.h b/chrome/browser/ui/views/download/download_item_view.h |
index 0dc42bfeba11365fc2adb874acd497ed3a39128a..b2a3fb686ca9daf38a3c17b137266355f1dd1c3d 100644 |
--- a/chrome/browser/ui/views/download/download_item_view.h |
+++ b/chrome/browser/ui/views/download/download_item_view.h |
@@ -1,8 +1,8 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2015 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. |
// |
-// A ChromeView that implements one download on the Download shelf. |
+// A view that implements one download on the Download shelf. |
// Each DownloadItemView contains an application icon, a text label |
// indicating the download's file name, a text label indicating the |
// download's status (such as the number of bytes downloaded so far) |
@@ -13,8 +13,8 @@ |
// DownloadController that receives / writes data which lives in the |
// Renderer. |
-#ifndef CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_H__ |
-#define CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_H__ |
+#ifndef CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_H_ |
+#define CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_H_ |
#include <memory> |
#include <string> |
@@ -31,9 +31,9 @@ |
#include "content/public/browser/download_manager.h" |
#include "ui/gfx/animation/animation_delegate.h" |
#include "ui/gfx/font_list.h" |
+#include "ui/views/animation/ink_drop_host_view.h" |
#include "ui/views/context_menu_controller.h" |
-#include "ui/views/controls/button/button.h" |
-#include "ui/views/view.h" |
+#include "ui/views/controls/button/vector_icon_button_delegate.h" |
class DownloadShelfView; |
class DownloadShelfContextMenuView; |
@@ -48,13 +48,20 @@ class ImageSkia; |
class SlideAnimation; |
} |
+namespace ui { |
+class ThemeProvider; |
+} |
+ |
namespace views { |
+class ImageButton; |
class Label; |
class LabelButton; |
} |
-class DownloadItemView : public views::ButtonListener, |
- public views::View, |
+// Represents a single download item on the download shelf. Encompasses an icon, |
+// text, malicious download warnings, etc. |
+class DownloadItemView : public views::InkDropHostView, |
sky
2016/09/16 21:16:50
Weird how the diffs for this showed up. By that I
|
+ public views::VectorIconButtonDelegate, |
public views::ContextMenuController, |
public content::DownloadItem::Observer, |
public gfx::AnimationDelegate { |
@@ -67,6 +74,9 @@ class DownloadItemView : public views::ButtonListener, |
void StartDownloadProgress(); |
void StopDownloadProgress(); |
+ // Returns the base color for text on this download item, based on |theme|. |
+ static SkColor GetTextColorForThemeProvider(const ui::ThemeProvider* theme); |
+ |
// IconManager::Client interface. |
void OnExtractIconComplete(gfx::Image* icon); |
@@ -85,14 +95,18 @@ class DownloadItemView : public views::ButtonListener, |
bool OnMouseDragged(const ui::MouseEvent& event) override; |
void OnMouseReleased(const ui::MouseEvent& event) override; |
void OnMouseCaptureLost() override; |
- void OnMouseMoved(const ui::MouseEvent& event) override; |
- void OnMouseExited(const ui::MouseEvent& event) override; |
bool OnKeyPressed(const ui::KeyEvent& event) override; |
bool GetTooltipText(const gfx::Point& p, |
base::string16* tooltip) const override; |
void GetAccessibleState(ui::AXViewState* state) override; |
void OnThemeChanged() override; |
+ // Overridden from view::InkDropHostView: |
+ void AddInkDropLayer(ui::Layer* ink_drop_layer) override; |
+ std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override; |
+ std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight() |
+ const override; |
+ |
// Overridden from ui::EventHandler: |
void OnGestureEvent(ui::GestureEvent* event) override; |
@@ -101,8 +115,9 @@ class DownloadItemView : public views::ButtonListener, |
const gfx::Point& point, |
ui::MenuSourceType source_type) override; |
- // ButtonListener implementation. |
+ // VectorIconButtonDelegate implementation. |
void ButtonPressed(views::Button* sender, const ui::Event& event) override; |
+ SkColor GetVectorIconBaseColor() const override; |
// gfx::AnimationDelegate implementation. |
void AnimationProgressed(const gfx::Animation* animation) override; |
@@ -110,41 +125,17 @@ class DownloadItemView : public views::ButtonListener, |
protected: |
// Overridden from views::View: |
void OnPaint(gfx::Canvas* canvas) override; |
- void OnPaintBackground(gfx::Canvas* canvas) override; |
void OnFocus() override; |
void OnBlur() override; |
private: |
- enum State { |
- NORMAL = 0, |
- HOT, |
- PUSHED |
- }; |
+ enum State { NORMAL = 0, HOT, PUSHED }; |
+ class DropDownButton; |
enum Mode { |
- NORMAL_MODE = 0, // Showing download item. |
- DANGEROUS_MODE, // Displaying the dangerous download warning. |
- MALICIOUS_MODE // Displaying the malicious download warning. |
- }; |
- |
- // The image set associated with the part containing the icon and text. |
- struct BodyImageSet { |
- gfx::ImageSkia* top_left; |
- gfx::ImageSkia* left; |
- gfx::ImageSkia* bottom_left; |
- gfx::ImageSkia* top; |
- gfx::ImageSkia* center; |
- gfx::ImageSkia* bottom; |
- gfx::ImageSkia* top_right; |
- gfx::ImageSkia* right; |
- gfx::ImageSkia* bottom_right; |
- }; |
- |
- // The image set associated with the drop-down button on the right. |
- struct DropDownImageSet { |
- gfx::ImageSkia* top; |
- gfx::ImageSkia* center; |
- gfx::ImageSkia* bottom; |
+ NORMAL_MODE = 0, // Showing download item. |
+ DANGEROUS_MODE, // Displaying the dangerous download warning. |
+ MALICIOUS_MODE // Displaying the malicious download warning. |
}; |
void OpenDownload(); |
@@ -158,6 +149,15 @@ class DownloadItemView : public views::ButtonListener, |
// Otherwise, it simply removes the DownloadItem without uploading. |
void PossiblySubmitDownloadToFeedbackService(bool enabled); |
+ // This function calculates the vertical coordinate to draw the file name text |
+ // relative to local bounds. |
+ int GetYForFilenameText() const; |
+ |
+ // Painting of various download item bits. |
+ void DrawStatusText(gfx::Canvas* canvas); |
+ void DrawFilename(gfx::Canvas* canvas); |
+ void DrawIcon(gfx::Canvas* canvas); |
+ |
void LoadIcon(); |
void LoadIconIfItemPathChanged(); |
@@ -166,26 +166,15 @@ class DownloadItemView : public views::ButtonListener, |
// Shows the context menu at the specified location. |point| is in the view's |
// coordinate system. |
- void ShowContextMenuImpl(const gfx::Point& point, |
+ void ShowContextMenuImpl(const gfx::Rect& rect, |
ui::MenuSourceType source_type); |
// Common code for handling pointer events (i.e. mouse or gesture). |
void HandlePressEvent(const ui::LocatedEvent& event, bool active_event); |
void HandleClickEvent(const ui::LocatedEvent& event, bool active_event); |
- // Convenience method to paint the 3 vertical images (bottom, middle, top) |
- // that form the background. |
- void PaintImages(gfx::Canvas* canvas, |
- const gfx::ImageSkia* top_image, |
- const gfx::ImageSkia* center_image, |
- const gfx::ImageSkia* bottom_image, |
- int x, |
- int y, |
- int height, |
- int width); |
- |
// Sets the state and triggers a repaint. |
- void SetState(State body_state, State drop_down_state); |
+ void SetDropdownState(State new_state); |
// Whether we are in the dangerous mode. |
bool IsShowingWarningDialog() const { |
@@ -202,6 +191,10 @@ class DownloadItemView : public views::ButtonListener, |
// warning. |
void ShowWarningDialog(); |
+ // Returns the current warning icon (should only be called when the view is |
+ // actually showing a warning). |
+ gfx::ImageSkia GetWarningIcon(); |
+ |
// Sets |size| with the size of the Save and Discard buttons (they have the |
// same size). |
gfx::Size GetButtonSize() const; |
@@ -216,40 +209,27 @@ class DownloadItemView : public views::ButtonListener, |
void Reenable(); |
// Releases drop down button after showing a context menu. |
- void ReleaseDropDown(); |
- |
- // Given |x|, returns whether |x| is within the x coordinate range of |
- // the drop-down button or not. |
- bool InDropDownButtonXCoordinateRange(int x); |
+ void ReleaseDropdown(); |
// Update the accessible name to reflect the current state of the control, |
// so that screenreaders can access the filename, status text, and |
// dangerous download warning message (if any). |
void UpdateAccessibleName(); |
- // Update the location of the drop down button. |
- void UpdateDropDownButtonPosition(); |
- |
// Show/Hide/Reset |animation| based on the state transition specified by |
// |from| and |to|. |
- void AnimateStateTransition(State from, State to, |
+ void AnimateStateTransition(State from, |
+ State to, |
gfx::SlideAnimation* animation); |
// Callback for |progress_timer_|. |
void ProgressTimerFired(); |
- // The different images used for the background. |
- BodyImageSet normal_body_image_set_; |
- BodyImageSet hot_body_image_set_; |
- BodyImageSet pushed_body_image_set_; |
- BodyImageSet dangerous_mode_body_image_set_; |
- BodyImageSet malicious_mode_body_image_set_; |
- DropDownImageSet normal_drop_down_image_set_; |
- DropDownImageSet hot_drop_down_image_set_; |
- DropDownImageSet pushed_drop_down_image_set_; |
+ // Returns the base text color. |
+ SkColor GetTextColor() const; |
- // The warning icon showns for dangerous downloads. |
- const gfx::ImageSkia* warning_icon_; |
+ // Returns a slightly dimmed version of the base text color. |
+ SkColor GetDimmedTextColor() const; |
// The download shelf that owns us. |
DownloadShelfView* shelf_; |
@@ -257,15 +237,17 @@ class DownloadItemView : public views::ButtonListener, |
// Elements of our particular download |
base::string16 status_text_; |
- // The font list used to print the file name and status. |
+ // The font list used to print the file name and warning text. |
gfx::FontList font_list_; |
+ // The font list used to print the status text below the file name. |
+ gfx::FontList status_font_list_; |
+ |
// The tooltip. Only displayed when not showing a warning dialog. |
base::string16 tooltip_text_; |
// The current state (normal, hot or pushed) of the body and drop-down. |
- State body_state_; |
- State drop_down_state_; |
+ State dropdown_state_; |
// Mode of the download item view. |
Mode mode_; |
@@ -278,19 +260,6 @@ class DownloadItemView : public views::ButtonListener, |
// total active time for downloads of unknown size. |
base::TimeDelta previous_progress_elapsed_; |
- // The left and right x coordinates of the drop-down button. |
- int drop_down_x_left_; |
- int drop_down_x_right_; |
- |
- // Used when we are showing the menu to show the drop-down as pressed. |
- bool drop_down_pressed_; |
- |
- // The height of the box formed by the background images and its labels. |
- int box_height_; |
- |
- // The y coordinate of the box formed by the background images and its labels. |
- int box_y_; |
- |
// Whether we are dragging the download button. |
bool dragging_; |
@@ -306,10 +275,6 @@ class DownloadItemView : public views::ButtonListener, |
// A model class to control the status text we display. |
DownloadItemModel model_; |
- // Hover animations for our body and drop buttons. |
- std::unique_ptr<gfx::SlideAnimation> body_hover_animation_; |
- std::unique_ptr<gfx::SlideAnimation> drop_hover_animation_; |
- |
// Animation for download complete. |
std::unique_ptr<gfx::SlideAnimation> complete_animation_; |
@@ -320,6 +285,9 @@ class DownloadItemView : public views::ButtonListener, |
views::LabelButton* save_button_; |
views::LabelButton* discard_button_; |
+ // The drop down button. |
+ DropDownButton* dropdown_button_; |
+ |
// Dangerous mode label. |
views::Label* dangerous_download_label_; |
@@ -357,4 +325,4 @@ class DownloadItemView : public views::ButtonListener, |
DISALLOW_COPY_AND_ASSIGN(DownloadItemView); |
}; |
-#endif // CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_H__ |
+#endif // CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_H_ |