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

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

Issue 2511973002: Reverse bookmark buttons and menus in RTL (Closed)
Patch Set: Use line width instead of hardcoding cell inset Created 4 years 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
« no previous file with comments | « chrome/browser/ui/cocoa/gradient_button_cell.h ('k') | chrome/browser/ui/cocoa/l10n_util.h » ('j') | 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 #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"
(...skipping 472 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 return [controlView cr_lineWidth];
495 }
496
493 // TODO(viettrungluu): clean this up. 497 // TODO(viettrungluu): clean this up.
494 // (Private) 498 // (Private)
495 - (void)getDrawParamsForFrame:(NSRect)cellFrame 499 - (void)getDrawParamsForFrame:(NSRect)cellFrame
496 inView:(NSView*)controlView 500 inView:(NSView*)controlView
497 innerFrame:(NSRect*)returnInnerFrame 501 innerFrame:(NSRect*)returnInnerFrame
498 innerPath:(NSBezierPath**)returnInnerPath 502 innerPath:(NSBezierPath**)returnInnerPath
499 clipPath:(NSBezierPath**)returnClipPath { 503 clipPath:(NSBezierPath**)returnClipPath {
500 const CGFloat kLineWidth = [controlView cr_lineWidth]; 504 const CGFloat lineWidth = [self insetInView:controlView];
501 const CGFloat kHalfLineWidth = kLineWidth / 2.0; 505 const CGFloat halfLineWidth = lineWidth / 2.0;
502 506
503 NSRect drawFrame = NSZeroRect; 507 NSRect drawFrame = NSZeroRect;
504 NSRect innerFrame = NSZeroRect; 508 NSRect innerFrame = NSZeroRect;
505 CGFloat cornerRadius = 2; 509 CGFloat cornerRadius = 2;
506 if (![self isMaterialDesignButtonType]) { 510 if (![self isMaterialDesignButtonType]) {
507 drawFrame = NSInsetRect(cellFrame, 1.5 * kLineWidth, 1.5 * kLineWidth); 511 drawFrame = NSInsetRect(cellFrame, 1.5 * lineWidth, 1.5 * lineWidth);
508 innerFrame = NSInsetRect(cellFrame, kLineWidth, kLineWidth); 512 innerFrame = NSInsetRect(cellFrame, lineWidth, lineWidth);
509 cornerRadius = 3; 513 cornerRadius = 3;
510 } else { 514 } else {
511 drawFrame = cellFrame; 515 drawFrame = cellFrame;
512 // Hover and click paths are always 20pt tall, regardless of the button's 516 // Hover and click paths are always 20pt tall, regardless of the button's
513 // height. 517 // height.
514 drawFrame.size.height = 20; 518 drawFrame.size.height = 20;
515 innerFrame = NSInsetRect(drawFrame, kLineWidth, kLineWidth); 519 innerFrame = NSInsetRect(drawFrame, lineWidth, lineWidth);
516 } 520 }
517 521
518 ButtonType type = [[(NSControl*)controlView cell] tag]; 522 ButtonType type = [[(NSControl*)controlView cell] tag];
519 switch (type) { 523 switch (type) {
520 case kMiddleButtonType: 524 case kMiddleButtonType:
521 drawFrame.size.width += 20; 525 drawFrame.size.width += 20;
522 innerFrame.size.width += 2; 526 innerFrame.size.width += 2;
523 // Fallthrough 527 // Fallthrough
524 case kRightButtonType: 528 case kRightButtonType:
525 drawFrame.origin.x -= 20; 529 drawFrame.origin.x -= 20;
(...skipping 17 matching lines...) Expand all
543 drawFrame.origin.y += 547 drawFrame.origin.y +=
544 [self hoverBackgroundVerticalOffsetInControlView:controlView]; 548 [self hoverBackgroundVerticalOffsetInControlView:controlView];
545 549
546 if ([self tag] == kMaterialMenuButtonTypeWithLimitedClickFeedback) { 550 if ([self tag] == kMaterialMenuButtonTypeWithLimitedClickFeedback) {
547 *returnInnerPath = [NSBezierPath bezierPathWithRect:drawFrame]; 551 *returnInnerPath = [NSBezierPath bezierPathWithRect:drawFrame];
548 } else { 552 } else {
549 *returnInnerPath = [NSBezierPath bezierPathWithRoundedRect:drawFrame 553 *returnInnerPath = [NSBezierPath bezierPathWithRoundedRect:drawFrame
550 xRadius:cornerRadius 554 xRadius:cornerRadius
551 yRadius:cornerRadius]; 555 yRadius:cornerRadius];
552 } 556 }
553 [*returnInnerPath setLineWidth:kLineWidth]; 557 [*returnInnerPath setLineWidth:lineWidth];
554 } 558 }
555 if (returnClipPath) { 559 if (returnClipPath) {
556 DCHECK(*returnClipPath == nil); 560 DCHECK(*returnClipPath == nil);
557 NSRect clipPathRect = 561 NSRect clipPathRect =
558 NSInsetRect(drawFrame, -kHalfLineWidth, -kHalfLineWidth); 562 NSInsetRect(drawFrame, -halfLineWidth, -halfLineWidth);
559 *returnClipPath = [NSBezierPath 563 *returnClipPath =
560 bezierPathWithRoundedRect:clipPathRect 564 [NSBezierPath bezierPathWithRoundedRect:clipPathRect
561 xRadius:cornerRadius + kHalfLineWidth 565 xRadius:cornerRadius + halfLineWidth
562 yRadius:cornerRadius + kHalfLineWidth]; 566 yRadius:cornerRadius + halfLineWidth];
563 } 567 }
564 } 568 }
565 569
566 // TODO(viettrungluu): clean this up. 570 // TODO(viettrungluu): clean this up.
567 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { 571 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
568 NSRect innerFrame; 572 NSRect innerFrame;
569 NSBezierPath* innerPath = nil; 573 NSBezierPath* innerPath = nil;
570 [self getDrawParamsForFrame:cellFrame 574 [self getDrawParamsForFrame:cellFrame
571 inView:controlView 575 inView:controlView
572 innerFrame:&innerFrame 576 innerFrame:&innerFrame
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 NSDivideRect(cellFrame, &gradientPart, &solidPart, gradientWidth, NSMaxXEdge); 740 NSDivideRect(cellFrame, &gradientPart, &solidPart, gradientWidth, NSMaxXEdge);
737 741
738 // Draw non-gradient part without transparency layer, as light text on a dark 742 // Draw non-gradient part without transparency layer, as light text on a dark
739 // background looks bad with a gradient layer. 743 // background looks bad with a gradient layer.
740 NSPoint textOffset = NSZeroPoint; 744 NSPoint textOffset = NSZeroPoint;
741 { 745 {
742 gfx::ScopedNSGraphicsContextSaveGState scopedGState; 746 gfx::ScopedNSGraphicsContextSaveGState scopedGState;
743 if (shouldClipTheTitle) 747 if (shouldClipTheTitle)
744 [NSBezierPath clipRect:solidPart]; 748 [NSBezierPath clipRect:solidPart];
745 749
746 CGFloat textLeft = [self textStartXOffset];
747 750
748 // For some reason, the height of cellFrame as passed in is totally bogus. 751 // 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 752 // For vertical centering purposes, we need the bounds of the containing
750 // view. 753 // view.
751 NSRect buttonFrame = [[self controlView] frame]; 754 NSRect buttonFrame = [[self controlView] frame];
752 755
753 // Call the vertical offset to match native NSButtonCell's version. 756 // Call the vertical offset to match native NSButtonCell's version.
754 textOffset = NSMakePoint(textLeft, 757 textOffset = NSMakePoint(
755 (NSHeight(buttonFrame) - size.height) / 2 + 758 NSMinX(cellFrame),
756 [self verticalTextOffset]); 759 (NSHeight(buttonFrame) - size.height) / 2 + [self verticalTextOffset]);
757 // WIth Material Design we want an ellipsis if the title is too long to fit, 760 // WIth Material Design we want an ellipsis if the title is too long to fit,
758 // so have to use drawInRect: instead of drawAtPoint:. 761 // so have to use drawInRect: instead of drawAtPoint:.
759 if (isModeMaterial) { 762 if (isModeMaterial) {
760 NSRect textBounds = NSMakeRect(textOffset.x, 763 NSRect textFrame = NSMakeRect(textOffset.x, textOffset.y,
761 textOffset.y, 764 NSWidth(cellFrame), NSHeight(buttonFrame));
762 NSWidth(buttonFrame) - textOffset.x, 765 [title drawInRect:textFrame];
763 NSHeight(buttonFrame));
764 [title drawInRect:textBounds];
765 } else { 766 } else {
766 [title drawAtPoint:textOffset]; 767 [title drawAtPoint:textOffset];
767 } 768 }
768 } 769 }
769 770
770 if (!shouldClipTheTitle) 771 if (!shouldClipTheTitle)
771 return cellFrame; 772 return cellFrame;
772 773
773 // Draw the gradient part with a transparency layer. This makes the text look 774 // Draw the gradient part with a transparency layer. This makes the text look
774 // suboptimal, but since it fades out, that's ok. 775 // suboptimal, but since it fades out, that's ok.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 options:options 846 options:options
846 owner:self 847 owner:self
847 userInfo:nil]); 848 userInfo:nil]);
848 if (isMouseInside_ != mouseInView) { 849 if (isMouseInside_ != mouseInView) {
849 [self setMouseInside:mouseInView animate:NO]; 850 [self setMouseInside:mouseInView animate:NO];
850 [controlView setNeedsDisplay:YES]; 851 [controlView setNeedsDisplay:YES];
851 } 852 }
852 } 853 }
853 854
854 @end 855 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/gradient_button_cell.h ('k') | chrome/browser/ui/cocoa/l10n_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698