90 CALL_PB_STATIC_JSTROBJ_METHOD(jstr); 91 92 return jstr ? String(env, jstr) : String(); 93 } 94 95 void jWritePlainText(const String& plainText) 96 { 97 DEFINE_PB_STATIC_METHOD("writePlainText", "(Ljava/lang/String;)V"); 98 CALL_PB_STATIC_VOID_METHOD((jstring)plainText.toJavaString(env)); 99 } 100 101 void jWriteSelection(bool canSmartCopyOrDelete, const String& plainText, const String& markup) 102 { 103 DEFINE_PB_STATIC_METHOD("writeSelection", "(ZLjava/lang/String;Ljava/lang/String;)V"); 104 CALL_PB_STATIC_VOID_METHOD( 105 bool_to_jbool(canSmartCopyOrDelete), 106 (jstring)plainText.toJavaString(env), 107 (jstring)markup.toJavaString(env)); 108 } 109 110 void jWriteImage(const Image& image) 111 { 112 DEFINE_PB_STATIC_METHOD("writeImage", "(Lcom/sun/webkit/graphics/WCImageFrame;)V"); 113 CALL_PB_STATIC_VOID_METHOD(jobject(*const_cast<Image&>(image).javaImage())); 114 } 115 116 void jWriteURL(const String& url, const String& markup) 117 { 118 DEFINE_PB_STATIC_METHOD("writeUrl", "(Ljava/lang/String;Ljava/lang/String;)V"); 119 CALL_PB_STATIC_VOID_METHOD( 120 (jstring)url.toJavaString(env), 121 (jstring)markup.toJavaString(env)); 122 } 123 124 String jGetHtml() 125 { 126 DEFINE_PB_STATIC_METHOD("getHtml", "()Ljava/lang/String;"); 127 CALL_PB_STATIC_JSTROBJ_METHOD(jstr); 128 129 return jstr ? String(env, jstr) : String(); 130 } 131 132 /////////////////// 133 // Helper functions 309 String markup(urlToMarkup(pasteboardURL.url, title)); 310 311 m_dataObject->clear(); 312 m_dataObject->setURL(pasteboardURL.url, title); 313 m_dataObject->setPlainText(pasteboardURL.url.string()); 314 m_dataObject->setHTML(markup, pasteboardURL.url); 315 316 if (m_copyPasteMode) { 317 jWriteURL(pasteboardURL.url.string(), markup); 318 } 319 } 320 321 void Pasteboard::writeImage(Element& node, const URL& url, const String& title) 322 { 323 m_dataObject->setURL(url, title); 324 325 // Write the bytes of the image to the file format 326 writeImageToDataObject(m_dataObject, node, url); 327 328 AtomicString imageURL = node.getAttribute(HTMLNames::srcAttr); 329 if (!imageURL.isEmpty()) { 330 String fullURL = node.document().completeURL(stripLeadingAndTrailingHTMLSpaces(imageURL)); 331 if (!fullURL.isEmpty()) { 332 m_dataObject->setHTML( 333 imageToMarkup(fullURL, node), 334 node.document().url()); 335 } 336 } 337 if (m_copyPasteMode) { 338 CachedImage* cachedImage = getCachedImage(node); 339 // CachedImage not exist 340 if (!cachedImage) { 341 return; 342 } 343 344 Image* image = cachedImage->image(); 345 // Image data not exist 346 if (!image) { 347 return; 348 } 349 350 // SVGImage are not Bitmap backed, Let the receiving end decode the svg image 351 // based on url and its markup 352 if (image->isSVGImage()) { 353 jWriteURL(url.string(), createMarkup(node)); 354 } 355 else { 356 jWriteImage(*image); 357 } 358 } 359 } 360 361 void Pasteboard::writeString(const String& type, const String& data) 362 { 363 // DnD only mode 364 if (m_dataObject) { 365 m_dataObject->setData(type, data); 366 } 367 } 368 369 String Pasteboard::readString(const String& type) 370 { 371 // DnD only mode 372 if (m_dataObject) { 373 return m_dataObject->getData(type); 374 } 375 return String(); 376 } | 90 CALL_PB_STATIC_JSTROBJ_METHOD(jstr); 91 92 return jstr ? String(env, jstr) : String(); 93 } 94 95 void jWritePlainText(const String& plainText) 96 { 97 DEFINE_PB_STATIC_METHOD("writePlainText", "(Ljava/lang/String;)V"); 98 CALL_PB_STATIC_VOID_METHOD((jstring)plainText.toJavaString(env)); 99 } 100 101 void jWriteSelection(bool canSmartCopyOrDelete, const String& plainText, const String& markup) 102 { 103 DEFINE_PB_STATIC_METHOD("writeSelection", "(ZLjava/lang/String;Ljava/lang/String;)V"); 104 CALL_PB_STATIC_VOID_METHOD( 105 bool_to_jbool(canSmartCopyOrDelete), 106 (jstring)plainText.toJavaString(env), 107 (jstring)markup.toJavaString(env)); 108 } 109 110 void jWriteImage(const Image& image, const String& fileType) 111 { 112 DEFINE_PB_STATIC_METHOD("writeImage", "(Lcom/sun/webkit/graphics/WCImageFrame;Ljava/lang/String;)V"); 113 CALL_PB_STATIC_VOID_METHOD( 114 jobject(*const_cast<Image&>(image).javaImage()), 115 (jstring)fileType.toJavaString(env)); 116 } 117 118 void jWriteURL(const String& url, const String& markup) 119 { 120 DEFINE_PB_STATIC_METHOD("writeUrl", "(Ljava/lang/String;Ljava/lang/String;)V"); 121 CALL_PB_STATIC_VOID_METHOD( 122 (jstring)url.toJavaString(env), 123 (jstring)markup.toJavaString(env)); 124 } 125 126 String jGetHtml() 127 { 128 DEFINE_PB_STATIC_METHOD("getHtml", "()Ljava/lang/String;"); 129 CALL_PB_STATIC_JSTROBJ_METHOD(jstr); 130 131 return jstr ? String(env, jstr) : String(); 132 } 133 134 /////////////////// 135 // Helper functions 311 String markup(urlToMarkup(pasteboardURL.url, title)); 312 313 m_dataObject->clear(); 314 m_dataObject->setURL(pasteboardURL.url, title); 315 m_dataObject->setPlainText(pasteboardURL.url.string()); 316 m_dataObject->setHTML(markup, pasteboardURL.url); 317 318 if (m_copyPasteMode) { 319 jWriteURL(pasteboardURL.url.string(), markup); 320 } 321 } 322 323 void Pasteboard::writeImage(Element& node, const URL& url, const String& title) 324 { 325 m_dataObject->setURL(url, title); 326 327 // Write the bytes of the image to the file format 328 writeImageToDataObject(m_dataObject, node, url); 329 330 AtomicString imageURL = node.getAttribute(HTMLNames::srcAttr); 331 URL fullURL; 332 if (!imageURL.isEmpty()) { 333 fullURL = node.document().completeURL(stripLeadingAndTrailingHTMLSpaces(imageURL)); 334 if (!fullURL.isEmpty()) { 335 m_dataObject->setHTML( 336 imageToMarkup(fullURL.string(), node), 337 node.document().url()); 338 } 339 } 340 if (m_copyPasteMode) { 341 CachedImage* cachedImage = getCachedImage(node); 342 // CachedImage not exist 343 if (!cachedImage) { 344 return; 345 } 346 347 Image* image = cachedImage->image(); 348 // Image data not exist 349 if (!image) { 350 return; 351 } 352 353 // SVGImage are not Bitmap backed, Let the receiving end decode the svg image 354 // based on url and its markup 355 if (image->isSVGImage()) { 356 jWriteURL(url.string(), createMarkup(node)); 357 } 358 else { 359 String lastPathComponent = fullURL.lastPathComponent(); 360 String extension; 361 size_t dotOffset = lastPathComponent.reverseFind('.'); 362 if (dotOffset != notFound) 363 extension = lastPathComponent.substring(dotOffset + 1); 364 else 365 extension = "png"; 366 367 jWriteImage(*image, extension); 368 } 369 } 370 } 371 372 void Pasteboard::writeString(const String& type, const String& data) 373 { 374 // DnD only mode 375 if (m_dataObject) { 376 m_dataObject->setData(type, data); 377 } 378 } 379 380 String Pasteboard::readString(const String& type) 381 { 382 // DnD only mode 383 if (m_dataObject) { 384 return m_dataObject->getData(type); 385 } 386 return String(); 387 } |