• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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 CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTIONS_CONTAINER_VIEW_
6 #define CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTIONS_CONTAINER_VIEW_
7 #pragma once
8 
9 #import <Cocoa/Cocoa.h>
10 
11 // Sent when a user-initiated drag to resize the container is initiated.
12 extern NSString* const kBrowserActionGrippyDragStartedNotification;
13 
14 // Sent when a user-initiated drag is resizing the container.
15 extern NSString* const kBrowserActionGrippyDraggingNotification;
16 
17 // Sent when a user-initiated drag to resize the container has finished.
18 extern NSString* const kBrowserActionGrippyDragFinishedNotification;
19 
20 // The view that encompasses the Browser Action buttons in the toolbar and
21 // provides mechanisms for resizing.
22 @interface BrowserActionsContainerView : NSView {
23  @private
24   // The frame encompasing the grippy used for resizing the container.
25   NSRect grippyRect_;
26 
27   // The end frame of the animation currently running for this container or
28   // NSZeroRect if none is in progress.
29   NSRect animationEndFrame_;
30 
31   // Used to cache the original position within the container that initiated the
32   // drag.
33   NSPoint initialDragPoint_;
34 
35   // Used to cache the previous x-pos of the frame rect for resizing purposes.
36   CGFloat lastXPos_;
37 
38   // The maximum width of the container.
39   CGFloat maxWidth_;
40 
41   // Whether the container is currently being resized by the user.
42   BOOL userIsResizing_;
43 
44   // Whether the user can resize this at all. Resizing is disabled in incognito
45   // mode since any changes done in incognito mode are not saved anyway, and
46   // also to avoid a crash. http://crbug.com/42848
47   BOOL resizable_;
48 
49   // Whether the user is allowed to drag the grippy to the left. NO if all
50   // extensions are shown or the location bar has hit its minimum width (handled
51   // within toolbar_controller.mm).
52   BOOL canDragLeft_;
53 
54   // Whether the user is allowed to drag the grippy to the right. NO if all
55   // extensions are hidden.
56   BOOL canDragRight_;
57 
58   // When the left grippy is pinned, resizing the window has no effect on its
59   // position. This prevents it from overlapping with other elements as well
60   // as letting the container expand when the window is going from super small
61   // to large.
62   BOOL grippyPinned_;
63 }
64 
65 // Resizes the container to the given ideal width, adjusting the |lastXPos_| so
66 // that |resizeDeltaX| is accurate.
67 - (void)resizeToWidth:(CGFloat)width animate:(BOOL)animate;
68 
69 // Returns the change in the x-pos of the frame rect during resizing. Meant to
70 // be queried when a NSViewFrameDidChangeNotification is fired to determine
71 // placement of surrounding elements.
72 - (CGFloat)resizeDeltaX;
73 
74 @property(nonatomic, readonly) NSRect animationEndFrame;
75 @property(nonatomic) BOOL canDragLeft;
76 @property(nonatomic) BOOL canDragRight;
77 @property(nonatomic) BOOL grippyPinned;
78 @property(nonatomic,getter=isResizable) BOOL resizable;
79 @property(nonatomic) CGFloat maxWidth;
80 @property(readonly, nonatomic) BOOL userIsResizing;
81 
82 @end
83 
84 #endif  // CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTIONS_CONTAINER_VIEW_
85