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

Unified Diff: chrome/browser/ui/cocoa/website_settings/split_block_button.mm

Issue 2741933003: Move Cocoa Page Info UI code to its own folder. (Closed)
Patch Set: Fixin' more unit tests BUILD paths (does mass_rename.py just not pick those up? => crbug.com/701529) Created 3 years, 9 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
Index: chrome/browser/ui/cocoa/website_settings/split_block_button.mm
diff --git a/chrome/browser/ui/cocoa/website_settings/split_block_button.mm b/chrome/browser/ui/cocoa/website_settings/split_block_button.mm
deleted file mode 100644
index ba0939c73f8c3c48009843c474793672995d3fd2..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/website_settings/split_block_button.mm
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2014 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 "chrome/browser/ui/cocoa/website_settings/split_block_button.h"
-
-#include <cmath>
-
-#include "base/logging.h"
-#include "base/mac/scoped_nsobject.h"
-#include "chrome/grit/generated_resources.h"
-#include "skia/ext/skia_utils_mac.h"
-#import "ui/base/cocoa/menu_controller.h"
-#include "ui/base/l10n/l10n_util_mac.h"
-#include "ui/base/models/simple_menu_model.h"
-
-namespace {
-
-enum MouseLocation {
- kInsideLeftCell,
- kInsideRightCell,
- kNotInside,
-};
-
-enum CornerType {
- kRounded,
- kAngled,
-};
-
-NSBezierPath* PathWithCornerStyles(NSRect frame,
- CornerType leftCornerStyle,
- CornerType rightCornerStyle) {
- base::scoped_nsobject<NSBezierPath> path([[NSBezierPath bezierPath] retain]);
- const CGFloat x0 = NSMinX(frame);
- const CGFloat x1 = NSMaxX(frame);
- const CGFloat y0 = NSMinY(frame);
- const CGFloat y1 = NSMaxY(frame);
- const CGFloat radius = 2;
-
- // Start at the center bottom. Draw left and up, including both left corners.
- [path moveToPoint:NSMakePoint(std::floor((x1 - x0) * .5), y0)];
- if (leftCornerStyle == kAngled) {
- [path lineToPoint:NSMakePoint(x0, y0)];
- [path lineToPoint:NSMakePoint(x0, y1)];
- } else {
- [path appendBezierPathWithArcFromPoint:NSMakePoint(x0, y0)
- toPoint:NSMakePoint(x0, y0 + radius)
- radius:radius];
- [path appendBezierPathWithArcFromPoint:NSMakePoint(x0, y1)
- toPoint:NSMakePoint(x0 + radius, y1)
- radius:radius];
- }
- // Draw through the upper right-hand and lower-right-hand corners.
- if (rightCornerStyle == kAngled) {
- [path lineToPoint:NSMakePoint(x1, y1)];
- [path lineToPoint:NSMakePoint(x1, y0)];
- } else {
- [path appendBezierPathWithArcFromPoint:NSMakePoint(x1, y1)
- toPoint:NSMakePoint(x1, y1 - radius)
- radius:radius];
- [path appendBezierPathWithArcFromPoint:NSMakePoint(x1, y0)
- toPoint:NSMakePoint(x1 - radius, y0)
- radius:radius];
- }
- return path.autorelease();
-}
-
-void DrawBezel(id<ConstrainedWindowButtonDrawableCell>cell,
- CornerType leftCorners,
- CornerType rightCorners,
- NSRect frame,
- NSView* view) {
- if ([cell isMouseInside]) {
- base::scoped_nsobject<NSBezierPath> path(
- [PathWithCornerStyles(frame, leftCorners, rightCorners) retain]);
- [ConstrainedWindowButton DrawBackgroundAndShadowForPath:path
- withCell:cell
- inView:view];
- [ConstrainedWindowButton DrawInnerHighlightForPath:path
- withCell:cell
- inView:view];
- }
-}
-
-} // namespace
-
-// A button cell used by SplitBlockButton, containing the title.
-@interface SplitButtonTitleCell : ConstrainedWindowButtonCell
-- (NSRect)rect;
-@end
-
-// A button cell used by SplitBlockButton, containing the popup menu.
-@interface SplitButtonPopUpCell :
- NSPopUpButtonCell<ConstrainedWindowButtonDrawableCell> {
- @private
- BOOL isMouseInside_;
- base::scoped_nsobject<MenuController> menuController_;
- std::unique_ptr<ui::SimpleMenuModel> menuModel_;
-}
-
-// Designated initializer.
-- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate;
-
-- (NSRect)rect;
-
-@end
-
-@implementation SplitBlockButton
-
-- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate {
- if (self = [super initWithFrame:NSZeroRect]) {
- leftCell_.reset([[SplitButtonTitleCell alloc] init]);
- rightCell_.reset([[SplitButtonPopUpCell alloc]
- initWithMenuDelegate:menuDelegate]);
- [leftCell_ setTitle:l10n_util::GetNSString(IDS_PERMISSION_DENY)];
- [leftCell_ setEnabled:YES];
- [rightCell_ setEnabled:YES];
- }
- return self;
-}
-
-+ (Class)cellClass {
- return nil;
-}
-
-- (NSString*)title {
- return [leftCell_ title];
-}
-
-- (void)setAction:(SEL)action {
- [leftCell_ setAction:action];
-}
-
-- (void)setTarget:(id)target {
- [leftCell_ setTarget:target];
-}
-
-- (void)drawRect:(NSRect)rect {
- // Copy the base class: inset to leave room for the shadow.
- --rect.size.height;
-
- // This function assumes that |rect| is always the same as [self frame].
- // If that changes, the drawing functions will need to be adjusted.
- const CGFloat radius = 2;
- NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:rect
- xRadius:radius
- yRadius:radius];
- [ConstrainedWindowButton DrawBackgroundAndShadowForPath:path
- withCell:nil
- inView:self];
-
- // Use intersection rects for the cell drawing, to ensure the height
- // adjustment is honored.
- [leftCell_ setControlView:self];
- [leftCell_ drawWithFrame:NSIntersectionRect(rect, [self leftCellRect])
- inView:self];
-
- [rightCell_ setControlView:self];
- [rightCell_ drawWithFrame:NSIntersectionRect(rect, [self rightCellRect])
- inView:self];
-
- // Draw the border.
- path = [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(rect, 0.5, 0.5)
- xRadius:radius
- yRadius:radius];
- [ConstrainedWindowButton DrawBorderForPath:path
- withCell:nil
- inView:self];
-}
-
-- (void)updateTrackingAreas {
- [self updateTrackingArea:&leftTrackingArea_
- forCell:leftCell_
- withRect:[self leftCellRect]];
-
- [self updateTrackingArea:&rightTrackingArea_
- forCell:rightCell_
- withRect:[self rightCellRect]];
-}
-
-- (void)updateTrackingArea:(ui::ScopedCrTrackingArea*)trackingArea
- forCell:(id<ConstrainedWindowButtonDrawableCell>)cell
- withRect:(NSRect)rect {
- DCHECK(trackingArea);
- NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
- NSTrackingActiveInActiveApp;
- [self removeTrackingArea:trackingArea->get()];
- trackingArea->reset([[CrTrackingArea alloc] initWithRect:rect
- options:options
- owner:self
- userInfo:nil]);
- [self addTrackingArea:trackingArea->get()];
-}
-
-- (void)mouseEntered:(NSEvent*)theEvent {
- [self mouseMoved:theEvent];
-}
-
-- (void)mouseExited:(NSEvent*)theEvent {
- [self mouseMoved:theEvent];
-}
-
-- (void)mouseMoved:(NSEvent*)theEvent {
- MouseLocation location = [self mouseLocationForEvent:theEvent];
- [rightCell_ setIsMouseInside:NO];
- [leftCell_ setIsMouseInside:NO];
- if (location == kInsideLeftCell)
- [leftCell_ setIsMouseInside:YES];
- else if (location == kInsideRightCell)
- [rightCell_ setIsMouseInside:YES];
- [self setNeedsDisplay:YES];
-}
-
-- (void)mouseDown:(NSEvent*)theEvent {
- MouseLocation downLocation = [self mouseLocationForEvent:theEvent];
- NSCell* focusCell = nil;
- NSRect rect;
- if (downLocation == kInsideLeftCell) {
- focusCell = leftCell_.get();
- rect = [self leftCellRect];
- } else if (downLocation == kInsideRightCell) {
- focusCell = rightCell_.get();
- rect = [self rightCellRect];
- }
-
- do {
- MouseLocation location = [self mouseLocationForEvent:theEvent];
- if (location != kNotInside) {
- [focusCell setHighlighted:YES];
- [self setNeedsDisplay:YES];
-
- if ([focusCell trackMouse:theEvent
- inRect:rect
- ofView:self
- untilMouseUp:NO]) {
- [focusCell setState:![focusCell state]];
- [self setNeedsDisplay:YES];
- break;
- } else {
- // The above -trackMouse call returned NO, so we know that
- // the mouse left the cell before a mouse up event occurred.
- [focusCell setHighlighted:NO];
- [self setNeedsDisplay:YES];
- }
- }
- const NSUInteger mask = NSLeftMouseUpMask | NSLeftMouseDraggedMask;
- theEvent = [[self window] nextEventMatchingMask:mask];
- } while ([theEvent type] != NSLeftMouseUp);
-}
-
-- (MouseLocation)mouseLocationForEvent:(NSEvent*)theEvent {
- MouseLocation location = kNotInside;
- NSPoint mousePoint = [self convertPoint:[theEvent locationInWindow]
- fromView:nil];
- if ([self mouse:mousePoint inRect:[leftCell_ rect]])
- location = kInsideLeftCell;
- else if ([self mouse:mousePoint inRect:[self rightCellRect]])
- location = kInsideRightCell;
- return location;
-}
-
-- (void)sizeToFit {
- NSSize leftSize = [leftCell_ cellSize];
- NSSize rightSize = [rightCell_ cellSize];
- NSSize size = NSMakeSize(
- std::ceil(std::max(leftSize.width + rightSize.width,
- constrained_window_button::kButtonMinWidth)),
- std::ceil(std::max(leftSize.height, rightSize.height)));
- [self setFrameSize:size];
-}
-
-- (NSRect)leftCellRect {
- return [leftCell_ rect];
-}
-
-- (NSRect)rightCellRect {
- NSRect leftFrame, rightFrame;
- NSDivideRect([self bounds], &leftFrame, &rightFrame,
- NSWidth([self leftCellRect]), NSMinXEdge);
- return rightFrame;
-}
-
-// Accessor for Testing.
-- (NSMenu*)menu {
- return [rightCell_ menu];
-}
-
-@end
-
-@implementation SplitButtonTitleCell
-
-- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView *)controlView {
- DrawBezel(self, kRounded, kAngled, frame, controlView);
-}
-
-- (NSRect)rect {
- NSSize size = [self cellSize];
- return NSMakeRect(0, 0, std::ceil(size.width), std::ceil(size.height));
-}
-
-@end
-
-@implementation SplitButtonPopUpCell
-
-@synthesize isMouseInside = isMouseInside_;
-
-- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate {
- if (self = [super initTextCell:@"" pullsDown:YES]) {
- [self setControlSize:NSSmallControlSize];
- [self setArrowPosition:NSPopUpArrowAtCenter];
- [self setBordered:NO];
- [self setBackgroundColor:[NSColor clearColor]];
- menuModel_.reset(new ui::SimpleMenuModel(menuDelegate));
- menuModel_->AddItemWithStringId(0, IDS_PERMISSION_CUSTOMIZE);
- menuController_.reset(
- [[MenuController alloc] initWithModel:menuModel_.get()
- useWithPopUpButtonCell:NO]);
- [self setMenu:[menuController_ menu]];
- [self setUsesItemFromMenu:NO];
- }
- return self;
-}
-
-- (void)drawBorderAndBackgroundWithFrame:(NSRect)frame
- inView:(NSView*)controlView {
- // The arrow, which is what should be drawn by the base class, is drawn
- // during -drawBezelWithFrame. The only way to draw our own border with
- // the default arrow is to make the cell unbordered, and draw the border
- // from -drawBorderAndBackgroundWithFrame, rather than simply overriding
- // -drawBezelWithFrame.
- DrawBezel(self, kAngled, kRounded, frame, controlView);
- [super drawBorderAndBackgroundWithFrame:NSOffsetRect(frame, -4, 0)
- inView:controlView];
-}
-
-- (NSRect)rect {
- NSSize size = [self cellSize];
- return NSMakeRect(0, 0, std::ceil(size.width), std::ceil(size.height));
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698