| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 #import "chrome/browser/ui/cocoa/profiles/avatar_label_button.h" | |
| 6 | |
| 7 #include "chrome/browser/themes/theme_properties.h" | |
| 8 #include "chrome/browser/ui/cocoa/themed_window.h" | |
| 9 #include "chrome/grit/generated_resources.h" | |
| 10 #include "grit/theme_resources.h" | |
| 11 #include "ui/base/cocoa/appkit_utils.h" | |
| 12 #include "ui/base/l10n/l10n_util_mac.h" | |
| 13 #include "ui/base/theme_provider.h" | |
| 14 | |
| 15 namespace { | |
| 16 | |
| 17 // Space between the left edge of the label background and the left edge of the | |
| 18 // label text. | |
| 19 const CGFloat kLabelTextLeftSpacing = 10; | |
| 20 | |
| 21 // Space between the right edge of the label text and the avatar icon. | |
| 22 const CGFloat kLabelTextRightSpacing = 4; | |
| 23 | |
| 24 // Space between the top edge of the label background and the top edge of the | |
| 25 // label text. | |
| 26 const CGFloat kLabelTextTopSpacing = 3; | |
| 27 | |
| 28 // Space between the bottom edge of the label background and the bottom edge of | |
| 29 // the label text. | |
| 30 const CGFloat kLabelTextBottomSpacing = 4; | |
| 31 | |
| 32 } // namespace | |
| 33 | |
| 34 @implementation AvatarLabelButton | |
| 35 | |
| 36 - (id)initWithFrame:(NSRect)frameRect { | |
| 37 if ((self = [super initWithFrame:frameRect])) { | |
| 38 [self setBezelStyle:NSSmallSquareBezelStyle]; | |
| 39 [self setTitle:l10n_util::GetNSString( | |
| 40 IDS_LEGACY_SUPERVISED_USER_AVATAR_LABEL)]; | |
| 41 [self setFont:[NSFont labelFontOfSize:12.0]]; | |
| 42 // Increase the frame by the size of the label to be displayed. | |
| 43 NSSize textSize = [[self cell] labelTextSize]; | |
| 44 frameRect.size = NSMakeSize(frameRect.size.width + textSize.width, | |
| 45 frameRect.size.height + textSize.height); | |
| 46 [self setFrame:frameRect]; | |
| 47 } | |
| 48 return self; | |
| 49 } | |
| 50 | |
| 51 + (Class)cellClass { | |
| 52 return [AvatarLabelButtonCell class]; | |
| 53 } | |
| 54 | |
| 55 @end | |
| 56 | |
| 57 @implementation AvatarLabelButtonCell | |
| 58 | |
| 59 - (NSSize)labelTextSize { | |
| 60 NSSize size = [[self attributedTitle] size]; | |
| 61 size.width += kLabelTextLeftSpacing + kLabelTextRightSpacing; | |
| 62 size.height += kLabelTextTopSpacing + kLabelTextBottomSpacing; | |
| 63 return size; | |
| 64 } | |
| 65 | |
| 66 - (void)drawBezelWithFrame:(NSRect)frame inView:(NSView*)controlView { | |
| 67 ui::NinePartImageIds imageIds = IMAGE_GRID(IDR_SUPERVISED_USER_LABEL); | |
| 68 ui::DrawNinePartImage(frame, imageIds, NSCompositeSourceOver, 1.0, true); | |
| 69 } | |
| 70 | |
| 71 - (NSRect)titleRectForBounds:(NSRect)theRect { | |
| 72 theRect.origin = NSMakePoint(kLabelTextLeftSpacing, kLabelTextBottomSpacing); | |
| 73 theRect.size = [[self attributedTitle] size]; | |
| 74 return theRect; | |
| 75 } | |
| 76 | |
| 77 - (NSRect)drawTitle:(NSAttributedString*)title | |
| 78 withFrame:(NSRect)frame | |
| 79 inView:(NSView*)controlView { | |
| 80 base::scoped_nsobject<NSMutableAttributedString> themedTitle( | |
| 81 [[NSMutableAttributedString alloc] initWithAttributedString:title]); | |
| 82 const ui::ThemeProvider* themeProvider = [[controlView window] themeProvider]; | |
| 83 if (themeProvider) { | |
| 84 NSColor* textColor = themeProvider->GetNSColor( | |
| 85 ThemeProperties::COLOR_SUPERVISED_USER_LABEL); | |
| 86 [themedTitle addAttribute:NSForegroundColorAttributeName | |
| 87 value:textColor | |
| 88 range:NSMakeRange(0, title.length)]; | |
| 89 } | |
| 90 [themedTitle drawInRect:frame]; | |
| 91 return frame; | |
| 92 } | |
| 93 | |
| 94 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { | |
| 95 const ui::ThemeProvider* themeProvider = [[controlView window] themeProvider]; | |
| 96 if (themeProvider) { | |
| 97 // Draw the label button background using the color provided by | |
| 98 // |themeProvider|. First paint the border. | |
| 99 NSColor* borderColor = themeProvider->GetNSColor( | |
| 100 ThemeProperties::COLOR_SUPERVISED_USER_LABEL_BORDER); | |
| 101 if ([self isHighlighted]) { | |
| 102 borderColor = [borderColor blendedColorWithFraction:0.5 | |
| 103 ofColor:[NSColor blackColor]]; | |
| 104 } | |
| 105 NSSize frameSize = cellFrame.size; | |
| 106 NSRect backgroundRect; | |
| 107 backgroundRect.origin = NSMakePoint(1, 1); | |
| 108 backgroundRect.size = NSMakeSize(frameSize.width - 2, frameSize.height - 2); | |
| 109 NSBezierPath* path = | |
| 110 [NSBezierPath bezierPathWithRoundedRect:backgroundRect | |
| 111 xRadius:2.0 | |
| 112 yRadius:2.0]; | |
| 113 [borderColor set]; | |
| 114 [path fill]; | |
| 115 | |
| 116 // Now paint the background. | |
| 117 NSColor* backgroundColor = themeProvider->GetNSColor( | |
| 118 ThemeProperties::COLOR_SUPERVISED_USER_LABEL_BACKGROUND); | |
| 119 if ([self isHighlighted]) { | |
| 120 backgroundColor = | |
| 121 [backgroundColor blendedColorWithFraction:0.5 | |
| 122 ofColor:[NSColor blackColor]]; | |
| 123 } | |
| 124 backgroundRect.origin = NSMakePoint(2, 2); | |
| 125 backgroundRect.size = NSMakeSize(frameSize.width - 4, frameSize.height - 4); | |
| 126 path = [NSBezierPath bezierPathWithRoundedRect:backgroundRect | |
| 127 xRadius:2.0 | |
| 128 yRadius:2.0]; | |
| 129 [backgroundColor set]; | |
| 130 [path fill]; | |
| 131 } | |
| 132 [super drawInteriorWithFrame:cellFrame inView:controlView]; | |
| 133 } | |
| 134 | |
| 135 @end | |
| OLD | NEW |