Esempio n. 1
0
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;
}
Esempio n. 2
0
// вставка без очистки буфера - на добавление
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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));
}
Esempio n. 9
0
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));
}
Esempio n. 10
0
FormatPtr FormatManager::operator()(int type, int bps, int sample,
    int subsample_w, int subsample_h)
{
    return RegisterFormat(type, bps, sample, subsample_w, subsample_h);
}