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 "ui/base/clipboard/clipboard_mac.h" | 5 #include "ui/base/clipboard/clipboard_mac.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <limits> | 10 #include <limits> |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 image.reset([[NSImage alloc] | 317 image.reset([[NSImage alloc] |
318 initWithContentsOfURL:[NSURL fileURLWithPath:[paths lastObject]]]); | 318 initWithContentsOfURL:[NSURL fileURLWithPath:[paths lastObject]]]); |
319 } | 319 } |
320 } else { | 320 } else { |
321 if (pb) | 321 if (pb) |
322 image.reset([[NSImage alloc] initWithPasteboard:pb]); | 322 image.reset([[NSImage alloc] initWithPasteboard:pb]); |
323 } | 323 } |
324 } @catch (id exception) { | 324 } @catch (id exception) { |
325 } | 325 } |
326 | 326 |
327 if (image.get()) { | 327 if (!image) |
328 if ([[image representations] count] == 1u) { | 328 return SkBitmap(); |
329 NSImageRep* rep = [[image representations] objectAtIndex:0]; | 329 if ([[image representations] count] == 0u) |
| 330 return SkBitmap(); |
| 331 |
| 332 // This logic prevents loss of pixels from retina images, where size != pixel |
| 333 // size. In an ideal world, the concept of "retina-ness" would be plumbed all |
| 334 // the way through to the web, but the clipboard API doesn't support the |
| 335 // additional metainformation. |
| 336 if ([[image representations] count] == 1u) { |
| 337 NSImageRep* rep = [[image representations] objectAtIndex:0]; |
| 338 NSInteger width = [rep pixelsWide]; |
| 339 NSInteger height = [rep pixelsHigh]; |
| 340 if (width != 0 && height != 0) { |
330 return skia::NSImageRepToSkBitmapWithColorSpace( | 341 return skia::NSImageRepToSkBitmapWithColorSpace( |
331 rep, NSMakeSize([rep pixelsWide], [rep pixelsHigh]), | 342 rep, NSMakeSize(width, height), /*is_opaque=*/false, |
332 /*is_opaque=*/false, base::mac::GetSystemColorSpace()); | 343 base::mac::GetSystemColorSpace()); |
333 } | 344 } |
334 return skia::NSImageToSkBitmapWithColorSpace( | |
335 image.get(), /*is_opaque=*/false, base::mac::GetSystemColorSpace()); | |
336 } | 345 } |
337 return SkBitmap(); | 346 return skia::NSImageToSkBitmapWithColorSpace( |
| 347 image.get(), /*is_opaque=*/false, base::mac::GetSystemColorSpace()); |
338 } | 348 } |
339 | 349 |
340 SkBitmap ClipboardMac::ReadImage(ClipboardType type) const { | 350 SkBitmap ClipboardMac::ReadImage(ClipboardType type) const { |
341 return ReadImage(type, GetPasteboard()); | 351 return ReadImage(type, GetPasteboard()); |
342 } | 352 } |
343 | 353 |
344 void ClipboardMac::ReadCustomData(ClipboardType clipboard_type, | 354 void ClipboardMac::ReadCustomData(ClipboardType clipboard_type, |
345 const base::string16& type, | 355 const base::string16& type, |
346 base::string16* result) const { | 356 base::string16* result) const { |
347 DCHECK(CalledOnValidThread()); | 357 DCHECK(CalledOnValidThread()); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 // Write an extra flavor that signifies WebKit was the last to modify the | 473 // Write an extra flavor that signifies WebKit was the last to modify the |
464 // pasteboard. This flavor has no data. | 474 // pasteboard. This flavor has no data. |
465 void ClipboardMac::WriteWebSmartPaste() { | 475 void ClipboardMac::WriteWebSmartPaste() { |
466 NSPasteboard* pb = GetPasteboard(); | 476 NSPasteboard* pb = GetPasteboard(); |
467 NSString* format = GetWebKitSmartPasteFormatType().ToNSString(); | 477 NSString* format = GetWebKitSmartPasteFormatType().ToNSString(); |
468 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; | 478 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; |
469 [pb setData:nil forType:format]; | 479 [pb setData:nil forType:format]; |
470 } | 480 } |
471 | 481 |
472 } // namespace ui | 482 } // namespace ui |
OLD | NEW |