Changeset 343


Ignore:
Timestamp:
Nov 23, 2009, 11:37:40 PM (16 years ago)
Author:
Dmitry A. Kuminov
Message:

gui/kernel: mime: Implemented MIME<->clipboard interface for OS/2 bitmaps.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gui/kernel/qmime_pm.cpp

    r339 r343  
    409409                                      ULONG &flags, ULONG *data) const
    410410{
    411     if (!mimeData->hasText())
     411    if (!mimeData->hasText() ||
     412        (format != CF_TEXT && format != CF_TextUnicode && format != CF_TextHtml))
    412413        return false;
    413414
     
    514515        !mimeType.startsWith("text/html"))
    515516        return ret;
    516     if (!(flags & CFI_POINTER) || !data)
     517    if ((format != CF_TEXT && format != CF_TextUnicode && format != CF_TextHtml) ||
     518        !(flags & CFI_POINTER) || !data)
    517519        return ret;
    518520
     
    549551////////////////////////////////////////////////////////////////////////////////
    550552
    551 class QPMMimeAnyMime : public QPMMime
     553class QPMMimee : public QPMMime
    552554{
    553555public:
    554     QPMMimeAnyMime();
     556    QPMMimee();
    555557
    556558    // for converting from Qt
     
    558560    bool convertFromMimeData(const QMimeData *mimeData, ULONG format,
    559561                             ULONG &flags, ULONG *data) const;
    560 
     562    // for converting to Qt
     563    QList<MimeCFPair> mimesForFormats(const QList<ULONG> &formats) const;
     564    QVariant convertFromFormat(ULONG format, ULONG flags, ULONG data,
     565                               const QString &mimeType,
     566                               QVariant::Type preferredType) const;
     567};
     568
     569QPMMimeImage::QPMMimeImage()
     570{
     571}
     572
     573QList<QPMMime::MimeCFPair> QPMMimeImage::formatsForMimeData(const QMimeData *mimeData) const
     574{
     575    QList<MimeCFPair> fmts;
     576    if (mimeData->hasImage()) {
     577        // "application/x-qt-image" seems to be used as a single name for all
     578        // "image/xxx" types in Qt
     579        fmts << MimeCFPair(QLatin1String("application/x-qt-image"), CF_BITMAP);
     580    }
     581    return fmts;
     582}
     583
     584bool QPMMimeImage::convertFromMimeData(const QMimeData *mimeData, ULONG format,
     585                                       ULONG &flags, ULONG *data) const
     586{
     587    if (!mimeData->hasImage() || format != CF_BITMAP)
     588        return false;
     589
     590    flags = CFI_HANDLE;
     591
     592    if (data == NULL)
     593        return true; // delayed rendering, nothing to do
     594
     595    QImage img = qvariant_cast<QImage>(mimeData->imageData());
     596    if (img.isNull())
     597        return false;
     598
     599    QPixmap pm = QPixmap::fromImage(img);
     600    if (pm.isNull())
     601        return false;
     602
     603    HBITMAP bmp = pm.toPmHBITMAP(0, true);
     604    if (bmp == NULLHANDLE)
     605        return false;
     606
     607    *data = bmp;
     608    return true;
     609}
     610
     611QList<QPMMime::MimeCFPair> QPMMimeImage::mimesForFormats(const QList<ULONG> &formats) const
     612{
     613    QList<MimeCFPair> mimes;
     614    if (formats.contains(CF_BITMAP))
     615        mimes << MimeCFPair(QLatin1String("application/x-qt-image"), CF_BITMAP);
     616    return mimes;
     617}
     618
     619QVariant QPMMimeImage::convertFromFormat(ULONG format, ULONG flags, ULONG data,
     620                                         const QString &mimeType,
     621                                         QVariant::Type preferredType) const
     622{
     623    Q_UNUSED(preferredType);
     624
     625    QVariant ret;
     626
     627    if (mimeType != QLatin1String("application/x-qt-image"))
     628        return ret;
     629    if (format != CF_BITMAP || !(flags & CFI_HANDLE) || !data)
     630        return ret;
     631
     632    QPixmap pm = QPixmap::fromPmHBITMAP((HBITMAP)data);
     633    if (pm.isNull())
     634        return ret;
     635
     636    ret = pm.toImage();
     637    return ret;
     638}
     639
     640////////////////////////////////////////////////////////////////////////////////
     641
     642class QPMMimeAnyMime : public QPMMime
     643{
     644public:
     645    QPMMimeAnyMime();
     646
     647    // for converting from Qt
     648    QList<MimeCFPair> formatsForMimeData(const QMimeData *mimeData) const;
     649    bool convertFromMimeData(const QMimeData *mimeData, ULONG format,
     650                             ULONG &flags, ULONG *data) const;
    561651    // for converting to Qt
    562652    QList<MimeCFPair> mimesForFormats(const QList<ULONG> &formats) const;
     
    756846        initialized = true;
    757847        new QPMMimeAnyMime; // must be the first (used as a fallback)
     848
    758849        new QPMMimeText;
    759850    }
Note: See TracChangeset for help on using the changeset viewer.