| 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" | |
| 11 #import "base/mac/scoped_nsobject.h" | 10 #import "base/mac/scoped_nsobject.h" |
| 12 #import "chrome/browser/themes/theme_properties.h" | 11 #import "chrome/browser/themes/theme_properties.h" |
| 13 #import "chrome/browser/themes/theme_service.h" | 12 #import "chrome/browser/themes/theme_service.h" |
| 14 #import "chrome/browser/ui/cocoa/rect_path_utils.h" | 13 #import "chrome/browser/ui/cocoa/rect_path_utils.h" |
| 15 #import "chrome/browser/ui/cocoa/themed_window.h" | 14 #import "chrome/browser/ui/cocoa/themed_window.h" |
| 16 #include "grit/theme_resources.h" | 15 #include "grit/theme_resources.h" |
| 17 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSColor+Luminance.h" | 16 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSColor+Luminance.h" |
| 18 #import "ui/base/cocoa/nsgraphics_context_additions.h" | 17 #import "ui/base/cocoa/nsgraphics_context_additions.h" |
| 19 #import "ui/base/cocoa/nsview_additions.h" | 18 #import "ui/base/cocoa/nsview_additions.h" |
| 20 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | 19 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 innerFrame:&innerFrame | 520 innerFrame:&innerFrame |
| 522 innerPath:&innerPath | 521 innerPath:&innerPath |
| 523 clipPath:NULL]; | 522 clipPath:NULL]; |
| 524 | 523 |
| 525 BOOL pressed = ([((NSControl*)[self controlView]) isEnabled] && | 524 BOOL pressed = ([((NSControl*)[self controlView]) isEnabled] && |
| 526 [self isHighlighted]); | 525 [self isHighlighted]); |
| 527 NSWindow* window = [controlView window]; | 526 NSWindow* window = [controlView window]; |
| 528 const ui::ThemeProvider* themeProvider = [window themeProvider]; | 527 const ui::ThemeProvider* themeProvider = [window themeProvider]; |
| 529 BOOL active = [window isKeyWindow] || [window isMainWindow]; | 528 BOOL active = [window isKeyWindow] || [window isMainWindow]; |
| 530 | 529 |
| 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 | 530 // 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 | 531 // only time we want to draw the inner gradient is if we're highlighted or if |
| 539 // we're drawing the focus ring manually. | 532 // we're drawing the focus ring manually. |
| 540 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || | 533 if (([self isBordered] && ![self showsBorderOnlyWhileMouseInside]) || |
| 541 pressed || | 534 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. | 535 // When pulsing we want the bookmark to stand out a little more. |
| 547 BOOL showClickedGradient = pressed || | 536 BOOL showClickedGradient = pressed || |
| 548 (pulseState_ == gradient_button_cell::kPulsingContinuous); | 537 (pulseState_ == gradient_button_cell::kPulsingContinuous); |
| 549 | 538 |
| 550 [self drawBorderAndFillForTheme:themeProvider | 539 [self drawBorderAndFillForTheme:themeProvider |
| 551 controlView:controlView | 540 controlView:controlView |
| 552 innerPath:innerPath | 541 innerPath:innerPath |
| 553 showClickedGradient:showClickedGradient | 542 showClickedGradient:showClickedGradient |
| 554 showHighlightGradient:[self isHighlighted] | 543 showHighlightGradient:[self isHighlighted] |
| 555 hoverAlpha:[self hoverAlpha] | 544 hoverAlpha:[self hoverAlpha] |
| (...skipping 11 matching lines...) Expand all Loading... |
| 567 NSColor* stroke = themeProvider ? themeProvider->GetNSColor( | 556 NSColor* stroke = themeProvider ? themeProvider->GetNSColor( |
| 568 active ? ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE : | 557 active ? ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE : |
| 569 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) : | 558 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) : |
| 570 [NSColor blackColor]; | 559 [NSColor blackColor]; |
| 571 | 560 |
| 572 [[stroke colorWithAlphaComponent:0.2] set]; | 561 [[stroke colorWithAlphaComponent:0.2] set]; |
| 573 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2), | 562 NSRectFillUsingOperation(NSInsetRect(borderRect, 0, 2), |
| 574 NSCompositeSourceOver); | 563 NSCompositeSourceOver); |
| 575 } | 564 } |
| 576 [self drawInteriorWithFrame:innerFrame inView:controlView]; | 565 [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 } | 566 } |
| 594 | 567 |
| 595 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { | 568 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { |
| 596 const CGFloat lineWidth = [controlView cr_lineWidth]; | 569 const CGFloat lineWidth = [controlView cr_lineWidth]; |
| 597 | 570 |
| 598 if (shouldTheme_) { | 571 if (shouldTheme_) { |
| 599 BOOL isTemplate = [[self image] isTemplate]; | 572 BOOL isTemplate = [[self image] isTemplate]; |
| 600 | 573 |
| 601 gfx::ScopedNSGraphicsContextSaveGState scopedGState; | 574 gfx::ScopedNSGraphicsContextSaveGState scopedGState; |
| 602 | 575 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 786 options:options | 759 options:options |
| 787 owner:self | 760 owner:self |
| 788 userInfo:nil]); | 761 userInfo:nil]); |
| 789 if (isMouseInside_ != mouseInView) { | 762 if (isMouseInside_ != mouseInView) { |
| 790 [self setMouseInside:mouseInView animate:NO]; | 763 [self setMouseInside:mouseInView animate:NO]; |
| 791 [controlView setNeedsDisplay:YES]; | 764 [controlView setNeedsDisplay:YES]; |
| 792 } | 765 } |
| 793 } | 766 } |
| 794 | 767 |
| 795 @end | 768 @end |
| OLD | NEW |