wchar_t *Clipboard::PasteFormat(const wchar_t *Format) { bool isOEMVBlock=false; UINT FormatType=RegisterFormat(Format); if (!FormatType) return nullptr; if (!StrCmp(Format,FAR_VerticalBlock_Unicode) && !IsFormatAvailable(FormatType)) { FormatType=RegisterFormat(FAR_VerticalBlock); isOEMVBlock=true; } if (!FormatType || !IsFormatAvailable(FormatType)) return nullptr; wchar_t *ClipText=nullptr; HANDLE hClipData=GetData(FormatType); if (hClipData) { wchar_t *ClipAddr=(wchar_t *)GlobalLock(hClipData); if (ClipAddr) { size_t BufferSize; if (isOEMVBlock) BufferSize=strlen((LPCSTR)ClipAddr)+1; else BufferSize=wcslen(ClipAddr)+1; ClipText=(wchar_t *)xf_malloc(BufferSize*sizeof(wchar_t)); if (ClipText) { if (isOEMVBlock) MultiByteToWideChar(CP_OEMCP,0,(LPCSTR)ClipAddr,-1,ClipText,(int)BufferSize); else wcscpy(ClipText,ClipAddr); } GlobalUnlock(hClipData); } } return ClipText; }
// вставка без очистки буфера - на добавление bool Clipboard::CopyFormat(const wchar_t *Format, const wchar_t *Data) { UINT FormatType=RegisterFormat(Format); if (!FormatType) return false; if (Data && *Data) { HGLOBAL hData; void *GData; size_t BufferSize=(StrLength(Data)+1)*sizeof(wchar_t); if ((hData=GlobalAlloc(GMEM_MOVEABLE,BufferSize))) { if ((GData=GlobalLock(hData))) { memcpy(GData,Data,BufferSize); GlobalUnlock(hData); if (!SetData(FormatType, hData)) GlobalFree(hData); } else { GlobalFree(hData); } } } return true; }
FormatPtr FormatManager::operator()(FormatPtr format) { if (!format || IsRegistered(format)) { return format; } return RegisterFormat(format->type, format->bps, format->sample, format->subsample_w, format->subsample_h); }
void GimpDDS_Init(void) { RegisterFormat(&F_DXT1, &TOOL_GIMPDDS); RegisterFormat(&F_DXT1A, &TOOL_GIMPDDS); RegisterFormat(&F_DXT2, &TOOL_GIMPDDS); RegisterFormat(&F_DXT3, &TOOL_GIMPDDS); RegisterFormat(&F_DXT4, &TOOL_GIMPDDS); RegisterFormat(&F_DXT5, &TOOL_GIMPDDS); // options gimpdds_dithering = false; gimpdds_colorBlockMethod = DDS_COLOR_MAX; }
void Crunch_Init(void) { RegisterFormat(&F_DXT1, &TOOL_CRUNCH); RegisterFormat(&F_DXT1A, &TOOL_CRUNCH); RegisterFormat(&F_DXT2, &TOOL_CRUNCH); RegisterFormat(&F_DXT3, &TOOL_CRUNCH); RegisterFormat(&F_DXT4, &TOOL_CRUNCH); RegisterFormat(&F_DXT5, &TOOL_CRUNCH); // options crnlib_speed[PROFILE_FAST] = cCRNDXTQualityFast; crnlib_speed[PROFILE_REGULAR] = cCRNDXTQualityBetter; crnlib_speed[PROFILE_BEST] = cCRNDXTQualityUber; crnlib_compressor_type = cCRNDXTCompressorCRN; }
void Etc2Comp_Init(void) { // ETC1-based RegisterFormat(&F_ETC1, &TOOL_ETC2COMP); // ETC2-based RegisterFormat(&F_ETC2, &TOOL_ETC2COMP); RegisterFormat(&F_ETC2A, &TOOL_ETC2COMP); RegisterFormat(&F_ETC2A1, &TOOL_ETC2COMP); RegisterFormat(&F_EAC1, &TOOL_ETC2COMP); RegisterFormat(&F_EAC2, &TOOL_ETC2COMP); // options etc2comp_effortLevel[PROFILE_FAST] = 10; etc2comp_effortLevel[PROFILE_REGULAR] = 40; etc2comp_effortLevel[PROFILE_BEST] = 60; }
UIDnDDataObject::UIDnDDataObject(UIDnDHandler *pDnDHandler, const QStringList &lstFormats) : m_pDnDHandler(pDnDHandler) , m_enmStatus(DnDDataObjectStatus_Uninitialized) , m_cRefs(1) , m_cFormats(0) , m_pFormatEtc(NULL) , m_pStgMedium(NULL) , m_SemEvent(NIL_RTSEMEVENT) , m_fDataRetrieved(false) , m_pvData(NULL) , m_cbData(0) { HRESULT hr; ULONG cMaxFormats = 16; /* Maximum number of registered formats. */ ULONG cRegisteredFormats = 0; try { m_pFormatEtc = new FORMATETC[cMaxFormats]; RT_BZERO(m_pFormatEtc, sizeof(FORMATETC) * cMaxFormats); m_pStgMedium = new STGMEDIUM[cMaxFormats]; RT_BZERO(m_pStgMedium, sizeof(STGMEDIUM) * cMaxFormats); for (int i = 0; ( i < lstFormats.size() && i < cMaxFormats); i++) { const QString &strFormat = lstFormats.at(i); if (m_lstFormats.contains(strFormat)) continue; /* URI data ("text/uri-list"). */ if (strFormat.contains("text/uri-list", Qt::CaseInsensitive)) { RegisterFormat(&m_pFormatEtc[cRegisteredFormats], CF_TEXT); m_pStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; RegisterFormat(&m_pFormatEtc[cRegisteredFormats], CF_UNICODETEXT); m_pStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; RegisterFormat(&m_pFormatEtc[cRegisteredFormats], CF_HDROP); m_pStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; m_lstFormats << strFormat; } /* Plain text ("text/plain"). */ if (strFormat.contains("text/plain", Qt::CaseInsensitive)) { RegisterFormat(&m_pFormatEtc[cRegisteredFormats], CF_TEXT); m_pStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; RegisterFormat(&m_pFormatEtc[cRegisteredFormats], CF_UNICODETEXT); m_pStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; m_lstFormats << strFormat; } } LogRel3(("DnD: Total registered native formats: %RU32 (for %d formats from guest)\n", cRegisteredFormats, lstFormats.size())); hr = S_OK; } catch (std::bad_alloc &) { hr = E_OUTOFMEMORY; } if (SUCCEEDED(hr)) { int rc2 = RTSemEventCreate(&m_SemEvent); AssertRC(rc2); /* * Other (not so common) formats. */ #if 0 /* IStream. */ RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILECONTENTS), TYMED_ISTREAM, 0 /* lIndex */); /* Required for e.g. Windows Media Player. */ RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILENAME)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILENAMEW)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_SHELLIDLIST)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_SHELLIDLISTOFFSET)); #endif m_cFormats = cRegisteredFormats; m_enmStatus = DnDDataObjectStatus_Dropping; } LogFlowFunc(("hr=%Rhrc\n", hr)); }
VBoxDnDDataObject::VBoxDnDDataObject(FORMATETC *pFormatEtc, STGMEDIUM *pStgMed, ULONG cFormats) : mStatus(Uninitialized), mRefCount(1), mcFormats(0), mpvData(NULL), mcbData(0) { HRESULT hr; /* Make sure that there's enough room for our fixed formats. */ ULONG cAllFormats = cFormats + 1; try { mpFormatEtc = new FORMATETC[cAllFormats]; RT_BZERO(mpFormatEtc, sizeof(FORMATETC) * cAllFormats); mpStgMedium = new STGMEDIUM[cAllFormats]; RT_BZERO(mpStgMedium, sizeof(STGMEDIUM) * cAllFormats); if ( pFormatEtc && pStgMed) { for (ULONG i = 0; i < cFormats; i++) { LogFlowFunc(("Format %RU32: cfFormat=%RI16, tyMed=%RU32, dwAspect=%RU32\n", i, pFormatEtc[i].cfFormat, pFormatEtc[i].tymed, pFormatEtc[i].dwAspect)); mpFormatEtc[i] = pFormatEtc[i]; mpStgMedium[i] = pStgMed[i]; } } hr = S_OK; } catch (std::bad_alloc &) { hr = E_OUTOFMEMORY; } if (SUCCEEDED(hr)) { int rc2 = RTSemEventCreate(&mSemEvent); AssertRC(rc2); /* Most commonly used format. */ RegisterFormat(&mpFormatEtc[cFormats], CF_HDROP); mpStgMedium[cFormats++].tymed = TYMED_HGLOBAL; #if 0 /* IStream. */ RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILECONTENTS), TYMED_ISTREAM, 0 /* lIndex */); /* Required for e.g. Windows Media Player. */ RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILENAME)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILENAMEW)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_SHELLIDLIST)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_SHELLIDLISTOFFSET)); #endif mcFormats = cFormats; mStatus = Initialized; } LogFlowFunc(("cFormats=%RU32, hr=%Rhrc\n", cFormats, hr)); }
UIDnDDataObject::UIDnDDataObject(CSession &session, CDnDSource &dndSource, const QStringList &lstFormats, QWidget *pParent) : mSession(session), mDnDSource(dndSource), mpParent(pParent), mStatus(Uninitialized), mRefCount(1), mcFormats(0), mpFormatEtc(NULL), mpStgMedium(NULL), mpvData(NULL), mcbData(0) { HRESULT hr; ULONG cMaxFormats = 16; /* Maximum number of registered formats. */ ULONG cRegisteredFormats = 0; try { mpFormatEtc = new FORMATETC[cMaxFormats]; RT_BZERO(mpFormatEtc, sizeof(FORMATETC) * cMaxFormats); mpStgMedium = new STGMEDIUM[cMaxFormats]; RT_BZERO(mpStgMedium, sizeof(STGMEDIUM) * cMaxFormats); for (int i = 0; ( i < lstFormats.size() && i < cMaxFormats); i++) { const QString &strFormat = lstFormats.at(i); if (mlstFormats.contains(strFormat)) continue; /* URI data ("text/uri-list"). */ if (strFormat.contains("text/uri-list", Qt::CaseInsensitive)) { RegisterFormat(&mpFormatEtc[cRegisteredFormats], CF_TEXT); mpStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; RegisterFormat(&mpFormatEtc[cRegisteredFormats], CF_UNICODETEXT); mpStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; RegisterFormat(&mpFormatEtc[cRegisteredFormats], CF_HDROP); mpStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; mlstFormats << strFormat; } /* Plain text ("text/plain"). */ else if (strFormat.contains("text/plain", Qt::CaseInsensitive)) { RegisterFormat(&mpFormatEtc[cRegisteredFormats], CF_TEXT); mpStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; RegisterFormat(&mpFormatEtc[cRegisteredFormats], CF_UNICODETEXT); mpStgMedium[cRegisteredFormats++].tymed = TYMED_HGLOBAL; mlstFormats << strFormat; } } LogFlowFunc(("Total registered native formats: %RU32 (for %d formats from guest)\n", cRegisteredFormats, lstFormats.size())); hr = S_OK; } catch (std::bad_alloc &) { hr = E_OUTOFMEMORY; } if (SUCCEEDED(hr)) { int rc2 = RTSemEventCreate(&mSemEvent); AssertRC(rc2); /* * Other (not so common) formats. */ #if 0 /* IStream. */ RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILECONTENTS), TYMED_ISTREAM, 0 /* lIndex */); /* Required for e.g. Windows Media Player. */ RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILENAME)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_FILENAMEW)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_SHELLIDLIST)); RegisterFormat(&mpFormatEtc[cFormats++], RegisterClipboardFormat(CFSTR_SHELLIDLISTOFFSET)); #endif mcFormats = cRegisteredFormats; /* Put the object in the "dropped" state already. We don't need * to handle the other states here at the moment. */ mStatus = Dropped; } LogFlowFunc(("hr=%Rhrc\n", hr)); }
FormatPtr FormatManager::operator()(int type, int bps, int sample, int subsample_w, int subsample_h) { return RegisterFormat(type, bps, sample, subsample_w, subsample_h); }