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   kTopRight,
     30   kNoArrow,
     31 };
     32 
     33 enum BubbleAlignment {
     34   // The tip of the arrow points to the anchor point.
     35   kAlignArrowToAnchor,
     36   // The edge nearest to the arrow is lined up with the anchor point.
     37   kAlignEdgeToAnchorEdge,
     38   // Align the right edge to the anchor point.
     39   kAlignRightEdgeToAnchorEdge,
     40   // Align the left edge to the anchor point.
     41   kAlignLeftEdgeToAnchorEdge,
     42 };
     43 
     44 }  // namespace info_bubble
     45 
     46 // Content view for a bubble with an arrow showing arbitrary content.
     47 // This is where nonrectangular drawing happens.
     48 @interface InfoBubbleView : NSView {
     49  @private
     50   info_bubble::BubbleArrowLocation arrowLocation_;
     51   info_bubble::BubbleAlignment alignment_;
     52   info_bubble::CornerFlags cornerFlags_;
     53   base::scoped_nsobject<NSColor> backgroundColor_;
     54 }
     55 
     56 @property(assign, nonatomic) info_bubble::BubbleArrowLocation arrowLocation;
     57 @property(assign, nonatomic) info_bubble::BubbleAlignment alignment;
     58 @property(assign, nonatomic) info_bubble::CornerFlags cornerFlags;
     59 
     60 // Returns the point location in view coordinates of the tip of the arrow.
     61 - (NSPoint)arrowTip;
     62 
     63 // Gets and sets the bubble's background color.
     64 - (NSColor*)backgroundColor;
     65 - (void)setBackgroundColor:(NSColor*)backgroundColor;
     66 
     67 @end
     68 
     69 #endif  // CHROME_BROWSER_UI_COCOA_INFO_BUBBLE_VIEW_H_
     70