Home | History | Annotate | Download | only in cocoa
      1 // Copyright (c) 2012 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_INFO_BUBBLE_VIEW_H_
      6 #define CHROME_BROWSER_UI_COCOA_INFO_BUBBLE_VIEW_H_
      7 
      8 #import <Cocoa/Cocoa.h>
      9 
     10 #include "base/mac/scoped_nsobject.h"
     11 
     12 namespace info_bubble {
     13 
     14 // These values are in view coordinates.
     15 const CGFloat kBubbleArrowHeight = 8.0;
     16 const CGFloat kBubbleArrowWidth = 15.0;
     17 const CGFloat kBubbleCornerRadius = 2.0;
     18 const CGFloat kBubbleArrowXOffset = kBubbleArrowWidth + kBubbleCornerRadius;
     19 
     20 // Constants that define where the bubble will have rounded corners.
     21 enum CornerFlags {
     22   kRoundedTopCorners = 1,
     23   kRoundedBottomCorners = 1 << 1,
     24   kRoundedAllCorners = kRoundedTopCorners | kRoundedBottomCorners,
     25 };
     26 
     27 enum BubbleArrowLocation {
     28   kTopLeft,
     29   kTopCenter,
     30   kTopRight,
     31   kNoArrow,
     32 };
     33 
     34 enum BubbleAlignment {
     35   // The tip of the arrow points to the anchor point.
     36   kAlignArrowToAnchor,
     37   // The edge nearest to the arrow is lined up with the anchor point.
     38   kAlignEdgeToAnchorEdge,
     39   // Align the right edge to the anchor point.
     40   kAlignRightEdgeToAnchorEdge,
     41   // Align the left edge to the anchor point.
     42   kAlignLeftEdgeToAnchorEdge,
     43 };
     44 
     45 }  // namespace info_bubble
     46 
     47 // Content view for a bubble with an arrow showing arbitrary content.
     48 // This is where nonrectangular drawing happens.
     49 @interface InfoBubbleView : NSView {
     50  @private
     51   info_bubble::BubbleArrowLocation arrowLocation_;
     52   info_bubble::BubbleAlignment alignment_;
     53   info_bubble::CornerFlags cornerFlags_;
     54   base::scoped_nsobject<NSColor> backgroundColor_;
     55 }
     56 
     57 @property(assign, nonatomic) info_bubble::BubbleArrowLocation arrowLocation;
     58 @property(assign, nonatomic) info_bubble::BubbleAlignment alignment;
     59 @property(assign, nonatomic) info_bubble::CornerFlags cornerFlags;
     60 
     61 // Returns the point location in view coordinates of the tip of the arrow.
     62 - (NSPoint)arrowTip;
     63 
     64 // Gets and sets the bubble's background color.
     65 - (NSColor*)backgroundColor;
     66 - (void)setBackgroundColor:(NSColor*)backgroundColor;
     67 
     68 @end
     69 
     70 #endif  // CHROME_BROWSER_UI_COCOA_INFO_BUBBLE_VIEW_H_
     71