Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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.h" | 5 #include "ui/base/clipboard/clipboard.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 146 // For now, spit out the image as a TIFF. | 146 // For now, spit out the image as a TIFF. |
| 147 NSPasteboard* pb = GetPasteboard(); | 147 NSPasteboard* pb = GetPasteboard(); |
| 148 [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil]; | 148 [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil]; |
| 149 NSData *tiff_data = [image TIFFRepresentation]; | 149 NSData *tiff_data = [image TIFFRepresentation]; |
| 150 LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard"; | 150 LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard"; |
| 151 if (tiff_data) { | 151 if (tiff_data) { |
| 152 [pb setData:tiff_data forType:NSTIFFPboardType]; | 152 [pb setData:tiff_data forType:NSTIFFPboardType]; |
| 153 } | 153 } |
| 154 } | 154 } |
| 155 | 155 |
| 156 void Clipboard::WriteData(const char* format_name, size_t format_len, | |
| 157 const char* data_data, size_t data_len) { | |
| 158 NSPasteboard* pb = GetPasteboard(); | |
| 159 NSString* format = [[NSString alloc] initWithBytes:format_name | |
| 160 length:format_len | |
| 161 encoding:NSUTF8StringEncoding]; | |
| 162 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; | |
| 163 [pb setData:[NSData dataWithBytes:data_data length:data_len] | |
| 164 forType:format]; | |
| 165 } | |
| 166 | |
| 156 // Write an extra flavor that signifies WebKit was the last to modify the | 167 // Write an extra flavor that signifies WebKit was the last to modify the |
| 157 // pasteboard. This flavor has no data. | 168 // pasteboard. This flavor has no data. |
| 158 void Clipboard::WriteWebSmartPaste() { | 169 void Clipboard::WriteWebSmartPaste() { |
| 159 NSPasteboard* pb = GetPasteboard(); | 170 NSPasteboard* pb = GetPasteboard(); |
| 160 NSString* format = base::SysUTF8ToNSString(GetWebKitSmartPasteFormatType()); | 171 NSString* format = base::SysUTF8ToNSString(GetWebKitSmartPasteFormatType()); |
| 161 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; | 172 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; |
| 162 [pb setData:nil forType:format]; | 173 [pb setData:nil forType:format]; |
| 163 } | 174 } |
| 164 | 175 |
| 165 uint64 Clipboard::GetSequenceNumber(Buffer buffer) { | 176 uint64 Clipboard::GetSequenceNumber(Buffer buffer) { |
| 166 DCHECK_EQ(buffer, BUFFER_STANDARD); | 177 DCHECK_EQ(buffer, BUFFER_STANDARD); |
| 167 | 178 |
| 168 NSPasteboard* pb = GetPasteboard(); | 179 NSPasteboard* pb = GetPasteboard(); |
| 169 return [pb changeCount]; | 180 return [pb changeCount]; |
| 170 } | 181 } |
| 171 | 182 |
| 172 bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, | 183 bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, |
| 173 Clipboard::Buffer buffer) const { | 184 Buffer buffer) const { |
| 174 DCHECK_EQ(buffer, BUFFER_STANDARD); | 185 DCHECK_EQ(buffer, BUFFER_STANDARD); |
| 175 NSString* format_ns = base::SysUTF8ToNSString(format); | 186 NSString* format_ns = base::SysUTF8ToNSString(format); |
| 176 | 187 |
| 177 NSPasteboard* pb = GetPasteboard(); | 188 NSPasteboard* pb = GetPasteboard(); |
| 178 NSArray* types = [pb types]; | 189 NSArray* types = [pb types]; |
| 179 | 190 |
| 180 // Safari only places RTF on the pasteboard, never HTML. We can convert RTF | 191 // Safari only places RTF on the pasteboard, never HTML. We can convert RTF |
| 181 // to HTML, so the presence of either indicates success when looking for HTML. | 192 // to HTML, so the presence of either indicates success when looking for HTML. |
| 182 if ([format_ns isEqualToString:NSHTMLPboardType]) { | 193 if ([format_ns isEqualToString:NSHTMLPboardType]) { |
| 183 return [types containsObject:NSHTMLPboardType] || | 194 return [types containsObject:NSHTMLPboardType] || |
| 184 [types containsObject:NSRTFPboardType]; | 195 [types containsObject:NSRTFPboardType]; |
| 185 } | 196 } |
| 186 return [types containsObject:format_ns]; | 197 return [types containsObject:format_ns]; |
| 187 } | 198 } |
| 188 | 199 |
| 200 bool Clipboard::IsFormatAvailableByString(const std::string& format, | |
| 201 Buffer buffer) const { | |
| 202 DCHECK_EQ(buffer, BUFFER_STANDARD); | |
| 203 NSString* format_ns = base::SysUTF8ToNSString(format); | |
| 204 | |
| 205 NSPasteboard* pb = GetPasteboard(); | |
| 206 NSArray* types = [pb types]; | |
| 207 | |
| 208 return [types containsObject:format_ns]; | |
| 209 } | |
| 210 | |
| 189 void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer, | 211 void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer, |
| 190 std::vector<string16>* types, | 212 std::vector<string16>* types, |
| 191 bool* contains_filenames) const { | 213 bool* contains_filenames) const { |
| 192 if (!types || !contains_filenames) { | 214 if (!types || !contains_filenames) { |
| 193 NOTREACHED(); | 215 NOTREACHED(); |
| 194 return; | 216 return; |
| 195 } | 217 } |
| 196 | 218 |
| 197 types->clear(); | 219 types->clear(); |
| 198 if (IsFormatAvailable(Clipboard::GetPlainTextFormatType(), buffer)) | 220 if (IsFormatAvailable(Clipboard::GetPlainTextFormatType(), buffer)) |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 335 | 357 |
| 336 NSPasteboard* pb = GetPasteboard(); | 358 NSPasteboard* pb = GetPasteboard(); |
| 337 NSArray* fileList = [pb propertyListForType:NSFilenamesPboardType]; | 359 NSArray* fileList = [pb propertyListForType:NSFilenamesPboardType]; |
| 338 | 360 |
| 339 for (unsigned int i = 0; i < [fileList count]; ++i) { | 361 for (unsigned int i = 0; i < [fileList count]; ++i) { |
| 340 std::string file = [[fileList objectAtIndex:i] UTF8String]; | 362 std::string file = [[fileList objectAtIndex:i] UTF8String]; |
| 341 files->push_back(FilePath(file)); | 363 files->push_back(FilePath(file)); |
| 342 } | 364 } |
| 343 } | 365 } |
| 344 | 366 |
| 367 void Clipboard::ReadData(const std::string& format, std::string* result) const { | |
| 368 NSPasteboard* pb = GetPasteboard(); | |
| 369 NSData* data = [pb dataForType:base::SysUTF8ToNSString(format)]; | |
| 370 if ([data length]) | |
| 371 result->assign(reinterpret_cast<const char*>([data bytes]), [data length]); | |
|
tony
2011/12/05 18:56:09
Nit: I think you can static_cast here.
dcheng
2011/12/05 19:53:03
Done.
| |
| 372 } | |
| 373 | |
| 345 // static | 374 // static |
| 346 Clipboard::FormatType Clipboard::GetUrlFormatType() { | 375 Clipboard::FormatType Clipboard::GetUrlFormatType() { |
| 347 return base::SysNSStringToUTF8(NSURLPboardType); | 376 return base::SysNSStringToUTF8(NSURLPboardType); |
| 348 } | 377 } |
| 349 | 378 |
| 350 // static | 379 // static |
| 351 Clipboard::FormatType Clipboard::GetUrlWFormatType() { | 380 Clipboard::FormatType Clipboard::GetUrlWFormatType() { |
| 352 return base::SysNSStringToUTF8(NSURLPboardType); | 381 return base::SysNSStringToUTF8(NSURLPboardType); |
| 353 } | 382 } |
| 354 | 383 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 381 Clipboard::FormatType Clipboard::GetBitmapFormatType() { | 410 Clipboard::FormatType Clipboard::GetBitmapFormatType() { |
| 382 return base::SysNSStringToUTF8(NSTIFFPboardType); | 411 return base::SysNSStringToUTF8(NSTIFFPboardType); |
| 383 } | 412 } |
| 384 | 413 |
| 385 // static | 414 // static |
| 386 Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() { | 415 Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() { |
| 387 return base::SysNSStringToUTF8(kWebSmartPastePboardType); | 416 return base::SysNSStringToUTF8(kWebSmartPastePboardType); |
| 388 } | 417 } |
| 389 | 418 |
| 390 } // namespace ui | 419 } // namespace ui |
| OLD | NEW |