diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/cocoa/throbber_view.h | 2 | ||||
-rw-r--r-- | chrome/browser/cocoa/throbber_view.mm | 24 | ||||
-rw-r--r-- | chrome/chrome.gyp | 5 |
3 files changed, 24 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 diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index b44bb19..0407d5d 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -1562,6 +1562,11 @@ '../third_party/GTM', '../third_party/GTM/AppKit', ], + 'link_settings': { + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/QuartzCore.framework', + ], + }, }], ['OS=="win"', { 'defines': [ |