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

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

Issue 2845003003: [Mac] Reverse bookmark buttons and menus in RTL (take 2) (Closed)
Patch Set: Go back to hardcoding image y offset Created 3 years, 7 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.
Elly Fong-Jones 2017/05/03 17:03:14 this might be a dumb question but now that we do M
lgrey 2017/05/03 21:32:48 I'd like to but Find Bar still uses it. We discuss
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 #import "base/mac/scoped_nsobject.h" 10 #import "base/mac/scoped_nsobject.h"
11 #import "chrome/browser/themes/theme_properties.h" 11 #import "chrome/browser/themes/theme_properties.h"
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) : 483 ThemeProperties::COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE) :
484 [NSColor colorWithCalibratedWhite:0.0 484 [NSColor colorWithCalibratedWhite:0.0
485 alpha:0.3 * outerStrokeAlphaMult_]; 485 alpha:0.3 * outerStrokeAlphaMult_];
486 } 486 }
487 [strokeColor setStroke]; 487 [strokeColor setStroke];
488 488
489 [innerPath setLineWidth:1]; 489 [innerPath setLineWidth:1];
490 [innerPath stroke]; 490 [innerPath stroke];
491 } 491 }
492 492
493 - (CGFloat)insetInView:(NSView*)controlView {
494 if (!controlView)
Elly Fong-Jones 2017/05/03 17:03:14 can that happen?
lgrey 2017/05/03 21:32:48 I think this was vestigial from a class method cal
495 return [[NSScreen mainScreen] convertRectToBacking:NSMakeRect(0, 0, 1, 1)]
496 .size.width;
497 return [controlView cr_lineWidth];
498 }
499
493 // TODO(viettrungluu): clean this up. 500 // TODO(viettrungluu): clean this up.
494 // (Private) 501 // (Private)
495 - (void)getDrawParamsForFrame:(NSRect)cellFrame 502 - (void)getDrawParamsForFrame:(NSRect)cellFrame
496 inView:(NSView*)controlView 503 inView:(NSView*)controlView
497 innerFrame:(NSRect*)returnInnerFrame 504 innerFrame:(NSRect*)returnInnerFrame
498 innerPath:(NSBezierPath**)returnInnerPath 505 innerPath:(NSBezierPath**)returnInnerPath
499 clipPath:(NSBezierPath**)returnClipPath { 506 clipPath:(NSBezierPath**)returnClipPath {
500 const CGFloat kLineWidth = [controlView cr_lineWidth]; 507 const CGFloat lineWidth = [self insetInView:controlView];
501 const CGFloat kHalfLineWidth = kLineWidth / 2.0; 508 const CGFloat halfLineWidth = lineWidth / 2.0;
502 509
503 NSRect drawFrame = NSZeroRect; 510 NSRect drawFrame = NSZeroRect;
504 NSRect innerFrame = NSZeroRect; 511 NSRect innerFrame = NSZeroRect;
505 CGFloat cornerRadius = 2; 512 CGFloat cornerRadius = 2;
506 if (![self isMaterialDesignButtonType]) { 513 if (![self isMaterialDesignButtonType]) {
507 drawFrame = NSInsetRect(cellFrame, 1.5 * kLineWidth, 1.5 * kLineWidth); 514 drawFrame = NSInsetRect(cellFrame, 1.5 * lineWidth, 1.5 * lineWidth);
508 innerFrame = NSInsetRect(cellFrame, kLineWidth, kLineWidth); 515 innerFrame = NSInsetRect(cellFrame, lineWidth, lineWidth);
509 cornerRadius = 3; 516 cornerRadius = 3;
510 } else { 517 } else {
511 drawFrame = cellFrame; 518 drawFrame = cellFrame;
512 // Hover and click paths are always 20pt tall, regardless of the button's 519 // Hover and click paths are always 20pt tall, regardless of the button's
513 // height. 520 // height.
514 drawFrame.size.height = 20; 521 drawFrame.size.height = 20;
515 innerFrame = NSInsetRect(drawFrame, kLineWidth, kLineWidth); 522 innerFrame = NSInsetRect(drawFrame, lineWidth, lineWidth);
516 } 523 }
517 524
518 ButtonType type = [[(NSControl*)controlView cell] tag]; 525 ButtonType type = [[(NSControl*)controlView cell] tag];
519 switch (type) { 526 switch (type) {
520 case kMiddleButtonType: 527 case kMiddleButtonType:
521 drawFrame.size.width += 20; 528 drawFrame.size.width += 20;
522 innerFrame.size.width += 2; 529 innerFrame.size.width += 2;
523 // Fallthrough 530 // Fallthrough
524 case kRightButtonType: 531 case kRightButtonType:
525 drawFrame.origin.x -= 20; 532 drawFrame.origin.x -= 20;
(...skipping 17 matching lines...) Expand all
543 drawFrame.origin.y += 550 drawFrame.origin.y +=
544 [self hoverBackgroundVerticalOffsetInControlView:controlView]; 551 [self hoverBackgroundVerticalOffsetInControlView:controlView];
545 552
546 if ([self tag] == kMaterialMenuButtonTypeWithLimitedClickFeedback) { 553 if ([self tag] == kMaterialMenuButtonTypeWithLimitedClickFeedback) {
547 *returnInnerPath = [NSBezierPath bezierPathWithRect:drawFrame]; 554 *returnInnerPath = [NSBezierPath bezierPathWithRect:drawFrame];
548 } else { 555 } else {
549 *returnInnerPath = [NSBezierPath bezierPathWithRoundedRect:drawFrame 556 *returnInnerPath = [NSBezierPath bezierPathWithRoundedRect:drawFrame
550 xRadius:cornerRadius 557 xRadius:cornerRadius
551 yRadius:cornerRadius]; 558 yRadius:cornerRadius];
552 } 559 }
553 [*returnInnerPath setLineWidth:kLineWidth]; 560 [*returnInnerPath setLineWidth:lineWidth];
554 } 561 }
555 if (returnClipPath) { 562 if (returnClipPath) {
556 DCHECK(*returnClipPath == nil); 563 DCHECK(*returnClipPath == nil);
557 NSRect clipPathRect = 564 NSRect clipPathRect =
558 NSInsetRect(drawFrame, -kHalfLineWidth, -kHalfLineWidth); 565 NSInsetRect(drawFrame, -halfLineWidth, -halfLineWidth);
559 *returnClipPath = [NSBezierPath 566 *returnClipPath =
560 bezierPathWithRoundedRect:clipPathRect 567 [NSBezierPath bezierPathWithRoundedRect:clipPathRect
561 xRadius:cornerRadius + kHalfLineWidth 568 xRadius:cornerRadius + halfLineWidth
562 yRadius:cornerRadius + kHalfLineWidth]; 569 yRadius:cornerRadius + halfLineWidth];
563 } 570 }
564 } 571 }
565 572
566 // TODO(viettrungluu): clean this up. 573 // TODO(viettrungluu): clean this up.
567 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { 574 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
568 NSRect innerFrame; 575 NSRect innerFrame;
569 NSBezierPath* innerPath = nil; 576 NSBezierPath* innerPath = nil;
570 [self getDrawParamsForFrame:cellFrame 577 [self getDrawParamsForFrame:cellFrame
571 inView:controlView 578 inView:controlView
572 innerFrame:&innerFrame 579 innerFrame:&innerFrame
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 NSDivideRect(cellFrame, &gradientPart, &solidPart, gradientWidth, NSMaxXEdge); 743 NSDivideRect(cellFrame, &gradientPart, &solidPart, gradientWidth, NSMaxXEdge);
737 744
738 // Draw non-gradient part without transparency layer, as light text on a dark 745 // Draw non-gradient part without transparency layer, as light text on a dark
739 // background looks bad with a gradient layer. 746 // background looks bad with a gradient layer.
740 NSPoint textOffset = NSZeroPoint; 747 NSPoint textOffset = NSZeroPoint;
741 { 748 {
742 gfx::ScopedNSGraphicsContextSaveGState scopedGState; 749 gfx::ScopedNSGraphicsContextSaveGState scopedGState;
743 if (shouldClipTheTitle) 750 if (shouldClipTheTitle)
744 [NSBezierPath clipRect:solidPart]; 751 [NSBezierPath clipRect:solidPart];
745 752
746 CGFloat textLeft = [self textStartXOffset];
747 753
748 // For some reason, the height of cellFrame as passed in is totally bogus. 754 // For some reason, the height of cellFrame as passed in is totally bogus.
749 // For vertical centering purposes, we need the bounds of the containing 755 // For vertical centering purposes, we need the bounds of the containing
750 // view. 756 // view.
751 NSRect buttonFrame = [[self controlView] frame]; 757 NSRect buttonFrame = [[self controlView] frame];
752 758
753 // Call the vertical offset to match native NSButtonCell's version. 759 // Call the vertical offset to match native NSButtonCell's version.
754 textOffset = NSMakePoint(textLeft, 760 textOffset = NSMakePoint(
755 (NSHeight(buttonFrame) - size.height) / 2 + 761 NSMinX(cellFrame),
756 [self verticalTextOffset]); 762 (NSHeight(buttonFrame) - size.height) / 2 + [self verticalTextOffset]);
757 // WIth Material Design we want an ellipsis if the title is too long to fit, 763 // WIth Material Design we want an ellipsis if the title is too long to fit,
758 // so have to use drawInRect: instead of drawAtPoint:. 764 // so have to use drawInRect: instead of drawAtPoint:.
759 if (isModeMaterial) { 765 if (isModeMaterial) {
760 NSRect textBounds = NSMakeRect(textOffset.x, 766 NSRect textFrame = NSMakeRect(textOffset.x, textOffset.y,
761 textOffset.y, 767 NSWidth(cellFrame), NSHeight(buttonFrame));
762 NSWidth(buttonFrame) - textOffset.x, 768 [title drawInRect:textFrame];
763 NSHeight(buttonFrame));
764 [title drawInRect:textBounds];
765 } else { 769 } else {
766 [title drawAtPoint:textOffset]; 770 [title drawAtPoint:textOffset];
767 } 771 }
768 } 772 }
769 773
770 if (!shouldClipTheTitle) 774 if (!shouldClipTheTitle)
771 return cellFrame; 775 return cellFrame;
772 776
773 // Draw the gradient part with a transparency layer. This makes the text look 777 // Draw the gradient part with a transparency layer. This makes the text look
774 // suboptimal, but since it fades out, that's ok. 778 // suboptimal, but since it fades out, that's ok.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 options:options 849 options:options
846 owner:self 850 owner:self
847 userInfo:nil]); 851 userInfo:nil]);
848 if (isMouseInside_ != mouseInView) { 852 if (isMouseInside_ != mouseInView) {
849 [self setMouseInside:mouseInView animate:NO]; 853 [self setMouseInside:mouseInView animate:NO];
850 [controlView setNeedsDisplay:YES]; 854 [controlView setNeedsDisplay:YES];
851 } 855 }
852 } 856 }
853 857
854 @end 858 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698