2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FUi_Clipboard.cpp
19 * @brief This is the implementation file for the _Clipboard class.
22 #include <FTextUtf8Encoding.h>
23 #include <FBaseColLinkedList.h>
24 #include <FBaseErrorDefine.h>
25 #include <FUiIClipboardPopupEventListener.h>
26 #include <FUiClipboard.h>
27 #include <FMediaImageTypes.h>
28 #include <FGrpBitmap.h>
29 #include <FBaseSysLog.h>
30 #include <FMedia_ImageEncoder.h>
31 #include <FMedia_ImageDecoder.h>
32 #include <FMedia_ImageUtil.h>
33 #include <FGrp_BitmapImpl.h>
34 #include "FUi_Clipboard.h"
35 #include "FUi_ClipboardItem.h"
36 #include "FUi_ControlManager.h"
37 #include "FUi_EcoreEvasMgr.h"
38 #include "FUiCtrl_PublicClipboardPopupEvent.h"
40 using namespace Tizen::Base;
41 using namespace Tizen::Base::Collection;
42 using namespace Tizen::Base::Runtime;
43 using namespace Tizen::Graphics;
44 using namespace Tizen::Io;
45 using namespace Tizen::Media;
46 using namespace Tizen::Text;
47 using namespace Tizen::Ui::Controls;
51 const int _CLIPBOARD_ITEM_MAX = 12;
52 const int _CBHM_ITEM_MAX = 12;
53 const String _CLIPBOARD_DEFAULT_PATH = L"/tmp/clipboard_";
54 const String _CLIPBOARD_DEFAULT_EXTENSION = L".png";
57 namespace Tizen { namespace Ui
59 _Clipboard* _Clipboard::__pInstance = null;
62 _Clipboard::GetInstance(void)
69 if (_ControlManager::GetInstance())
71 __pInstance = new (std::nothrow) _Clipboard;
72 SysAssert(__pInstance);
81 _Clipboard::ReleaseInstance(void)
90 _Clipboard::~_Clipboard(void)
96 delete __pPublicEvent;
97 __pPublicEvent = null;
102 _Clipboard::CopyItem(const _ClipboardItem& item)
104 SysTryReturn(NID_UI, IsValidDataType(item.GetDataType()), E_INVALID_ARG, E_INVALID_ARG,
105 "[E_INVALID_ARG] The data type is invalid.");
107 _ClipFormat format = ConvertToClipFormat(item.GetDataType());
108 SysTryReturn(NID_UI, format != _CLIP_FORMAT_NONE, E_INVALID_ARG, E_INVALID_ARG,
109 "[E_INVALID_ARG] The data type is invalid.");
111 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
112 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
115 if (format == _CLIP_FORMAT_IMAGE)
117 const Bitmap* pBitmap = dynamic_cast <const Bitmap*>(item.GetData());
118 SysTryReturn(NID_UI, pBitmap, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
120 pChar = CreateImageFileN(*pBitmap);
124 const String* pString = dynamic_cast <const String*>(item.GetData());
125 SysTryReturn(NID_UI, pString, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
127 pChar = EncodeToCharN(*pString);
130 result r = GetLastResult();
131 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
133 r = pEcoreEvas->CopyClip(format, pChar);
134 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
136 SysLog(NID_UI, "[Clipboard] Clip : format = [%d], char = [%s] is copied.", format, pChar);
150 _Clipboard::RetrieveItemsN(unsigned long dataTypes)
152 SysTryReturn(NID_UI, IsValidDataType(dataTypes), null, E_INVALID_ARG,
153 "[E_INVALID_ARG] The data type is invalid.");
155 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
156 SysTryReturn(NID_UI, pEcoreEvas, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
158 int count = pEcoreEvas->GetClipCount();
159 SysTryReturn(NID_UI, count > 0, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
161 LinkedList* pList = new (std::nothrow) LinkedList;
162 SysTryReturn(NID_UI, pList, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
165 int format = _CLIP_FORMAT_NONE;
167 ClipboardDataType type = CLIPBOARD_DATA_TYPE_NONE;
168 for (int i = 0; i < count; i++)
170 // Get the clip with index.
171 bool ret = pEcoreEvas->RetrieveClipN(i, &format, &pData);
175 SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
179 //if (!pData) // prevent -> SLP CBHM
181 // SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
185 type = ConvertToDataType(format, pData);
187 if (!IsValidDataType(type))
189 SysLog(NID_UI, "The type of a clip to be get form _EcoreEvas is invalid.");
194 // If the clip to be get from _EcoreEvas is in agreement with dataTypes.
195 if (dataTypes & type)
197 result r = E_SUCCESS;
198 _ClipboardItem* pItem = null;
200 if (type == CLIPBOARD_DATA_TYPE_IMAGE)
202 const Bitmap* pBitmap = LoadBitmapN(String(pData));
205 if (!pBitmap || (r != E_SUCCESS))
207 SysLog(NID_UI, "It's failed to load a bitmap.");
212 pItem = _ClipboardItem::CreateInstanceN(type, *pBitmap);
215 SysLog(NID_UI, "It's failed to create a image item.");
223 pItem = _ClipboardItem::CreateInstanceN(type, String(pData));
226 SysLog(NID_UI, "It's failed to create a clipboard item.");
234 r = pList->Add(*pItem);
238 SysLog(NID_UI, "It's failed to add a item into a list.");
252 SysTryCatch(NID_UI, pList->GetCount() > 0, , E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
254 SetLastResult(E_SUCCESS);
263 const _ClipboardItem*
264 _Clipboard::RetrieveLatestItemN(unsigned long dataTypes)
266 SysTryReturn(NID_UI, IsValidDataType(dataTypes), null, E_INVALID_ARG,
267 "[E_INVALID_ARG] The data type is invalid.");
269 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
270 SysTryReturn(NID_UI, pEcoreEvas, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
272 int count = pEcoreEvas->GetClipCount();
273 SysTryReturn(NID_UI, count > 0, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
275 // Find the item with dataTypes.
276 int format = _CLIP_FORMAT_NONE;
278 ClipboardDataType type = CLIPBOARD_DATA_TYPE_NONE;
280 for (int i = 0; i < count; i++)
282 // Get the clip with index.
283 bool ret = pEcoreEvas->RetrieveClipN(i, &format, &pData);
287 SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
291 //if (!pData) // prevent -> SLP CBHM
293 // SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
297 type = ConvertToDataType(format, pData);
299 if (!IsValidDataType(type))
301 SysLog(NID_UI, "The type of a clip to be get form _EcoreEvas is invalid.");
306 // If the clip to be get from _EcoreEvas is in agreement with dataTypes.
307 if (dataTypes & type)
318 SysTryReturn(NID_UI, found == true, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
320 SysLog(NID_UI, "[Clipboard] Clip : format = [%d], char = [%s] is retrieved.", format, pData);
322 result r = E_SUCCESS;
323 _ClipboardItem* pItem = null;
324 if (type == CLIPBOARD_DATA_TYPE_IMAGE)
326 const Bitmap* pBitmap = LoadBitmapN(String(pData));
328 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
330 pItem = _ClipboardItem::CreateInstanceN(type, *pBitmap);
334 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
338 pItem = _ClipboardItem::CreateInstanceN(type, String(pData));
340 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
345 SetLastResult(E_SUCCESS);
360 _Clipboard::ShowPopup(unsigned long dataTypes, const IClipboardPopupEventListener &listener)
362 SysTryReturn(NID_UI, IsPopupVisible() == false, E_INVALID_OPERATION, E_INVALID_OPERATION,
363 "[E_INVALID_OPERATION] The popup is already shown.");
365 result r = E_SUCCESS;
367 if (__pPublicEvent == null)
369 __pPublicEvent = _PublicClipboardPopupEvent::CreateInstanceN();
371 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
374 r = __pPublicEvent->AddListener(listener);
375 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
377 unsigned long clipFormats = _CLIP_FORMAT_NONE;
378 if (CLIPBOARD_DATA_TYPE_IMAGE & dataTypes)
380 clipFormats = _CLIP_FORMAT_IMAGE;
383 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
385 pEcoreEvas->OpenClipboard(clipFormats);
391 _Clipboard::HidePopup(void)
393 SysTryReturn(NID_UI, IsPopupVisible() == true, E_INVALID_OPERATION, E_INVALID_OPERATION,
394 "[E_INVALID_OPERATION] The popup is not shown.");
396 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
397 pEcoreEvas->CloseClipboard();
401 delete __pPublicEvent;
402 __pPublicEvent = null;
409 _Clipboard::IsPopupVisible(void)
411 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
413 bool opened = pEcoreEvas->IsClipboardOpened();
415 SetLastResult(E_SUCCESS);
420 _Clipboard::FireEvent(int format, char* pData)
424 SysLog(NID_UI, "__pPublicEvent is null.");
430 result r = E_SUCCESS;
431 _ClipboardItem* pItemCore = null;
432 ClipboardItem* pItem = null;
436 ClipboardDataType type = ConvertToDataType(format, pData);
437 if (!IsValidDataType(type))
439 SysLog(NID_UI, "The type of a clip to be get form _EcoreEvas is invalid.");
446 if (type == CLIPBOARD_DATA_TYPE_IMAGE)
448 const Bitmap* pBitmap = LoadBitmapN(String(pData));
451 if (!pBitmap || (r != E_SUCCESS))
453 SysLog(NID_UI, "It's failed to load a bitmap.");
465 pItemCore = _ClipboardItem::CreateInstanceN(type, *pBitmap);
468 SysLog(NID_UI, "It's failed to create a image item.");
476 pItemCore = _ClipboardItem::CreateInstanceN(type, String(pData));
479 SysLog(NID_UI, "It's failed to create a clipboard item.");
487 SysLog(NID_UI, "pItemCore is null.");
493 pItem = new (std::nothrow) ClipboardItem;
494 pItem->Construct(pItemCore->GetDataType(), *(pItemCore->GetData()));
499 IEventArg* pArg = _PublicClipboardPopupEvent::CreateClipboardPopupEventArgN(pItem);
501 SysTryReturnVoidResult(NID_UI, pArg, r, "[%s] Propagating.", GetErrorMessage(r));
503 __pPublicEvent->Fire(*pArg);
506 SetLastResult(E_SUCCESS);
510 _Clipboard::ConvertToClipFormat(ClipboardDataType type)
512 _ClipFormat format = _CLIP_FORMAT_NONE;
515 case CLIPBOARD_DATA_TYPE_TEXT:
517 case CLIPBOARD_DATA_TYPE_VIDEO:
519 case CLIPBOARD_DATA_TYPE_AUDIO:
520 format = _CLIP_FORMAT_TEXT;
522 case CLIPBOARD_DATA_TYPE_HTML:
523 format = _CLIP_FORMAT_HTML;
525 case CLIPBOARD_DATA_TYPE_IMAGE:
526 format = _CLIP_FORMAT_IMAGE;
536 _Clipboard::ConvertToDataType(int format, const char* pData)
538 ClipboardDataType type = CLIPBOARD_DATA_TYPE_NONE;
541 case _CLIP_FORMAT_TEXT:
542 if (IsVideoDataType(pData))
544 type = CLIPBOARD_DATA_TYPE_VIDEO;
546 else if (IsAudioDataType(pData))
548 type = CLIPBOARD_DATA_TYPE_AUDIO;
552 type = CLIPBOARD_DATA_TYPE_TEXT;
555 case _CLIP_FORMAT_HTML:
556 type = CLIPBOARD_DATA_TYPE_HTML;
558 case _CLIP_FORMAT_IMAGE:
559 type = CLIPBOARD_DATA_TYPE_IMAGE;
569 _Clipboard::EncodeToCharN(const String& string)
571 Utf8Encoding encoder;
572 ByteBuffer* pByteBuffer = encoder.GetBytesN(string);
574 result r = GetLastResult();
575 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
577 char* pChar = strdup((char*)pByteBuffer->GetPointer());
578 SysTryCatch(NID_UI, pChar, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
580 SetLastResult(E_SUCCESS);
590 _Clipboard::CreateImageFileN(const Bitmap& bitmap)
592 // Obtain the buffer information from the bitmap.
593 Bitmap& tmpBitmap = const_cast<Bitmap&>(bitmap);
594 BufferInfo bufferInfo;
596 result r = tmpBitmap.Lock(bufferInfo);
597 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
599 // Create a source buffer.
600 ByteBuffer* pSrcBuf = new (std::nothrow) ByteBuffer;
601 SysTryReturn(NID_UI, pSrcBuf, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
603 int outLength = bufferInfo.width * bufferInfo.height * bufferInfo.bitsPerPixel / 8;
605 BitmapPixelFormat bmpPixelFormat = bitmap.GetPixelColorFormat();
606 MediaPixelFormat mediaPixelFormat = MEDIA_PIXEL_FORMAT_NONE;
607 ImageFormat imageFormat = IMG_FORMAT_PNG;
609 ByteBuffer* pImageBuffer = null;
613 bool existFile = false;
615 r = pSrcBuf->Construct(outLength);
616 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
618 r = pSrcBuf->SetArray((const byte*)bufferInfo.pPixels, 0, outLength);
619 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
624 switch (bmpPixelFormat)
626 case BITMAP_PIXEL_FORMAT_RGB565:
627 mediaPixelFormat = MEDIA_PIXEL_FORMAT_RGB565LE;
629 case BITMAP_PIXEL_FORMAT_ARGB8888:
631 case BITMAP_PIXEL_FORMAT_R8G8B8A8:
632 mediaPixelFormat = MEDIA_PIXEL_FORMAT_BGRA8888;
635 SysLogException(NID_UI, E_INVALID_ARG, "[E_INVALID_ARG] The invalid argument is given.");
639 // Encode for getting a image buffer.
640 pImageBuffer = _ImageEncoder::EncodeToBufferN(*pSrcBuf, bufferInfo.width, bufferInfo.height, mediaPixelFormat, imageFormat);
642 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
647 // Create a image file.
648 filePath = CreateImageFilePath();
650 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
652 r = file.Construct(filePath, L"w+");
653 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
657 r = file.Write(*pImageBuffer);
658 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
663 pChar = EncodeToCharN(filePath);
665 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
667 SetLastResult(E_SUCCESS);
684 File::Remove(filePath);
696 _Clipboard::CreateImageFilePath(void)
698 result r = RemoveUnnecessaryImageFiles();
699 SysTryReturn(NID_UI, r == E_SUCCESS, String(""), r, "[%s] Propagating.", GetErrorMessage(r));
702 String extension(_CLIPBOARD_DEFAULT_EXTENSION);
705 for (int i = 0; i < _CLIPBOARD_ITEM_MAX; i++)
707 filePath = _CLIPBOARD_DEFAULT_PATH;
709 r = filePath.Append(i);
710 SysTryReturn(NID_UI, r == E_SUCCESS, String(""), r, "[%s] Propagating.", GetErrorMessage(r));
712 r = filePath.Append(extension);
713 SysTryReturn(NID_UI, r == E_SUCCESS, String(""), r, "[%s] Propagating.", GetErrorMessage(r));
715 if (File::IsFileExist(filePath) == false)
722 SysTryReturn(NID_UI, find == true, String(""), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
724 SetLastResult(E_SUCCESS);
730 _Clipboard::RemoveUnnecessaryImageFiles(void)
732 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
733 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
735 result r = E_SUCCESS;
737 int clipCount = pEcoreEvas->GetClipCount();
740 r = RemoveAllImageFiles();
741 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
746 ArrayList imageClipList;
748 r = imageClipList.Construct();
749 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
751 int format = _CLIP_FORMAT_NONE;
753 for (int i = 0; i < clipCount; i++)
755 bool ret = pEcoreEvas->RetrieveClipN(i, &format, &pData);
759 SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
763 //if (!pData) // prevent -> SLP CBHM
765 // SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
769 if (format == _CLIP_FORMAT_IMAGE)
772 int length = temp.GetLength();
773 int defaultLength = _CLIPBOARD_DEFAULT_PATH.GetLength();
775 if (length < defaultLength)
781 temp.Remove(defaultLength, length - defaultLength);
783 int compare = temp.CompareTo(_CLIPBOARD_DEFAULT_PATH);
787 String* pString = new (std::nothrow) String(pData);
788 imageClipList.Add(*pString);
796 IEnumerator* pEnumerator = null;
798 int imageClipCount = imageClipList.GetCount();
800 if (imageClipCount < 1)
802 r = RemoveAllImageFiles();
803 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
807 else if (imageClipCount == _CBHM_ITEM_MAX)
809 String* plastImageClip = dynamic_cast<String*>(imageClipList.GetAt(_CBHM_ITEM_MAX - 1));
810 SysTryCatch(NID_UI, plastImageClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
812 if (File::IsFileExist(*plastImageClip))
814 r = File::Remove(*plastImageClip);
815 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
819 pEnumerator = imageClipList.GetEnumeratorN();
820 SysTryCatch(NID_UI, pEnumerator, , r, "[%s] Propagating.", GetErrorMessage(r));
822 for (int i = 0; i < _CLIPBOARD_ITEM_MAX; i++)
824 filePath = _CLIPBOARD_DEFAULT_PATH;
826 r = filePath.Append(i);
827 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
829 r = filePath.Append(_CLIPBOARD_DEFAULT_EXTENSION);
830 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
833 while (pEnumerator->MoveNext() == E_SUCCESS)
835 String* pImageClip = dynamic_cast<String*>(pEnumerator->GetCurrent());
836 SysTryCatch(NID_UI, pImageClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
838 equal = filePath.Equals(*pImageClip);
845 r = pEnumerator->Reset();
846 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
850 if (File::IsFileExist(filePath))
852 r = File::Remove(filePath);
853 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
861 imageClipList.RemoveAll(true);
872 _Clipboard::RemoveAllImageFiles(void)
875 result r = E_SUCCESS;
877 for (int i = 0; i < _CLIPBOARD_ITEM_MAX; i++)
879 filePath = _CLIPBOARD_DEFAULT_PATH;
881 r = filePath.Append(i);
882 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
884 r = filePath.Append(_CLIPBOARD_DEFAULT_EXTENSION);
885 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
887 if (File::IsFileExist(filePath))
889 r = File::Remove(filePath);
890 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
898 _Clipboard::LoadBitmapN(const String& path)
900 result r = E_SUCCESS;
902 String* pStr = const_cast<String*>(&path);
905 r = pStr->IndexOf(L"file://", 0, index);
907 if (r != E_OBJ_NOT_FOUND)
912 bool hasAlpha = _ImageUtil::HasAlphaChannel(*pStr);
915 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
917 BitmapPixelFormat bmpPixelFormat = BITMAP_PIXEL_FORMAT_RGB565;
918 MediaPixelFormat mediaPixelFormat = MEDIA_PIXEL_FORMAT_RGB565LE;
920 if (hasAlpha == true)
922 bmpPixelFormat = BITMAP_PIXEL_FORMAT_ARGB8888;
923 mediaPixelFormat = MEDIA_PIXEL_FORMAT_BGRA8888;
930 ByteBuffer* pBuffer = _ImageDecoder::DecodeToBufferN(*pStr, mediaPixelFormat, bmpWidth, bmpHeight);
932 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
935 Bitmap* pBitmap = _BitmapImpl::GetNonScaledBitmapN(*pBuffer, Dimension(bmpWidth, bmpHeight), bmpPixelFormat);
937 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
941 SetLastResult(E_SUCCESS);
957 _Clipboard::IsValidDataType(unsigned long dataTypes)
959 return ((CLIPBOARD_DATA_TYPE_TEXT & dataTypes) ||
960 (CLIPBOARD_DATA_TYPE_HTML & dataTypes) ||
961 (CLIPBOARD_DATA_TYPE_IMAGE & dataTypes) ||
962 (CLIPBOARD_DATA_TYPE_VIDEO & dataTypes) ||
963 (CLIPBOARD_DATA_TYPE_AUDIO & dataTypes));
967 _Clipboard::IsVideoDataType(const char* pChar)
970 return (strstr(pChar, ".mp4") != null);
974 _Clipboard::IsAudioDataType(const char* pChar)
977 return (strstr(pChar, ".mp3") != null);
980 _Clipboard::_Clipboard(void)
981 : __pPublicEvent(null)