1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_OVERSCROLL_ANIMATOR_MAC_H_ 6 #define CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_OVERSCROLL_ANIMATOR_MAC_H_ 7 8 #import <Cocoa/Cocoa.h> 9 10 namespace content { 11 class WebContentsImpl; 12 13 // The direction of the overscroll animations. Backwards means that the user 14 // wants to navigate backwards in the navigation history. The opposite applies 15 // to forwards. 16 enum OverscrollAnimatorDirection { 17 OVERSCROLL_ANIMATOR_DIRECTION_BACKWARDS, 18 OVERSCROLL_ANIMATOR_DIRECTION_FORWARDS, 19 }; 20 } // namespace content 21 22 // NSViews that intend to manage the animation associated with an overscroll 23 // must implement this protocol. 24 @protocol WebContentsOverscrollAnimator 25 // Some implementations require the WebContentsView to supply a snapshot of a 26 // previous navigation state. This method determines whether the snapshot passed 27 // to the overscroll animator is expected to be non-nil. 28 - (BOOL)needsNavigationSnapshot; 29 30 // Begin an overscroll animation. The method -needsNavigationSnapshot determines 31 // whether |snapshot| can be nil. 32 - (void)beginOverscrollInDirection: 33 (content::OverscrollAnimatorDirection)direction 34 navigationSnapshot:(NSImage*)snapshot; 35 36 // Due to the nature of some of the overscroll animations, implementators of 37 // this protocol must have control over the layout of the RenderWidgetHost's 38 // NativeView. When there is no overscroll animation in progress, the 39 // implementor must guarantee that the frame of the RenderWidgetHost's 40 // NativeView in screen coordinates is the same as its own frame in screen 41 // coordinates. 42 // Due to the odd ownership cycles of the RenderWidgetHost's NativeView, it is 43 // important that its presence in the NSView hierarchy is the only strong 44 // reference, and that when it gets removed from the NSView hierarchy, it will 45 // be dealloc'ed shortly thereafter. 46 - (void)addRenderWidgetHostNativeView:(NSView*)view; 47 48 // During an overscroll animation, |progress| ranges from 0 to 2, and indicates 49 // how close the overscroll is to completing. If the overscroll ends with 50 // |progress| >= 1, then the overscroll is considered completed. 51 - (void)updateOverscrollProgress:(CGFloat)progress; 52 53 // Animate the finish of the overscroll and perform a navigation. The navigation 54 // may not happen synchronously, but is guaranteed to eventually occur. 55 - (void)completeOverscroll:(content::WebContentsImpl*)webContents; 56 57 // Animate the cancellation of the overscroll. 58 - (void)cancelOverscroll; 59 @end 60 61 #endif // CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_OVERSCROLL_ANIMATOR_MAC_H_ 62