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

Side by Side Diff: chrome/browser/ui/cocoa/tabs/tab_view.mm

Issue 11791030: mac: New asset for the tabstrip border, tweak drawing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: round2 Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/cocoa/tabs/tab_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/tabs/tab_view.h" 5 #import "chrome/browser/ui/cocoa/tabs/tab_view.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/themes/theme_service.h" 8 #include "chrome/browser/themes/theme_service.h"
9 #import "chrome/browser/ui/cocoa/nsview_additions.h" 9 #import "chrome/browser/ui/cocoa/nsview_additions.h"
10 #import "chrome/browser/ui/cocoa/tabs/tab_controller.h" 10 #import "chrome/browser/ui/cocoa/tabs/tab_controller.h"
11 #import "chrome/browser/ui/cocoa/tabs/tab_window_controller.h" 11 #import "chrome/browser/ui/cocoa/tabs/tab_window_controller.h"
12 #import "chrome/browser/ui/cocoa/themed_window.h" 12 #import "chrome/browser/ui/cocoa/themed_window.h"
13 #import "chrome/browser/ui/cocoa/view_id_util.h" 13 #import "chrome/browser/ui/cocoa/view_id_util.h"
14 #include "grit/generated_resources.h" 14 #include "grit/generated_resources.h"
15 #include "grit/theme_resources.h" 15 #include "grit/theme_resources.h"
16 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/resource/resource_bundle.h" 17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" 18 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
19 19
20 #if !defined(MAC_OS_X_VERSION_10_7) || \ 20 #if !defined(MAC_OS_X_VERSION_10_7) || \
21 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 21 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
22 @interface NSWindow (LionAPI) 22 @interface NSWindow (LionAPI)
23 - (CGFloat)backingScaleFactor; 23 - (CGFloat)backingScaleFactor;
24 @end 24 @end
25 #endif 25 #endif
26 26
27 namespace {
28
29 const int kMaskHeight = 29; // Height of the mask bitmap. 27 const int kMaskHeight = 29; // Height of the mask bitmap.
30 const int kFillHeight = 25; // Height of the "mask on" part of the mask bitmap. 28 const int kFillHeight = 25; // Height of the "mask on" part of the mask bitmap.
31 29
32 30
33 // Constants for inset and control points for tab shape. 31 // Constants for inset and control points for tab shape.
34 const CGFloat kInsetMultiplier = 2.0/3.0; 32 const CGFloat kInsetMultiplier = 2.0/3.0;
35 const CGFloat kControlPoint1Multiplier = 1.0/3.0; 33 const CGFloat kControlPoint1Multiplier = 1.0/3.0;
36 const CGFloat kControlPoint2Multiplier = 3.0/8.0; 34 const CGFloat kControlPoint2Multiplier = 3.0/8.0;
37 35
38 // The amount of time in seconds during which each type of glow increases, holds 36 // The amount of time in seconds during which each type of glow increases, holds
39 // steady, and decreases, respectively. 37 // steady, and decreases, respectively.
40 const NSTimeInterval kHoverShowDuration = 0.2; 38 const NSTimeInterval kHoverShowDuration = 0.2;
41 const NSTimeInterval kHoverHoldDuration = 0.02; 39 const NSTimeInterval kHoverHoldDuration = 0.02;
42 const NSTimeInterval kHoverHideDuration = 0.4; 40 const NSTimeInterval kHoverHideDuration = 0.4;
43 const NSTimeInterval kAlertShowDuration = 0.4; 41 const NSTimeInterval kAlertShowDuration = 0.4;
44 const NSTimeInterval kAlertHoldDuration = 0.4; 42 const NSTimeInterval kAlertHoldDuration = 0.4;
45 const NSTimeInterval kAlertHideDuration = 0.4; 43 const NSTimeInterval kAlertHideDuration = 0.4;
46 44
47 // The default time interval in seconds between glow updates (when 45 // The default time interval in seconds between glow updates (when
48 // increasing/decreasing). 46 // increasing/decreasing).
49 const NSTimeInterval kGlowUpdateInterval = 0.025; 47 const NSTimeInterval kGlowUpdateInterval = 0.025;
50 48
51 // This is used to judge whether the mouse has moved during rapid closure; if it 49 // This is used to judge whether the mouse has moved during rapid closure; if it
52 // has moved less than the threshold, we want to close the tab. 50 // has moved less than the threshold, we want to close the tab.
53 const CGFloat kRapidCloseDist = 2.5; 51 const CGFloat kRapidCloseDist = 2.5;
54 52
55 } // namespace
56
57 @interface TabView(Private) 53 @interface TabView(Private)
58 54
59 - (void)resetLastGlowUpdateTime; 55 - (void)resetLastGlowUpdateTime;
60 - (NSTimeInterval)timeElapsedSinceLastGlowUpdate; 56 - (NSTimeInterval)timeElapsedSinceLastGlowUpdate;
61 - (void)adjustGlowValue; 57 - (void)adjustGlowValue;
62 - (CGImageRef)tabClippingMask; 58 - (CGImageRef)tabClippingMask;
63 59
64 @end // TabView(Private) 60 @end // TabView(Private)
65 61
66 @implementation TabView 62 @implementation TabView
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 static_cast<ThemeService*>([[self window] themeProvider]); 316 static_cast<ThemeService*>([[self window] themeProvider]);
321 [context setPatternPhase:[[self window] themePatternPhase]]; 317 [context setPatternPhase:[[self window] themePatternPhase]];
322 318
323 319
324 CGImageRef mask([self tabClippingMask]); 320 CGImageRef mask([self tabClippingMask]);
325 CGRect maskBounds = CGRectMake(0, 0, maskCacheWidth_, kMaskHeight); 321 CGRect maskBounds = CGRectMake(0, 0, maskCacheWidth_, kMaskHeight);
326 CGContextClipToMask(cgContext, maskBounds, mask); 322 CGContextClipToMask(cgContext, maskBounds, mask);
327 323
328 bool selected = [self state]; 324 bool selected = [self state];
329 325
326 // Background tabs should not paint over the tab strip separator, which is
327 // two pixels high in both lodpi and hidpi.
328 if (!selected && dirtyRect.origin.y < 1)
329 dirtyRect.origin.y = 2 * [self cr_lineWidth];
330
330 bool usingDefaultTheme = themeProvider && themeProvider->UsingDefaultTheme(); 331 bool usingDefaultTheme = themeProvider && themeProvider->UsingDefaultTheme();
331 NSColor* backgroundImageColor = [self backgroundColorForSelected:selected]; 332 NSColor* backgroundImageColor = [self backgroundColorForSelected:selected];
332 333
333 // Don't draw the window/tab bar background when selected, since the tab 334 // Don't draw the window/tab bar background when selected, since the tab
334 // background overlay drawn over it (see below) will be fully opaque. 335 // background overlay drawn over it (see below) will be fully opaque.
335 if (!selected) { 336 if (!selected) {
336 [backgroundImageColor set]; 337 [backgroundImageColor set];
337 // Themes can have partially transparent images. NSRectFill() is measurably 338 // Themes can have partially transparent images. NSRectFill() is measurably
338 // faster though, so call it for the known-safe default theme. 339 // faster though, so call it for the known-safe default theme.
339 if (usingDefaultTheme) 340 if (usingDefaultTheme)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 options:NSGradientDrawsBeforeStartingLocation]; 399 options:NSGradientDrawsBeforeStartingLocation];
399 } 400 }
400 } 401 }
401 402
402 CGContextEndTransparencyLayer(cgContext); 403 CGContextEndTransparencyLayer(cgContext);
403 } 404 }
404 } 405 }
405 406
406 // Draws the tab outline. 407 // Draws the tab outline.
407 - (void)drawStroke:(NSRect)dirtyRect { 408 - (void)drawStroke:(NSRect)dirtyRect {
409 BOOL focused = [[self window] isKeyWindow] || [[self window] isMainWindow];
410 CGFloat alpha = focused ? 1.0 : tabs::kImageNoFocusAlpha;
411
408 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 412 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
409 float height = 413 float height =
410 [rb.GetNativeImageNamed(IDR_TAB_ACTIVE_LEFT).ToNSImage() size].height; 414 [rb.GetNativeImageNamed(IDR_TAB_ACTIVE_LEFT).ToNSImage() size].height;
411 if ([controller_ active]) { 415 if ([controller_ active]) {
412 NSDrawThreePartImage(NSMakeRect(0, 0, NSWidth([self bounds]), height), 416 NSDrawThreePartImage(NSMakeRect(0, 0, NSWidth([self bounds]), height),
413 rb.GetNativeImageNamed(IDR_TAB_ACTIVE_LEFT).ToNSImage(), 417 rb.GetNativeImageNamed(IDR_TAB_ACTIVE_LEFT).ToNSImage(),
414 rb.GetNativeImageNamed(IDR_TAB_ACTIVE_CENTER).ToNSImage(), 418 rb.GetNativeImageNamed(IDR_TAB_ACTIVE_CENTER).ToNSImage(),
415 rb.GetNativeImageNamed(IDR_TAB_ACTIVE_RIGHT).ToNSImage(), 419 rb.GetNativeImageNamed(IDR_TAB_ACTIVE_RIGHT).ToNSImage(),
416 /*vertical=*/NO, 420 /*vertical=*/NO,
417 NSCompositeSourceOver, 421 NSCompositeSourceOver,
418 1.0, 422 alpha,
419 /*flipped=*/NO); 423 /*flipped=*/NO);
420 } else { 424 } else {
421 NSDrawThreePartImage(NSMakeRect(0, 0, NSWidth([self bounds]), height), 425 NSDrawThreePartImage(NSMakeRect(0, 0, NSWidth([self bounds]), height),
422 rb.GetNativeImageNamed(IDR_TAB_INACTIVE_LEFT).ToNSImage(), 426 rb.GetNativeImageNamed(IDR_TAB_INACTIVE_LEFT).ToNSImage(),
423 rb.GetNativeImageNamed(IDR_TAB_INACTIVE_CENTER).ToNSImage(), 427 rb.GetNativeImageNamed(IDR_TAB_INACTIVE_CENTER).ToNSImage(),
424 rb.GetNativeImageNamed(IDR_TAB_INACTIVE_RIGHT).ToNSImage(), 428 rb.GetNativeImageNamed(IDR_TAB_INACTIVE_RIGHT).ToNSImage(),
425 /*vertical=*/NO, 429 /*vertical=*/NO,
426 NSCompositeSourceOver, 430 NSCompositeSourceOver,
427 1.0, 431 alpha,
428 /*flipped=*/NO); 432 /*flipped=*/NO);
429 } 433 }
430 } 434 }
431 435
432 - (void)drawRect:(NSRect)dirtyRect { 436 - (void)drawRect:(NSRect)dirtyRect {
433 // Text, close button, and image are drawn by subviews. 437 // Text, close button, and image are drawn by subviews.
434 [self drawFill:dirtyRect]; 438 [self drawFill:dirtyRect];
435 [self drawStroke:dirtyRect]; 439 [self drawStroke:dirtyRect];
436 } 440 }
437 441
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 CGFloat middleWidth = tabWidth - leftWidth - rightWidth; 696 CGFloat middleWidth = tabWidth - leftWidth - rightWidth;
693 NSRect middleRect = NSMakeRect(leftWidth, 0, middleWidth, kFillHeight); 697 NSRect middleRect = NSMakeRect(leftWidth, 0, middleWidth, kFillHeight);
694 [[NSColor whiteColor] setFill]; 698 [[NSColor whiteColor] setFill];
695 NSRectFill(middleRect); 699 NSRectFill(middleRect);
696 700
697 maskCache_.reset(CGBitmapContextCreateImage(maskContext)); 701 maskCache_.reset(CGBitmapContextCreateImage(maskContext));
698 return maskCache_; 702 return maskCache_;
699 } 703 }
700 704
701 @end // @implementation TabView(Private) 705 @end // @implementation TabView(Private)
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/tabs/tab_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698