Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(806)

Unified Diff: chrome/browser/ui/cocoa/website_settings_bubble_controller.mm

Issue 10827029: [Mac] Website settings: Implement custom tab appearance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/website_settings_bubble_controller.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
diff --git a/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
index 22cf074cb3d6a17f6b32f6f2d11bb5634dbdb491..b6307d83fee14495dd13bb1b67d9cc842d823800 100644
--- a/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
@@ -4,6 +4,9 @@
#import "chrome/browser/ui/cocoa/website_settings_bubble_controller.h"
+#import <AppKit/NSCell.h>
Robert Sesek 2012/07/26 02:49:28 Is this necessary? You import Cocoa.h in the .h, w
Patrick Dubroy 2012/07/28 02:15:02 You're right. I could have sworn I added this only
+#import <QuartzCore/QuartzCore.h>
+
#include "base/sys_string_conversions.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#import "chrome/browser/ui/cocoa/info_bubble_view.h"
@@ -12,6 +15,7 @@
#include "chrome/browser/ui/tab_contents/tab_contents.h"
#include "content/public/browser/cert_store.h"
#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
#include "grit/ui_resources.h"
#import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h"
#include "ui/base/l10n/l10n_util.h"
@@ -73,6 +77,73 @@ const ContentSetting kPermissionsMenuSettings[] = {
}
@end
+@interface CustomTabbedSegmentedCell : NSSegmentedCell {
Robert Sesek 2012/07/26 02:49:28 naming: call this WebsiteSettingsTabSegmentedCell
Patrick Dubroy 2012/07/28 02:15:02 Done.
+ @private
+ scoped_nsobject<NSImage> tabBackgroundImage_;
+ scoped_nsobject<NSImage> tabCenterImage_;
+ scoped_nsobject<NSImage> tabLeftImage_;
+ scoped_nsobject<NSImage> tabRightImage_;
+}
+@end
+@implementation CustomTabbedSegmentedCell
+- (id)init {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
Robert Sesek 2012/07/26 02:49:28 This should be in an if ((self = [super init])) bl
Patrick Dubroy 2012/07/28 02:15:02 Done.
+ tabBackgroundImage_.reset(
+ [rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TAB_BACKGROUND) retain]);
+ tabCenterImage_.reset(
+ [rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TAB_CENTER) retain]);
+ tabLeftImage_.reset(
+ [rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TAB_LEFT) retain]);
+ tabRightImage_.reset(
+ [rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TAB_RIGHT) retain]);
+
+ return [super init];
+}
+
+// Fill the given rect with a tiled pattern using the given image.
+- (void)fillRect:(NSRect)rect
+ withTiledImage:(NSImage*)image
+ inView:(NSView*)view{
+ NSGraphicsContext* context = [NSGraphicsContext currentContext];
+ [context saveGraphicsState];
Robert Sesek 2012/07/26 02:49:28 There's a scoper in ui/gfx for this.
Patrick Dubroy 2012/07/28 02:15:02 Not relevant anymore.
+ NSPoint patternStart = [view convertPoint:rect.origin toView:nil];
+ [context setPatternPhase:patternStart];
+ [[NSColor colorWithPatternImage:image] set];
+ NSRectFill(rect);
+ [context restoreGraphicsState];
+}
+
+- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
+ // Draw the background for the tab strip.
+ [self fillRect:cellFrame
+ withTiledImage:tabBackgroundImage_.get()
Robert Sesek 2012/07/26 02:49:28 nit: if aligning the colons mean that the next lin
Patrick Dubroy 2012/07/28 02:15:02 Not relevant anymore.
+ inView:controlView];
+
+ // Draw the individual tabs.
+ [self drawInteriorWithFrame:cellFrame inView:controlView];
+}
+
+- (void)drawSegment:(NSInteger)segment
+ inFrame:(NSRect)frame
+ withView:(NSView*)controlView {
+ if ([self isSelectedForSegment:segment]) {
+ NSDrawThreePartImage(frame,
+ tabLeftImage_,
+ tabCenterImage_,
+ tabRightImage_,
+ NO,
Robert Sesek 2012/07/26 02:49:28 For these BOOL params, can you do /*param_name=*/
Patrick Dubroy 2012/07/28 02:15:02 Done.
+ NSCompositeSourceOver,
+ 1,
+ YES);
+ }
+ frame.origin.y += 20;
+ frame.size.height -= 20;
+
+ // Call the superclass to draw the label.
+ [super drawSegment:segment inFrame:frame withView:controlView];
+}
+@end
+
@implementation WebsiteSettingsBubbleController
- (id)initWithParentWindow:(NSWindow*)parentWindow
@@ -133,11 +204,39 @@ const ContentSetting kPermissionsMenuSettings[] = {
// Create the tab view and its two tabs.
+ NSRect initialFrame = NSMakeRect(0, 0, kWindowWidth, 44);
+ segmentedControl_.reset(
+ [[NSSegmentedControl alloc] initWithFrame:initialFrame]);
+ [segmentedControl_ setCell:[[CustomTabbedSegmentedCell alloc] init]];
+ [segmentedControl_ setSegmentCount:2];
+ [segmentedControl_ setTarget:self];
+ [segmentedControl_ setAction:@selector(tabSelected:)];
+ NSFont* smallSystemFont =
+ [NSFont systemFontOfSize:[NSFont smallSystemFontSize]];
+ NSDictionary* textAttributes =
+ [NSDictionary dictionaryWithObject:smallSystemFont
+ forKey:NSFontAttributeName];
+
+ NSString* label = l10n_util::GetNSString(
+ IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS);
+ NSSize textSize = [label sizeWithAttributes:textAttributes];
+
+ [segmentedControl_ setLabel:label forSegment:0];
+ [segmentedControl_ setWidth:textSize.width + 2 * 28 forSegment:0];
Robert Sesek 2012/07/26 02:49:28 Where's 28 come from?
Patrick Dubroy 2012/07/28 02:15:02 Fixed.
+
+ label = l10n_util::GetNSString(IDS_WEBSITE_SETTINGS_TAB_LABEL_CONNECTION);
+ textSize = [label sizeWithAttributes:textAttributes];
+ [segmentedControl_ setLabel:label forSegment:1];
+ [segmentedControl_ setWidth:textSize.width + 2 * 28 forSegment:1];
+
+ [segmentedControl_ setFont:smallSystemFont];
+ [contentView_ addSubview:segmentedControl_];
+
NSRect tabFrame = NSMakeRect(0, 0, kWindowWidth, 300);
tabView_.reset([[NSTabView alloc] initWithFrame:tabFrame]);
- [tabView_ setTabViewType:NSTopTabsBezelBorder];
+ [tabView_ setTabViewType:NSNoTabsNoBorder];
+ [tabView_ setDrawsBackground:NO];
[tabView_ setControlSize:NSSmallControlSize];
- [tabView_ setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
[contentView_ addSubview:tabView_.get()];
permissionsContentView_ = [self addPermissionsTabToTabView:tabView_];
@@ -154,8 +253,6 @@ const ContentSetting kPermissionsMenuSettings[] = {
// Returns a weak reference to the tab view item's view.
- (NSView*)addPermissionsTabToTabView:(NSTabView*)tabView {
scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]);
- [item setLabel:
- l10n_util::GetNSString(IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS)];
[tabView_ addTabViewItem:item.get()];
scoped_nsobject<NSView> contentView([[WebsiteSettingsContentView alloc]
initWithFrame:[tabView_ contentRect]]);
@@ -167,9 +264,6 @@ const ContentSetting kPermissionsMenuSettings[] = {
// Returns a weak reference to the tab view item's view.
- (NSView*)addConnectionTabToTabView:(NSTabView*)tabView {
scoped_nsobject<NSTabViewItem> item([[NSTabViewItem alloc] init]);
- [item setLabel:
- l10n_util::GetNSString(IDS_WEBSITE_SETTINGS_TAB_LABEL_CONNECTION)];
-
scoped_nsobject<NSView> contentView([[WebsiteSettingsContentView alloc]
initWithFrame:[tabView_ contentRect]]);
@@ -267,9 +361,14 @@ const ContentSetting kPermissionsMenuSettings[] = {
[self setYPositionOfView:firstVisitDescriptionField_ to:yPos];
// Adjust the tab view size and place it below the identity status.
+
+ NSRect segmentedControlFrame = [segmentedControl_ frame];
+ segmentedControlFrame.origin.y =
+ NSMaxY([identityStatusField_ frame]);
+ [segmentedControl_ setFrame:segmentedControlFrame];
+
NSRect tabViewFrame = [tabView_ frame];
- tabViewFrame.origin.y =
- NSMaxY([identityStatusField_ frame]) + kVerticalSpacing;
+ tabViewFrame.origin.y = NSMaxY(segmentedControlFrame);
CGFloat connectionTabHeight = std::max(
NSMaxY([firstVisitDescriptionField_ frame]),
@@ -469,6 +568,10 @@ const ContentSetting kPermissionsMenuSettings[] = {
return button.get();
}
+- (void)tabSelected:(id)sender {
+ [tabView_ selectTabViewItemAtIndex: [segmentedControl_ selectedSegment]];
Robert Sesek 2012/07/26 02:49:28 nit: no space after :
Patrick Dubroy 2012/07/28 02:15:02 Done.
+}
+
// Handler for the permission-changing menus.
- (void)permissionValueChanged:(id)sender {
DCHECK([sender isKindOfClass:[NSPopUpButton class]]);
« no previous file with comments | « chrome/browser/ui/cocoa/website_settings_bubble_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698