// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #import "chrome/browser/ui/cocoa/download/download_show_all_button.h" #include "base/logging.h" #import "chrome/browser/ui/cocoa/download/download_show_all_cell.h" #import "chrome/browser/ui/cocoa/view_id_util.h" #include "grit/theme_resources.h" #import "ui/base/cocoa/nsview_additions.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/image/image.h" @implementation DownloadShowAllButton - (void)awakeFromNib { DCHECK([[self cell] isKindOfClass:[DownloadShowAllCell class]]); ResourceBundle& rb = ResourceBundle::GetSharedInstance(); NSImage* favicon = rb.GetNativeImageNamed(IDR_DOWNLOADS_FAVICON).ToNSImage(); [self setImage:favicon]; } // GTM's layout tweaker calls sizeToFit to receive the desired width of views. // By default, buttons will be only 14px high, but the Show All button needs to // be higher. - (void)sizeToFit { NSRect oldRect = [self frame]; [super sizeToFit]; NSRect newRect = [self frame]; // Keep old height. newRect.origin.y = oldRect.origin.y; newRect.size.height = oldRect.size.height; [self setFrame:newRect]; } - (BOOL)isOpaque { // Make this control opaque so that sub-pixel anti-aliasing works when // CoreAnimation is enabled. return YES; } - (void)drawRect:(NSRect)rect { NSView* downloadShelfView = [self ancestorWithViewID:VIEW_ID_DOWNLOAD_SHELF]; // Previously the show all button used cr_drawUsingAncestor:inRect: to use // the download shelf to draw its background. However when the download // shelf has zero height, the shelf's drawing methods don't work as expected // because they constrain their drawing to the shelf's bounds rect. This // situation occurs sometimes when the shelf is about to become visible, // and the result is a very dark show all button // // To work around this problem, we'll call a variant of that method which // does restrict drawing to the ancestor view's bounds. [self cr_drawUsingAncestor:downloadShelfView inRect:rect clippedToAncestorBounds:NO]; [super drawRect:rect]; } // ThemedWindowDrawing implementation. - (void)windowDidChangeTheme { [self setNeedsDisplay:YES]; } - (void)windowDidChangeActive { [self setNeedsDisplay:YES]; } @end