summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa')
-rw-r--r--chrome/browser/cocoa/throbber_view.h2
-rw-r--r--chrome/browser/cocoa/throbber_view.mm24
2 files changed, 19 insertions, 7 deletions
diff --git a/chrome/browser/cocoa/throbber_view.h b/chrome/browser/cocoa/throbber_view.h
index 5403371..00f83ed 100644
--- a/chrome/browser/cocoa/throbber_view.h
+++ b/chrome/browser/cocoa/throbber_view.h
@@ -19,7 +19,7 @@
@interface ThrobberView : NSView {
@private
- scoped_nsobject<NSImage> image_;
+ scoped_nsobject<CIImage> image_;
scoped_nsobject<TimerTarget> target_; // Target of animation timer.
NSTimer* timer_; // Animation timer. Weak, owned by runloop.
unsigned int numFrames_; // Number of frames in this animation.
diff --git a/chrome/browser/cocoa/throbber_view.mm b/chrome/browser/cocoa/throbber_view.mm
index 7f68c03..cafdcf8 100644
--- a/chrome/browser/cocoa/throbber_view.mm
+++ b/chrome/browser/cocoa/throbber_view.mm
@@ -48,7 +48,18 @@ const float kAnimationIntervalSeconds = 0.03; // 30ms, same as windows
DCHECK((int)imageSize.width % (int)imageSize.height == 0);
numFrames_ = (int)imageSize.width / (int)imageSize.height;
DCHECK(numFrames_);
- image_.reset([image retain]);
+
+ // First check if we have a bitmap image rep and use it, otherwise fall
+ // back to creating one.
+ NSBitmapImageRep* rep = [[image representations] objectAtIndex:0];
+ if (![rep isKindOfClass:[NSBitmapImageRep class]]) {
+ [image lockFocus];
+ NSRect imageRect = NSMakeRect(0, 0, imageSize.width, imageSize.height);
+ rep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect]
+ autorelease];
+ [image unlockFocus];
+ }
+ image_.reset([[CIImage alloc] initWithBitmapImageRep:rep]);
// Start a timer for the animation frames.
target_.reset([[TimerTarget alloc] initWithThrobber:self]);
@@ -78,18 +89,19 @@ const float kAnimationIntervalSeconds = 0.03; // 30ms, same as windows
// counter and mark as needing display.
- (void)animate {
animationFrame_ = ++animationFrame_ % numFrames_;
- //[self setNeedsDisplay:YES];
+ [self setNeedsDisplay:YES];
}
// Overridden to draw the appropriate frame in the image strip.
- (void)drawRect:(NSRect)rect {
- float imageDimension = [image_ size].height;
+ float imageDimension = [image_ extent].size.height;
float xOffset = animationFrame_ * imageDimension;
NSRect sourceImageRect =
NSMakeRect(xOffset, 0, imageDimension, imageDimension);
- [image_ compositeToPoint:NSMakePoint(0, 0)
- fromRect:sourceImageRect
- operation:NSCompositeSourceOver];
+ [image_ drawInRect:[self bounds]
+ fromRect:sourceImageRect
+ operation:NSCompositeSourceOver
+ fraction:1.0];
}
@end