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 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" | 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" |
6 | 6 |
7 #import <QuartzCore/QuartzCore.h> | 7 #import <QuartzCore/QuartzCore.h> |
8 | 8 |
9 #include <cmath> | 9 #include <cmath> |
10 #include <limits> | 10 #include <limits> |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 | 189 |
190 // Takes a normal bitmap and a mask image and returns an image the size of the | 190 // Takes a normal bitmap and a mask image and returns an image the size of the |
191 // mask that has pixels from |image| but alpha information from |mask|. | 191 // mask that has pixels from |image| but alpha information from |mask|. |
192 NSImage* ApplyMask(NSImage* image, NSImage* mask) { | 192 NSImage* ApplyMask(NSImage* image, NSImage* mask) { |
193 return [CreateImageWithSize([mask size], ^(NSSize size) { | 193 return [CreateImageWithSize([mask size], ^(NSSize size) { |
194 // Skip a few pixels from the top of the tab background gradient, because | 194 // Skip a few pixels from the top of the tab background gradient, because |
195 // the new tab button is not drawn at the very top of the browser window. | 195 // the new tab button is not drawn at the very top of the browser window. |
196 const int kYOffset = 10; | 196 const int kYOffset = 10; |
197 CGFloat width = size.width; | 197 CGFloat width = size.width; |
198 CGFloat height = size.height; | 198 CGFloat height = size.height; |
199 | |
199 // In some themes, the tab background image is narrower than the | 200 // In some themes, the tab background image is narrower than the |
200 // new tab button, so tile the background image. | 201 // new tab button, so tile the background image. |
201 NSDrawThreePartImage( | 202 CGFloat x = 0; |
202 NSMakeRect(0, -([image size].height - height - kYOffset), | 203 // The floor() is to make sure images with odd widths don't draw to the |
203 width, [image size].height), | 204 // same pixel twice on retina displays. (Using NSDrawThreePartImage() |
204 nil, image, nil, /*vertical=*/NO, NSCompositeCopy, | 205 // caused a startup perf regression, so that cannot be used.) |
205 1.0, /*flipped=*/NO); | 206 CGFloat tileWidth = floor(std::min(width, [image size].width)); |
207 while (x < width) { | |
208 [image drawAtPoint:NSMakePoint(x, 0) | |
209 fromRect:NSMakeRect(0, | |
210 [image size].height - height - kYOffset, | |
sail
2013/01/04 01:23:32
could cache this above as well
Nico
2013/01/04 01:29:51
That hopefully isn't necessary (because a) the com
| |
211 tileWidth, | |
212 height) | |
213 operation:NSCompositeCopy | |
214 fraction:1.0]; | |
215 x += tileWidth; | |
216 } | |
217 | |
206 [mask drawAtPoint:NSZeroPoint | 218 [mask drawAtPoint:NSZeroPoint |
207 fromRect:NSMakeRect(0, 0, width, height) | 219 fromRect:NSMakeRect(0, 0, width, height) |
208 operation:NSCompositeDestinationIn | 220 operation:NSCompositeDestinationIn |
209 fraction:1.0]; | 221 fraction:1.0]; |
210 }) autorelease]; | 222 }) autorelease]; |
211 } | 223 } |
212 | 224 |
213 // Paints |overlay| on top of |ground|. | 225 // Paints |overlay| on top of |ground|. |
214 NSImage* Overlay(NSImage* ground, NSImage* overlay) { | 226 NSImage* Overlay(NSImage* ground, NSImage* overlay) { |
215 DCHECK_EQ([ground size].width, [overlay size].width); | 227 DCHECK_EQ([ground size].width, [overlay size].width); |
(...skipping 2005 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2221 NSView* GetSheetParentViewForWebContents(WebContents* web_contents) { | 2233 NSView* GetSheetParentViewForWebContents(WebContents* web_contents) { |
2222 // View hierarchy of the contents view: | 2234 // View hierarchy of the contents view: |
2223 // NSView -- switchView, same for all tabs | 2235 // NSView -- switchView, same for all tabs |
2224 // +- NSView -- TabContentsController's view | 2236 // +- NSView -- TabContentsController's view |
2225 // +- TabContentsViewCocoa | 2237 // +- TabContentsViewCocoa |
2226 // | 2238 // |
2227 // Changing it? Do not forget to modify | 2239 // Changing it? Do not forget to modify |
2228 // -[TabStripController swapInTabAtIndex:] too. | 2240 // -[TabStripController swapInTabAtIndex:] too. |
2229 return [web_contents->GetNativeView() superview]; | 2241 return [web_contents->GetNativeView() superview]; |
2230 } | 2242 } |
OLD | NEW |