| Index: ui/message_center/cocoa/settings_entry_view.mm
|
| diff --git a/ui/message_center/cocoa/settings_entry_view.mm b/ui/message_center/cocoa/settings_entry_view.mm
|
| deleted file mode 100644
|
| index 7006ab3749a27cf772a1ec779b8042b317d225b5..0000000000000000000000000000000000000000
|
| --- a/ui/message_center/cocoa/settings_entry_view.mm
|
| +++ /dev/null
|
| @@ -1,293 +0,0 @@
|
| -// Copyright 2013 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 "ui/message_center/cocoa/settings_entry_view.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/strings/sys_string_conversions.h"
|
| -#include "skia/ext/skia_utils_mac.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#import "ui/message_center/cocoa/settings_controller.h"
|
| -#include "ui/message_center/message_center_style.h"
|
| -#include "ui/resources/grit/ui_resources.h"
|
| -
|
| -using message_center::settings::kEntryIconSize;
|
| -using message_center::settings::kInternalHorizontalSpacing;
|
| -
|
| -// Size of the widget rendered for us by Cocoa.
|
| -const int kCocoaCheckboxSize = 14;
|
| -
|
| -// Intrinsic padding pixels out of our control.
|
| -// Cocoa gives the checkmark some blank space on either side.
|
| -const int kIntrinsicCheckmarkLeftPadding = 2;
|
| -const int kIntrinsicCheckmarkRightPadding = 4;
|
| -// Labels have a bit of whitespace to the left, which can throw
|
| -// off measurements.
|
| -const int kIntrinsicTextLeftPadding = 1;
|
| -
|
| -// The learn more image is bigger than the actual size of the learn more
|
| -// pixels, this represents the difference.
|
| -const int kIntrinsicLearnMorePadding = 2;
|
| -
|
| -// Corrected padding values used in layout.
|
| -// This computes the amout of padding based on the area reserved for the
|
| -// checkbox and the actual checkbox size in pixels.
|
| -const int kCheckmarkPaddingNecessary =
|
| - (message_center::settings::kCheckboxSizeWithPadding - kCocoaCheckboxSize) /
|
| - 2;
|
| -
|
| -// These represent the additional padding that we must give the checkmark
|
| -// control based on the required padding and the intrinsic padding.
|
| -const int kCorrectedCheckmarkLeftPadding =
|
| - kCheckmarkPaddingNecessary - kIntrinsicCheckmarkLeftPadding;
|
| -const int kCorrectedCheckmarkRightPadding =
|
| - kCheckmarkPaddingNecessary + kInternalHorizontalSpacing -
|
| - kIntrinsicCheckmarkRightPadding;
|
| -
|
| -// The amount of space we want, based on the spec and the intrinsic text space
|
| -// included by Cocoa.
|
| -const int kCorrectedIconTextPadding =
|
| - kInternalHorizontalSpacing - kIntrinsicTextLeftPadding;
|
| -
|
| -// We want a certain amount of space to the right of the learn more button,
|
| -// this metric incorporates the intrinsic learn more blank space to compute it.
|
| -const int kCorrectedEntryRightPadding =
|
| - kInternalHorizontalSpacing - kIntrinsicLearnMorePadding;
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -@interface MCSettingsButton : NSButton
|
| -@end
|
| -
|
| -@implementation MCSettingsButton
|
| -// drawRect: needs to fill the button with a background, otherwise we don't get
|
| -// subpixel antialiasing.
|
| -- (void)drawRect:(NSRect)dirtyRect {
|
| - NSColor* color = gfx::SkColorToCalibratedNSColor(
|
| - message_center::kMessageCenterBackgroundColor);
|
| - [color set];
|
| - NSRectFill(dirtyRect);
|
| - [super drawRect:dirtyRect];
|
| -}
|
| -@end
|
| -
|
| -@interface MCSettingsButtonCell : NSButtonCell {
|
| - // A checkbox's regular image is the checkmark image. This additional image
|
| - // is used for the favicon or app icon shown next to the checkmark.
|
| - base::scoped_nsobject<NSImage> extraImage_;
|
| -}
|
| -- (void)setExtraImage:(NSImage*)extraImage;
|
| -@end
|
| -
|
| -@implementation MCSettingsButtonCell
|
| -- (BOOL)isOpaque {
|
| - return YES;
|
| -}
|
| -
|
| -- (void)setExtraImage:(NSImage*)extraImage {
|
| - extraImage_.reset([extraImage retain]);
|
| -}
|
| -
|
| -- (NSRect)drawTitle:(NSAttributedString*)title
|
| - withFrame:(NSRect)frame
|
| - inView:(NSView*)controlView {
|
| - CGFloat inset = kCorrectedCheckmarkRightPadding;
|
| - // drawTitle:withFrame:inView: draws the checkmark image. Draw the extra
|
| - // image as part of the checkbox's text.
|
| - if (extraImage_) {
|
| - NSRect imageRect = frame;
|
| - imageRect.origin.x += inset;
|
| - // Center the image vertically.
|
| - if (NSHeight(frame) > kEntryIconSize)
|
| - imageRect.origin.y += (NSHeight(frame) - kEntryIconSize) / 2;
|
| - imageRect.size = NSMakeSize(kEntryIconSize, kEntryIconSize);
|
| - [extraImage_ drawInRect:imageRect
|
| - fromRect:NSZeroRect
|
| - operation:NSCompositeSourceOver
|
| - fraction:1.0
|
| - respectFlipped:YES
|
| - hints:nil];
|
| -
|
| - inset += kEntryIconSize + kCorrectedIconTextPadding;
|
| - }
|
| - frame.origin.x += inset;
|
| - frame.size.width -= inset;
|
| - return [super drawTitle:title withFrame:frame inView:controlView];
|
| -}
|
| -
|
| -- (NSSize)cellSizeForBounds:(NSRect)aRect {
|
| - NSSize size = [super cellSizeForBounds:aRect];
|
| - size.width += kCorrectedCheckmarkRightPadding;
|
| - if (extraImage_) {
|
| - size.width += kEntryIconSize + kCorrectedIconTextPadding;
|
| - size.height = std::max(static_cast<CGFloat>(kEntryIconSize), size.height);
|
| - }
|
| - return size;
|
| -}
|
| -
|
| -- (NSUInteger)hitTestForEvent:(NSEvent*)event
|
| - inRect:(NSRect)cellFrame
|
| - ofView:(NSView*)controlView {
|
| - NSUInteger result =
|
| - [super hitTestForEvent:event inRect:cellFrame ofView:controlView];
|
| - if (result == NSCellHitNone) {
|
| - // The default button cell does hit testing on the attributed string. Since
|
| - // this cell draws additional spacing and an icon in front of the string,
|
| - // tweak the hit testing result.
|
| - NSPoint point =
|
| - [controlView convertPoint:[event locationInWindow] fromView:nil];
|
| -
|
| - NSRect rect = [self titleRectForBounds:[controlView bounds]];
|
| - rect.size = [[self attributedTitle] size];
|
| - rect.size.width += kCorrectedCheckmarkRightPadding;
|
| -
|
| - if (extraImage_)
|
| - rect.size.width += kEntryIconSize + kCorrectedIconTextPadding;
|
| -
|
| - if (NSPointInRect(point, rect))
|
| - result = NSCellHitContentArea | NSCellHitTrackableArea;
|
| - }
|
| - return result;
|
| -}
|
| -@end
|
| -
|
| -@implementation MCSettingsEntryView
|
| -- (id)initWithController:(MCSettingsController*)controller
|
| - notifier:(message_center::Notifier*)notifier
|
| - frame:(NSRect)frame
|
| - hasSeparator:(BOOL)hasSeparator {
|
| - if ((self = [super initWithFrame:frame])) {
|
| - [self setBoxType:NSBoxCustom];
|
| - [self setBorderType:NSNoBorder];
|
| - [self setTitlePosition:NSNoTitle];
|
| - [self setContentViewMargins:NSZeroSize];
|
| -
|
| - hasSeparator_ = hasSeparator;
|
| - controller_ = controller;
|
| - notifier_ = notifier;
|
| - if (!notifier->icon.IsEmpty())
|
| - notifierIcon_.reset(notifier->icon.CopyNSImage());
|
| - [self layoutEntryView];
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)setNotifierIcon:(NSImage*)notifierIcon {
|
| - notifierIcon_.reset([notifierIcon retain]);
|
| - [self layoutEntryView];
|
| -}
|
| -
|
| -- (NSButton*)checkbox {
|
| - return checkbox_;
|
| -}
|
| -
|
| -- (void)layoutEntryView {
|
| - BOOL hasLearnMore =
|
| - [controller_ notifierHasAdvancedSettings:notifier_->notifier_id];
|
| -
|
| - // Now calculate the space available for the checkbox button.
|
| - NSRect checkboxFrame = [self bounds];
|
| - checkboxFrame.origin.x += kCorrectedCheckmarkLeftPadding;
|
| - checkboxFrame.size.width -=
|
| - kCorrectedCheckmarkLeftPadding + kCorrectedEntryRightPadding;
|
| -
|
| - NSRect learnMoreFrame =
|
| - NSMakeRect(checkboxFrame.origin.x + checkboxFrame.size.width,
|
| - checkboxFrame.origin.y,
|
| - 0,
|
| - checkboxFrame.size.height);
|
| -
|
| - // Initially place the learn more button right-aligned.
|
| - if (hasLearnMore) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - NSImage* defaultImage =
|
| - rb.GetNativeImageNamed(IDR_NOTIFICATION_ADVANCED_SETTINGS).ToNSImage();
|
| - NSSize defaultImageSize = [defaultImage size];
|
| - learnMoreFrame.size.width = defaultImageSize.width;
|
| - learnMoreFrame.origin.x -= defaultImageSize.width;
|
| -
|
| - // May need to center the image if it's shorter than the entry.
|
| - if (defaultImageSize.height < learnMoreFrame.size.height) {
|
| - learnMoreFrame.origin.y +=
|
| - (learnMoreFrame.size.height - defaultImageSize.height) / 2;
|
| - learnMoreFrame.size.height = defaultImageSize.height;
|
| - }
|
| -
|
| - // Since we have an image then we need to ensure that the text from the
|
| - // checkbox doesn't overlap with the learn more image.
|
| - checkboxFrame.size.width -=
|
| - kCorrectedIconTextPadding + learnMoreFrame.size.width;
|
| -
|
| - if (!learnMoreButton_.get()) {
|
| - learnMoreButton_.reset(
|
| - [[HoverImageButton alloc] initWithFrame:learnMoreFrame]);
|
| - [self addSubview:learnMoreButton_];
|
| - } else {
|
| - [learnMoreButton_ setFrame:learnMoreFrame];
|
| - }
|
| - [learnMoreButton_ setDefaultImage:defaultImage];
|
| - [learnMoreButton_ setHoverImage:rb.GetNativeImageNamed(
|
| - IDR_NOTIFICATION_ADVANCED_SETTINGS_HOVER).ToNSImage()];
|
| - [learnMoreButton_ setPressedImage:rb.GetNativeImageNamed(
|
| - IDR_NOTIFICATION_ADVANCED_SETTINGS_PRESSED).ToNSImage()];
|
| - [learnMoreButton_ setBordered:NO];
|
| - [learnMoreButton_ setTarget:self];
|
| - [learnMoreButton_ setAction:@selector(learnMoreClicked:)];
|
| - }
|
| -
|
| - if (!checkbox_.get()) {
|
| - checkbox_.reset([[MCSettingsButton alloc] initWithFrame:checkboxFrame]);
|
| - [self addSubview:checkbox_];
|
| - } else {
|
| - [checkbox_ setFrame:checkboxFrame];
|
| - }
|
| -
|
| - base::scoped_nsobject<MCSettingsButtonCell> cell([[MCSettingsButtonCell alloc]
|
| - initTextCell:base::SysUTF16ToNSString(notifier_->name)]);
|
| - if ([notifierIcon_ isValid])
|
| - [cell setExtraImage:notifierIcon_];
|
| -
|
| - [checkbox_ setCell:cell];
|
| - [checkbox_ setButtonType:NSSwitchButton];
|
| - [checkbox_ setState:notifier_->enabled ? NSOnState : NSOffState];
|
| - [checkbox_ setTarget:self];
|
| - [checkbox_ setAction:@selector(checkboxClicked:)];
|
| -
|
| - if (hasSeparator_) {
|
| - NSRect separatorRect = [self bounds];
|
| - separatorRect.size.height = 1;
|
| - if (!separator_.get()) {
|
| - separator_.reset([[NSBox alloc] initWithFrame:separatorRect]);
|
| - [separator_ setBoxType:NSBoxCustom];
|
| - [separator_ setBorderType:NSLineBorder];
|
| - [separator_ setBorderColor:gfx::SkColorToCalibratedNSColor(
|
| - message_center::settings::kEntrySeparatorColor)];
|
| - [separator_ setTitlePosition:NSNoTitle];
|
| - [separator_ setContentViewMargins:NSZeroSize];
|
| - [self addSubview:separator_];
|
| - } else {
|
| - [separator_ setFrame:separatorRect];
|
| - }
|
| - }
|
| -}
|
| -
|
| -- (void)checkboxClicked:(id)sender {
|
| - BOOL enabled = [sender state] == NSOnState;
|
| - [controller_ setSettingsNotifier:notifier_ enabled:enabled];
|
| -}
|
| -
|
| -- (void)learnMoreClicked:(id)sender {
|
| - [controller_ learnMoreClicked:notifier_];
|
| -}
|
| -
|
| -// Testing API /////////////////////////////////////////////////////////////////
|
| -
|
| -- (void)clickLearnMore {
|
| - [learnMoreButton_ performClick:nil];
|
| -}
|
| -
|
| -@end
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
|
|