// Copyright (c) 2011 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 <Cocoa/Cocoa.h> #include "base/mac/scoped_nsobject.h" // A view class that looks like a "bubble" with rounded corners and displays // text inside. Can be themed. To put flush against the sides of a window, the // corner flags can be adjusted. // Constants that define where the bubble will have a rounded corner. If // not set, the corner will be square. enum { kRoundedTopLeftCorner = 1, kRoundedTopRightCorner = 1 << 1, kRoundedBottomLeftCorner = 1 << 2, kRoundedBottomRightCorner = 1 << 3, kRoundedAllCorners = kRoundedTopLeftCorner | kRoundedTopRightCorner | kRoundedBottomLeftCorner | kRoundedBottomRightCorner }; // Constants that affect where the text is positioned within the view. They // are exposed in case anyone needs to use the padding to set the content string // length appropriately based on available space (such as eliding a URL). enum { kBubbleViewTextPositionX = 4, kBubbleViewTextPositionY = 2 }; @interface BubbleView : NSView { @private base::scoped_nsobject<NSString> content_; unsigned long cornerFlags_; // The window from which we get the theme used to draw. In some cases, // it might not be the window we're in. As a result, this may or may not // directly own us, so it needs to be weak to prevent a cycle. NSWindow* themeProvider_; } // Designated initializer. |provider| is the window from which we get the // current theme to draw text and backgrounds. If nil, the current window will // be checked. The caller needs to ensure |provider| can't go away as it will // not be retained. Defaults to all corners being rounded. - (id)initWithFrame:(NSRect)frame themeProvider:(NSWindow*)provider; // Sets the string displayed in the bubble. A copy of the string is made. - (void)setContent:(NSString*)content; // Sets which corners will be rounded. - (void)setCornerFlags:(unsigned long)flags; // Sets the window whose theme is used to draw. - (void)setThemeProvider:(NSWindow*)provider; // The font used to display the content string. - (NSFont*)font; @end // APIs exposed only for testing. @interface BubbleView(TestingOnly) - (NSString*)content; - (unsigned long)cornerFlags; @end