Index: chrome/browser/ui/cocoa/location_bar/web_intents_button_decoration.mm |
diff --git a/chrome/browser/ui/cocoa/location_bar/web_intents_button_decoration.mm b/chrome/browser/ui/cocoa/location_bar/web_intents_button_decoration.mm |
deleted file mode 100644 |
index ff696962bb1830339400332d636a9d9d33d40dae..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/location_bar/web_intents_button_decoration.mm |
+++ /dev/null |
@@ -1,251 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#import "chrome/browser/ui/cocoa/location_bar/web_intents_button_decoration.h" |
- |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/ui/browser_tabstrip.h" |
-#import "chrome/browser/ui/cocoa/last_active_browser_cocoa.h" |
-#import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" |
-#import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h" |
-#include "chrome/browser/ui/omnibox/location_bar_util.h" |
-#include "chrome/browser/ui/intents/web_intent_picker_controller.h" |
-#include "grit/generated_resources.h" |
-#include "grit/theme_resources.h" |
-#include "ui/base/l10n/l10n_util_mac.h" |
-#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
- |
-namespace { |
- |
-// Duration of animation, 150 ms. |
-const NSTimeInterval kAnimationDurationS = 0.15; |
- |
-// Interval of the animation timer, 60Hz. |
-const NSTimeInterval kAnimationIntervalS = 1.0 / 60.0; |
- |
-const CGFloat kTextMarginPadding = 4; |
-const CGFloat kIconMarginPadding = 2; |
-const CGFloat kBorderPadding = 3; |
- |
-// During animation, the text opens to full width. |
-enum AnimationState { |
- kNoAnimation, |
- kOpening, |
- kOpen |
-}; |
- |
-} // namespace |
- |
-// An ObjC class that handles the multiple states of the text animation and |
-// bridges NSTimer calls back to the WebIntentsButtonDecoration that owns it. |
-// Should be lazily instantiated to only exist when the decoration requires |
-// animation. |
-// NOTE: One could make this class more generic, but this class only exists |
-// because CoreAnimation cannot be used (there are no views to work with). |
-@interface WebIntentsButtonAnimationState : NSObject { |
- @private |
- WebIntentsButtonDecoration* owner_; // Weak, owns this. |
- double progress_; // Counter, [0..1], with animation progress. |
- NSTimer* timer_; // Animation timer. Owned by the run loop. |
-} |
- |
-// [0..1], the current progress of the animation. -animationState will return |
-// |kNoAnimation| when progress is <= 0 or >= 1. Useful when state is |
-// |kOpening| as a multiplier for displaying width. Don't use |
-// to track state transitions, use -animationState instead. |
-@property (readonly, nonatomic) double progress; |
- |
-// Designated initializer. |owner| must not be nil. Animation timer will start |
-// as soon as the object is created. |
-- (id)initWithOwner:(WebIntentsButtonDecoration*)owner; |
- |
-// Returns the current animation state based on how much time has elapsed. |
-- (AnimationState)animationState; |
- |
-// Call when |owner| is going away or the animation needs to be stopped. |
-// Ensures that any dangling references are cleared. Can be called multiple |
-// times. |
-- (void)stopAnimation; |
- |
-@end |
- |
-@implementation WebIntentsButtonAnimationState |
- |
-@synthesize progress = progress_; |
- |
-- (id)initWithOwner:(WebIntentsButtonDecoration*)owner { |
- if ((self = [super init])) { |
- owner_ = owner; |
- timer_ = [NSTimer scheduledTimerWithTimeInterval:kAnimationIntervalS |
- target:self |
- selector:@selector(timerFired:) |
- userInfo:nil |
- repeats:YES]; |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- DCHECK(!timer_); |
- [super dealloc]; |
-} |
- |
-// Clear weak references and stop the timer. |
-- (void)stopAnimation { |
- owner_ = nil; |
- [timer_ invalidate]; |
- timer_ = nil; |
-} |
- |
-// Returns the current state based on how much time has elapsed. |
-- (AnimationState)animationState { |
- if (progress_ <= 0.0) |
- return kNoAnimation; |
- if (progress_ <= 1.0) |
- return kOpening; |
- return kOpen; |
-} |
- |
-- (void)timerFired:(NSTimer*)timer { |
- // Increment animation progress, normalized to [0..1]. |
- // TODO(gbillock): Note this is brittle. Switch to ui/base/animation. |
- progress_ += kAnimationIntervalS / kAnimationDurationS; |
- progress_ = std::min(progress_, 1.0); |
- owner_->AnimationTimerFired(); |
- // Stop timer if it has reached the end of its life. |
- if (progress_ >= 1.0) |
- [self stopAnimation]; |
-} |
- |
-@end |
- |
-WebIntentsButtonDecoration::WebIntentsButtonDecoration( |
- LocationBarViewMac* owner, NSFont* font) |
- : BubbleDecoration(font), |
- owner_(owner), |
- text_width_(0.0) { |
- NSColor* border_color = |
- [NSColor colorWithCalibratedRed:0.63 green:0.63 blue:0.63 alpha:1.0]; |
- NSColor* background_color = |
- [NSColor colorWithCalibratedRed:0.90 green:0.90 blue:0.90 alpha:1.0]; |
- SetColors(border_color, background_color, [NSColor blackColor]); |
- |
- SetLabel(l10n_util::GetNSString(IDS_INTENT_PICKER_USE_ANOTHER_SERVICE)); |
-} |
- |
-WebIntentsButtonDecoration::~WebIntentsButtonDecoration() {} |
- |
-void WebIntentsButtonDecoration::SetButtonImages(NSImage* left, |
- NSImage* center, |
- NSImage* right) { |
- left_image_.reset([left retain]); |
- center_image_.reset([center retain]); |
- right_image_.reset([right retain]); |
-} |
- |
-bool WebIntentsButtonDecoration::AcceptsMousePress() { |
- return true; |
-} |
- |
-bool WebIntentsButtonDecoration::OnMousePressed(NSRect frame) { |
- content::WebContents* web_contents = owner_->GetWebContents(); |
- if (!web_contents) |
- return true; |
- |
- WebIntentPickerController::FromWebContents(web_contents)-> |
- LocationBarPickerButtonClicked(); |
- return true; |
-} |
- |
-// Override to handle the case where there is text to display during the |
-// animation. The width is based on the animator's progress. |
-CGFloat WebIntentsButtonDecoration::GetWidthForSpace(CGFloat width, |
- CGFloat text_width) { |
- if (!animation_) |
- return BubbleDecoration::GetWidthForSpace(width, text_width); |
- |
- AnimationState state = [animation_ animationState]; |
- CGFloat progress = [animation_ progress]; |
- // Set the margins, fixed for all animation states. |
- CGFloat preferredWidth = 2 * kTextMarginPadding; |
- // Add the width of the text based on the state of the animation. |
- switch (state) { |
- case kNoAnimation: |
- return preferredWidth; |
- case kOpening: |
- return preferredWidth + (text_width_ * progress); |
- case kOpen: |
- return preferredWidth + text_width_; |
- } |
-} |
- |
-void WebIntentsButtonDecoration::DrawInFrame(NSRect frame, |
- NSView* control_view) { |
- if ([animation_ animationState] != kOpening) { |
- BubbleDecoration::DrawInFrame(frame, control_view); |
- return; |
- } |
- |
- frame = NSInsetRect(frame, 0.0, kTextYInset); |
- NSDrawThreePartImage(frame, |
- left_image_.get(), |
- center_image_.get(), |
- right_image_.get(), |
- NO, // NO=horizontal layout |
- NSCompositeSourceOver, |
- 1.0, |
- YES); // use flipped coordinates |
- |
- // Draw the text, clipped to fit on the right. While handling clipping, |
- // NSAttributedString's drawInRect: won't draw a word if it doesn't fit |
- // in the bounding box so instead use drawAtPoint: with a manual clip |
- // rect. |
- gfx::ScopedNSGraphicsContextSaveGState scopedGState; |
- NSRectClip(frame); |
- NSRect remainder = NSInsetRect(frame, kTextMarginPadding, 0.0); |
- // .get() needed to fix compiler warning (confusion with NSImageRep). |
- [animated_text_.get() drawAtPoint:remainder.origin]; |
-} |
- |
-void WebIntentsButtonDecoration::Update(content::WebContents* web_contents) { |
- WebIntentPickerController* intents_controller = |
- WebIntentPickerController::FromWebContents(web_contents); |
- SetVisible(intents_controller->ShowLocationBarPickerButton()); |
- |
- if (IsVisible()) { |
- if (!animation_ && |
- !intents_controller->location_bar_picker_button_indicated()) { |
- intents_controller->SetLocationBarPickerButtonIndicated(); |
- animation_.reset( |
- [[WebIntentsButtonAnimationState alloc] initWithOwner:this]); |
- animated_text_ = CreateAnimatedText(); |
- text_width_ = MeasureTextWidth(); |
- } |
- } else { |
- [animation_ stopAnimation]; |
- animation_.reset(); |
- } |
-} |
- |
-scoped_nsobject<NSAttributedString> |
- WebIntentsButtonDecoration::CreateAnimatedText() { |
- NSString* text = |
- l10n_util::GetNSString(IDS_INTENT_PICKER_USE_ANOTHER_SERVICE); |
- return scoped_nsobject<NSAttributedString>( |
- [[NSAttributedString alloc] initWithString:text attributes:attributes_]); |
-} |
- |
-CGFloat WebIntentsButtonDecoration::MeasureTextWidth() { |
- return [animated_text_ size].width; |
-} |
- |
-void WebIntentsButtonDecoration::AnimationTimerFired() { |
- if (owner_) |
- owner_->Layout(); |
- // Even after the animation completes, the |animator_| object should be kept |
- // alive to prevent the animation from re-appearing if the page opens |
- // additional popups later. The animator will be cleared when the decoration |
- // hides, indicating something has changed with the WebContents (probably |
- // navigation). |
-} |