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

Side by Side Diff: chrome/browser/ui/cocoa/gradient_button_cell.mm

Issue 1327203003: Mac: Fix missing focus rings on toolbar, profile, and tab buttons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2490
Patch Set: Created 5 years, 3 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
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 #include "chrome/browser/ui/cocoa/gradient_button_cell.h" 5 #include "chrome/browser/ui/cocoa/gradient_button_cell.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/mac/mac_util.h"
10 #import "base/mac/scoped_nsobject.h" 11 #import "base/mac/scoped_nsobject.h"
11 #import "chrome/browser/themes/theme_properties.h" 12 #import "chrome/browser/themes/theme_properties.h"
12 #import "chrome/browser/themes/theme_service.h" 13 #import "chrome/browser/themes/theme_service.h"
13 #import "chrome/browser/ui/cocoa/rect_path_utils.h" 14 #import "chrome/browser/ui/cocoa/rect_path_utils.h"
14 #import "chrome/browser/ui/cocoa/themed_window.h" 15 #import "chrome/browser/ui/cocoa/themed_window.h"
15 #include "grit/theme_resources.h" 16 #include "grit/theme_resources.h"
16 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSColor+Luminance.h" 17 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSColor+Luminance.h"
17 #import "ui/base/cocoa/nsgraphics_context_additions.h" 18 #import "ui/base/cocoa/nsgraphics_context_additions.h"
18 #import "ui/base/cocoa/nsview_additions.h" 19 #import "ui/base/cocoa/nsview_additions.h"
19 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" 20 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 innerFrame:&innerFrame 522 innerFrame:&innerFrame
522 innerPath:&innerPath 523 innerPath:&innerPath
523 clipPath:NULL]; 524 clipPath:NULL];
524 525
525 BOOL pressed = ([((NSControl*)[self controlView]) isEnabled] && 526 BOOL pressed = ([((NSControl*)[self controlView]) isEnabled] &&
526 [self isHighlighted]); 527 [self isHighlighted]);
527 NSWindow* window = [controlView window]; 528 NSWindow* window = [controlView window];
528 ui::ThemeProvider* themeProvider = [window themeProvider]; 529 ui::ThemeProvider* themeProvider = [window themeProvider];
529 BOOL active = [window isKeyWindow] || [window isMainWindow]; 530 BOOL active = [window isKeyWindow] || [window isMainWindow];
530 531
532 // Draw custom focus ring only if AppKit won't draw one automatically.
533 // The new focus ring APIs became available with 10.7, but did not get
534 // applied to buttons (only editable text fields) until 10.8.
535 BOOL shouldDrawFocusRing = base::mac::IsOSLionOrEarlier() &&
536 [self showsFirstResponder];
537
531 // Stroke the borders and appropriate fill gradient. If we're borderless, the 538 // Stroke the borders and appropriate fill gradient. If we're borderless, the
532 // only time we want to draw the inner gradient is if we're highlighted or if 539 // only time we want to draw the inner gradient is if we're highlighted or if
533 // we're the first responder (when "Full Keyboard Access" is turned on). 540 // we're drawing the focus ring manually.
534 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || 541 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) ||
535 pressed || 542 pressed ||
536 [self isMouseInside] || 543 [self isMouseInside] ||
537 [self isContinuousPulsing] || 544 [self isContinuousPulsing] ||
538 [self showsFirstResponder]) { 545 shouldDrawFocusRing) {
539 546
540 // When pulsing we want the bookmark to stand out a little more. 547 // When pulsing we want the bookmark to stand out a little more.
541 BOOL showClickedGradient = pressed || 548 BOOL showClickedGradient = pressed ||
542 (pulseState_ == gradient_button_cell::kPulsingContinuous); 549 (pulseState_ == gradient_button_cell::kPulsingContinuous);
543 550
544 [self drawBorderAndFillForTheme:themeProvider 551 [self drawBorderAndFillForTheme:themeProvider
545 controlView:controlView 552 controlView:controlView
546 innerPath:innerPath 553 innerPath:innerPath
547 showClickedGradient:showClickedGradient 554 showClickedGradient:showClickedGradient
548 showHighlightGradient:[self isHighlighted] 555 showHighlightGradient:[self isHighlighted]
(...skipping 13 matching lines...) Expand all
562 active ? ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE : 569 active ? ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE :
563 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) : 570 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) :
564 [NSColor blackColor]; 571 [NSColor blackColor];
565 572
566 [[stroke colorWithAlphaComponent:0.2] set]; 573 [[stroke colorWithAlphaComponent:0.2] set];
567 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2), 574 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2),
568 NSCompositeSourceOver); 575 NSCompositeSourceOver);
569 } 576 }
570 [self drawInteriorWithFrame:innerFrame inView:controlView]; 577 [self drawInteriorWithFrame:innerFrame inView:controlView];
571 578
572 // Draws the blue focus ring. 579 if (shouldDrawFocusRing) {
573 if ([self showsFirstResponder]) {
574 gfx::ScopedNSGraphicsContextSaveGState scoped_state; 580 gfx::ScopedNSGraphicsContextSaveGState scoped_state;
575 const CGFloat lineWidth = [controlView cr_lineWidth]; 581 const CGFloat lineWidth = [controlView cr_lineWidth];
576 // insetX = 1.0 is used for the drawing of blue highlight so that this 582 // insetX = 1.0 is used for the drawing of blue highlight so that this
577 // highlight won't be too near the bookmark toolbar itself, in case we 583 // highlight won't be too near the bookmark toolbar itself, in case we
578 // draw bookmark buttons in bookmark toolbar. 584 // draw bookmark buttons in bookmark toolbar.
579 rect_path_utils::FrameRectWithInset(rect_path_utils::RoundedCornerAll, 585 rect_path_utils::FrameRectWithInset(rect_path_utils::RoundedCornerAll,
580 NSInsetRect(cellFrame, 0, lineWidth), 586 NSInsetRect(cellFrame, 0, lineWidth),
581 1.0, // insetX 587 1.0, // insetX
582 0.0, // insetY 588 0.0, // insetY
583 3.0, // outerRadius 589 3.0, // outerRadius
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 options:options 787 options:options
782 owner:self 788 owner:self
783 userInfo:nil]); 789 userInfo:nil]);
784 if (isMouseInside_ != mouseInView) { 790 if (isMouseInside_ != mouseInView) {
785 [self setMouseInside:mouseInView animate:NO]; 791 [self setMouseInside:mouseInView animate:NO];
786 [controlView setNeedsDisplay:YES]; 792 [controlView setNeedsDisplay:YES];
787 } 793 }
788 } 794 }
789 795
790 @end 796 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/extensions/browser_action_button.mm ('k') | chrome/browser/ui/cocoa/hover_close_button.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698