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

Unified Diff: chrome/browser/ui/cocoa/download/download_item_cell.mm

Issue 1236463002: Vectorize download shelf progress indicators (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix mac? Created 5 years, 5 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/cocoa/download/download_item_cell.mm
diff --git a/chrome/browser/ui/cocoa/download/download_item_cell.mm b/chrome/browser/ui/cocoa/download/download_item_cell.mm
index 6b0bda42d9da8eca8c994032d423c4b235d93ece..3d040493f05c50ee441eb086868add006d64df98 100644
--- a/chrome/browser/ui/cocoa/download/download_item_cell.mm
+++ b/chrome/browser/ui/cocoa/download/download_item_cell.mm
@@ -16,10 +16,12 @@
#include "grit/theme_resources.h"
#import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h"
#import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSColor+Luminance.h"
+#include "ui/base/default_theme_provider.h"
#include "ui/gfx/canvas_skia_paint.h"
#include "ui/gfx/font_list.h"
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
#include "ui/gfx/text_elider.h"
+#include "ui/native_theme/native_theme.h"
// Distance from top border to icon.
const CGFloat kImagePaddingTop = 7;
@@ -35,7 +37,7 @@ const CGFloat kImageHeight = 16;
// x coordinate of download name string, in view coords.
const CGFloat kTextPosLeft = kImagePaddingLeft +
- kImageWidth + DownloadShelf::kSmallProgressIconOffset;
+ kImageWidth + DownloadShelf::kFiletypeIconOffset;
// Distance from end of download name string to dropdown area.
const CGFloat kTextPaddingRight = 3;
@@ -76,16 +78,6 @@ const CGFloat kInterruptedAnimationDuration = 2.5;
using content::DownloadItem;
-namespace {
-
-// Passed as a callback to DownloadShelf paint functions. On toolkit-views
-// platforms it will mirror the position of the download progress, but that's
-// not done on Mac.
-void DummyRTLMirror(gfx::Rect* bounds) {
-}
-
-} // namespace
-
// This is a helper class to animate the fading out of the status text.
@interface DownloadItemCellAnimation : NSAnimation {
@private
@@ -140,7 +132,6 @@ void DummyRTLMirror(gfx::Rect* bounds) {
isStatusTextVisible_ = NO;
titleY_ = kPrimaryTextOnlyPosTop;
statusAlpha_ = 0.0;
- indeterminateProgressAngle_ = DownloadShelf::kStartAngleDegrees;
[self setFont:[NSFont systemFontOfSize:
[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
@@ -252,6 +243,7 @@ void DummyRTLMirror(gfx::Rect* bounds) {
if (!indeterminateProgressTimer_) {
indeterminateProgressTimer_.reset([[IndeterminateProgressTimer alloc]
initWithDownloadItemCell:self]);
+ progressStartTime_ = base::TimeTicks::Now();
}
} else {
percentDone_ = downloadModel->PercentComplete();
@@ -553,31 +545,39 @@ void DummyRTLMirror(gfx::Rect* bounds) {
// Always repaint the whole disk.
NSPoint imagePosition = [self imageRectForBounds:cellFrame].origin;
- int x = imagePosition.x - DownloadShelf::kSmallProgressIconOffset;
- int y = imagePosition.y - DownloadShelf::kSmallProgressIconOffset;
+ int x = imagePosition.x - DownloadShelf::kFiletypeIconOffset;
+ int y = imagePosition.y - DownloadShelf::kFiletypeIconOffset;
NSRect dirtyRect = NSMakeRect(
x, y,
- DownloadShelf::kSmallProgressIconSize,
- DownloadShelf::kSmallProgressIconSize);
+ DownloadShelf::kProgressIndicatorSize,
+ DownloadShelf::kProgressIndicatorSize);
gfx::CanvasSkiaPaint canvas(dirtyRect, false);
canvas.set_composite_alpha(true);
+ canvas.Translate(gfx::Vector2d(x, y));
+
+ ui::ThemeProvider* themeProvider =
+ [[[self controlView] window] themeProvider];
+ ui::DefaultThemeProvider defaultTheme;
+ if (!themeProvider)
+ themeProvider = &defaultTheme;
Evan Stade 2015/07/22 17:34:43 theme provider can be null during tests
asanka 2015/07/22 21:22:17 Can we instead mock the themeProvider selector on
Evan Stade 2015/07/22 21:32:20 That would be nice, except I don't have a mac buil
+
if (completionAnimation_.get()) {
if ([completionAnimation_ isAnimating]) {
if (percentDone_ == -1) {
DownloadShelf::PaintDownloadComplete(
- &canvas, base::Bind(&DummyRTLMirror), x, y,
+ &canvas, *themeProvider,
[completionAnimation_ currentValue]);
} else {
DownloadShelf::PaintDownloadInterrupted(
- &canvas, base::Bind(&DummyRTLMirror), x, y,
+ &canvas, *themeProvider,
[completionAnimation_ currentValue]);
}
}
} else if (percentDone_ >= 0 || indeterminateProgressTimer_) {
- DownloadShelf::PaintDownloadProgress(&canvas, base::Bind(&DummyRTLMirror),
- x, y, indeterminateProgressAngle_,
- percentDone_);
+ DownloadShelf::PaintDownloadProgress(
+ &canvas, *themeProvider,
+ progressStartTime_, percentDone_);
}
}
@@ -689,9 +689,6 @@ void DummyRTLMirror(gfx::Rect* bounds) {
}
- (void)updateIndeterminateDownload {
- indeterminateProgressAngle_ =
- (indeterminateProgressAngle_ + DownloadShelf::kUnknownIncrementDegrees) %
- DownloadShelf::kMaxDegrees;
[[self controlView] setNeedsDisplay:YES];
}
« no previous file with comments | « chrome/browser/ui/cocoa/download/download_item_cell.h ('k') | chrome/browser/ui/views/download/download_item_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698