OLD | NEW |
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 #include "base/mac/mac_util.h" |
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 innerFrame:&innerFrame | 521 innerFrame:&innerFrame |
522 innerPath:&innerPath | 522 innerPath:&innerPath |
523 clipPath:NULL]; | 523 clipPath:NULL]; |
524 | 524 |
525 BOOL pressed = ([((NSControl*)[self controlView]) isEnabled] && | 525 BOOL pressed = ([((NSControl*)[self controlView]) isEnabled] && |
526 [self isHighlighted]); | 526 [self isHighlighted]); |
527 NSWindow* window = [controlView window]; | 527 NSWindow* window = [controlView window]; |
528 const ui::ThemeProvider* themeProvider = [window themeProvider]; | 528 const ui::ThemeProvider* themeProvider = [window themeProvider]; |
529 BOOL active = [window isKeyWindow] || [window isMainWindow]; | 529 BOOL active = [window isKeyWindow] || [window isMainWindow]; |
530 | 530 |
531 // Draw custom focus ring only if AppKit won't draw one automatically. | |
532 // The new focus ring APIs became available with 10.7, but did not get | |
533 // applied to buttons (only editable text fields) until 10.8. | |
534 BOOL shouldDrawFocusRing = base::mac::IsOSLionOrEarlier() && | |
535 [self showsFirstResponder]; | |
536 | |
537 // Stroke the borders and appropriate fill gradient. If we're borderless, the | 531 // Stroke the borders and appropriate fill gradient. If we're borderless, the |
538 // only time we want to draw the inner gradient is if we're highlighted or if | 532 // only time we want to draw the inner gradient is if we're highlighted or if |
539 // we're drawing the focus ring manually. | 533 // we're drawing the focus ring manually. |
540 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || | 534 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || |
541 pressed || | 535 pressed || [self isMouseInside] || [self isContinuousPulsing]) { |
542 [self isMouseInside] || | |
543 [self isContinuousPulsing] || | |
544 shouldDrawFocusRing) { | |
545 | |
546 // When pulsing we want the bookmark to stand out a little more. | 536 // When pulsing we want the bookmark to stand out a little more. |
547 BOOL showClickedGradient = pressed || | 537 BOOL showClickedGradient = pressed || |
548 (pulseState_ == gradient_button_cell::kPulsingContinuous); | 538 (pulseState_ == gradient_button_cell::kPulsingContinuous); |
549 | 539 |
550 [self drawBorderAndFillForTheme:themeProvider | 540 [self drawBorderAndFillForTheme:themeProvider |
551 controlView:controlView | 541 controlView:controlView |
552 innerPath:innerPath | 542 innerPath:innerPath |
553 showClickedGradient:showClickedGradient | 543 showClickedGradient:showClickedGradient |
554 showHighlightGradient:[self isHighlighted] | 544 showHighlightGradient:[self isHighlighted] |
555 hoverAlpha:[self hoverAlpha] | 545 hoverAlpha:[self hoverAlpha] |
(...skipping 11 matching lines...) Expand all Loading... |
567 NSColor* stroke = themeProvider ? themeProvider->GetNSColor( | 557 NSColor* stroke = themeProvider ? themeProvider->GetNSColor( |
568 active ? ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE : | 558 active ? ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE : |
569 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) : | 559 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) : |
570 [NSColor blackColor]; | 560 [NSColor blackColor]; |
571 | 561 |
572 [[stroke colorWithAlphaComponent:0.2] set]; | 562 [[stroke colorWithAlphaComponent:0.2] set]; |
573 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2), | 563 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2), |
574 NSCompositeSourceOver); | 564 NSCompositeSourceOver); |
575 } | 565 } |
576 [self drawInteriorWithFrame:innerFrame inView:controlView]; | 566 [self drawInteriorWithFrame:innerFrame inView:controlView]; |
577 | |
578 if (shouldDrawFocusRing) { | |
579 gfx::ScopedNSGraphicsContextSaveGState scoped_state; | |
580 const CGFloat lineWidth = [controlView cr_lineWidth]; | |
581 // insetX = 1.0 is used for the drawing of blue highlight so that this | |
582 // highlight won't be too near the bookmark toolbar itself, in case we | |
583 // draw bookmark buttons in bookmark toolbar. | |
584 rect_path_utils::FrameRectWithInset(rect_path_utils::RoundedCornerAll, | |
585 NSInsetRect(cellFrame, 0, lineWidth), | |
586 1.0, // insetX | |
587 0.0, // insetY | |
588 3.0, // outerRadius | |
589 lineWidth * 2, // lineWidth | |
590 [controlView | |
591 cr_keyboardFocusIndicatorColor]); | |
592 } | |
593 } | 567 } |
594 | 568 |
595 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { | 569 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { |
596 const CGFloat lineWidth = [controlView cr_lineWidth]; | 570 const CGFloat lineWidth = [controlView cr_lineWidth]; |
597 | 571 |
598 if (shouldTheme_) { | 572 if (shouldTheme_) { |
599 BOOL isTemplate = [[self image] isTemplate]; | 573 BOOL isTemplate = [[self image] isTemplate]; |
600 | 574 |
601 gfx::ScopedNSGraphicsContextSaveGState scopedGState; | 575 gfx::ScopedNSGraphicsContextSaveGState scopedGState; |
602 | 576 |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 options:options | 760 options:options |
787 owner:self | 761 owner:self |
788 userInfo:nil]); | 762 userInfo:nil]); |
789 if (isMouseInside_ != mouseInView) { | 763 if (isMouseInside_ != mouseInView) { |
790 [self setMouseInside:mouseInView animate:NO]; | 764 [self setMouseInside:mouseInView animate:NO]; |
791 [controlView setNeedsDisplay:YES]; | 765 [controlView setNeedsDisplay:YES]; |
792 } | 766 } |
793 } | 767 } |
794 | 768 |
795 @end | 769 @end |
OLD | NEW |