| Index: chrome/browser/ui/cocoa/tab_strip_view.mm
|
| ===================================================================
|
| --- chrome/browser/ui/cocoa/tab_strip_view.mm (revision 71805)
|
| +++ chrome/browser/ui/cocoa/tab_strip_view.mm (working copy)
|
| @@ -1,211 +0,0 @@
|
| -// Copyright (c) 2010 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/tab_strip_view.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/mac/mac_util.h"
|
| -#include "chrome/browser/themes/browser_theme_provider.h"
|
| -#import "chrome/browser/ui/cocoa/browser_window_controller.h"
|
| -#import "chrome/browser/ui/cocoa/tab_strip_controller.h"
|
| -#import "chrome/browser/ui/cocoa/view_id_util.h"
|
| -
|
| -@implementation TabStripView
|
| -
|
| -@synthesize newTabButton = newTabButton_;
|
| -@synthesize dropArrowShown = dropArrowShown_;
|
| -@synthesize dropArrowPosition = dropArrowPosition_;
|
| -
|
| -- (id)initWithFrame:(NSRect)frame {
|
| - self = [super initWithFrame:frame];
|
| - if (self) {
|
| - // Set lastMouseUp_ = -1000.0 so that timestamp-lastMouseUp_ is big unless
|
| - // lastMouseUp_ has been reset.
|
| - lastMouseUp_ = -1000.0;
|
| -
|
| - // Register to be an URL drop target.
|
| - dropHandler_.reset([[URLDropTargetHandler alloc] initWithView:self]);
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -// Draw bottom border (a dark border and light highlight). Each tab is
|
| -// responsible for mimicking this bottom border, unless it's the selected
|
| -// tab.
|
| -- (void)drawBorder:(NSRect)bounds {
|
| - NSRect borderRect, contentRect;
|
| -
|
| - borderRect = bounds;
|
| - borderRect.origin.y = 1;
|
| - borderRect.size.height = 1;
|
| - [[NSColor colorWithCalibratedWhite:0.0 alpha:0.2] set];
|
| - NSRectFillUsingOperation(borderRect, NSCompositeSourceOver);
|
| - NSDivideRect(bounds, &borderRect, &contentRect, 1, NSMinYEdge);
|
| -
|
| - BrowserThemeProvider* themeProvider =
|
| - static_cast<BrowserThemeProvider*>([[self window] themeProvider]);
|
| - if (!themeProvider)
|
| - return;
|
| -
|
| - NSColor* bezelColor = themeProvider->GetNSColor(
|
| - themeProvider->UsingDefaultTheme() ?
|
| - BrowserThemeProvider::COLOR_TOOLBAR_BEZEL :
|
| - BrowserThemeProvider::COLOR_TOOLBAR, true);
|
| - [bezelColor set];
|
| - NSRectFill(borderRect);
|
| - NSRectFillUsingOperation(borderRect, NSCompositeSourceOver);
|
| -}
|
| -
|
| -- (void)drawRect:(NSRect)rect {
|
| - NSRect boundsRect = [self bounds];
|
| -
|
| - [self drawBorder:boundsRect];
|
| -
|
| - // Draw drop-indicator arrow (if appropriate).
|
| - // TODO(viettrungluu): this is all a stop-gap measure.
|
| - if ([self dropArrowShown]) {
|
| - // Programmer art: an arrow parametrized by many knobs. Note that the arrow
|
| - // points downwards (so understand "width" and "height" accordingly).
|
| -
|
| - // How many (pixels) to inset on the top/bottom.
|
| - const CGFloat kArrowTopInset = 1.5;
|
| - const CGFloat kArrowBottomInset = 1;
|
| -
|
| - // What proportion of the vertical space is dedicated to the arrow tip,
|
| - // i.e., (arrow tip height)/(amount of vertical space).
|
| - const CGFloat kArrowTipProportion = 0.5;
|
| -
|
| - // This is a slope, i.e., (arrow tip height)/(0.5 * arrow tip width).
|
| - const CGFloat kArrowTipSlope = 1.2;
|
| -
|
| - // What proportion of the arrow tip width is the stem, i.e., (stem
|
| - // width)/(arrow tip width).
|
| - const CGFloat kArrowStemProportion = 0.33;
|
| -
|
| - NSPoint arrowTipPos = [self dropArrowPosition];
|
| - arrowTipPos.y += kArrowBottomInset; // Inset on the bottom.
|
| -
|
| - // Height we have to work with (insetting on the top).
|
| - CGFloat availableHeight =
|
| - NSMaxY(boundsRect) - arrowTipPos.y - kArrowTopInset;
|
| - DCHECK(availableHeight >= 5);
|
| -
|
| - // Based on the knobs above, calculate actual dimensions which we'll need
|
| - // for drawing.
|
| - CGFloat arrowTipHeight = kArrowTipProportion * availableHeight;
|
| - CGFloat arrowTipWidth = 2 * arrowTipHeight / kArrowTipSlope;
|
| - CGFloat arrowStemHeight = availableHeight - arrowTipHeight;
|
| - CGFloat arrowStemWidth = kArrowStemProportion * arrowTipWidth;
|
| - CGFloat arrowStemInset = (arrowTipWidth - arrowStemWidth) / 2;
|
| -
|
| - // The line width is arbitrary, but our path really should be mitered.
|
| - NSBezierPath* arrow = [NSBezierPath bezierPath];
|
| - [arrow setLineJoinStyle:NSMiterLineJoinStyle];
|
| - [arrow setLineWidth:1];
|
| -
|
| - // Define the arrow's shape! We start from the tip and go clockwise.
|
| - [arrow moveToPoint:arrowTipPos];
|
| - [arrow relativeLineToPoint:NSMakePoint(-arrowTipWidth / 2, arrowTipHeight)];
|
| - [arrow relativeLineToPoint:NSMakePoint(arrowStemInset, 0)];
|
| - [arrow relativeLineToPoint:NSMakePoint(0, arrowStemHeight)];
|
| - [arrow relativeLineToPoint:NSMakePoint(arrowStemWidth, 0)];
|
| - [arrow relativeLineToPoint:NSMakePoint(0, -arrowStemHeight)];
|
| - [arrow relativeLineToPoint:NSMakePoint(arrowStemInset, 0)];
|
| - [arrow closePath];
|
| -
|
| - // Draw and fill the arrow.
|
| - [[NSColor colorWithCalibratedWhite:0 alpha:0.67] set];
|
| - [arrow stroke];
|
| - [[NSColor colorWithCalibratedWhite:1 alpha:0.67] setFill];
|
| - [arrow fill];
|
| - }
|
| -}
|
| -
|
| -// YES if a double-click in the background of the tab strip minimizes the
|
| -// window.
|
| -- (BOOL)doubleClickMinimizesWindow {
|
| - return YES;
|
| -}
|
| -
|
| -// We accept first mouse so clicks onto close/zoom/miniaturize buttons and
|
| -// title bar double-clicks are properly detected even when the window is in the
|
| -// background.
|
| -- (BOOL)acceptsFirstMouse:(NSEvent*)event {
|
| - return YES;
|
| -}
|
| -
|
| -// Trap double-clicks and make them miniaturize the browser window.
|
| -- (void)mouseUp:(NSEvent*)event {
|
| - // Bail early if double-clicks are disabled.
|
| - if (![self doubleClickMinimizesWindow]) {
|
| - [super mouseUp:event];
|
| - return;
|
| - }
|
| -
|
| - NSInteger clickCount = [event clickCount];
|
| - NSTimeInterval timestamp = [event timestamp];
|
| -
|
| - // Double-clicks on Zoom/Close/Mininiaturize buttons shouldn't cause
|
| - // miniaturization. For those, we miss the first click but get the second
|
| - // (with clickCount == 2!). We thus check that we got a first click shortly
|
| - // before (measured up-to-up) a double-click. Cocoa doesn't have a documented
|
| - // way of getting the proper interval (= (double-click-threshold) +
|
| - // (drag-threshold); the former is Carbon GetDblTime()/60.0 or
|
| - // com.apple.mouse.doubleClickThreshold [undocumented]). So we hard-code
|
| - // "short" as 0.8 seconds. (Measuring up-to-up isn't enough to properly
|
| - // detect double-clicks, but we're actually using Cocoa for that.)
|
| - if (clickCount == 2 && (timestamp - lastMouseUp_) < 0.8) {
|
| - if (base::mac::ShouldWindowsMiniaturizeOnDoubleClick())
|
| - [[self window] performMiniaturize:self];
|
| - } else {
|
| - [super mouseUp:event];
|
| - }
|
| -
|
| - // If clickCount is 0, the drag threshold was passed.
|
| - lastMouseUp_ = (clickCount == 1) ? timestamp : -1000.0;
|
| -}
|
| -
|
| -// (URLDropTarget protocol)
|
| -- (id<URLDropTargetController>)urlDropController {
|
| - BrowserWindowController* windowController = [[self window] windowController];
|
| - DCHECK([windowController isKindOfClass:[BrowserWindowController class]]);
|
| - return [windowController tabStripController];
|
| -}
|
| -
|
| -// (URLDropTarget protocol)
|
| -- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender {
|
| - return [dropHandler_ draggingEntered:sender];
|
| -}
|
| -
|
| -// (URLDropTarget protocol)
|
| -- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender {
|
| - return [dropHandler_ draggingUpdated:sender];
|
| -}
|
| -
|
| -// (URLDropTarget protocol)
|
| -- (void)draggingExited:(id<NSDraggingInfo>)sender {
|
| - return [dropHandler_ draggingExited:sender];
|
| -}
|
| -
|
| -// (URLDropTarget protocol)
|
| -- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
|
| - return [dropHandler_ performDragOperation:sender];
|
| -}
|
| -
|
| -- (BOOL)accessibilityIsIgnored {
|
| - return NO;
|
| -}
|
| -
|
| -- (id)accessibilityAttributeValue:(NSString*)attribute {
|
| - if ([attribute isEqual:NSAccessibilityRoleAttribute])
|
| - return NSAccessibilityGroupRole;
|
| -
|
| - return [super accessibilityAttributeValue:attribute];
|
| -}
|
| -
|
| -- (ViewID)viewID {
|
| - return VIEW_ID_TAB_STRIP;
|
| -}
|
| -
|
| -@end
|
|
|