Implement Copy to Clipboard for images

This commit is contained in:
Matthew Griffin
2019-06-24 16:30:29 +01:00
parent 1bb4404527
commit a4e0c2cc34
3 changed files with 61 additions and 2 deletions

View File

@@ -8,15 +8,28 @@
#ifndef _WX_QT_DATAOBJ2_H_
#define _WX_QT_DATAOBJ2_H_
#include <wx/scopedptr.h>
class QByteArray;
class WXDLLIMPEXP_CORE wxBitmapDataObject : public wxBitmapDataObjectBase
{
public:
wxBitmapDataObject();
wxBitmapDataObject(const wxBitmap& bitmap);
~wxBitmapDataObject();
void SetBitmap(const wxBitmap& bitmap) wxOVERRIDE;
size_t GetDataSize() const wxOVERRIDE;
bool GetDataHere(void *buf) const wxOVERRIDE;
bool SetData(const wxDataFormat& format, size_t len, const void *buf) wxOVERRIDE;
protected:
void DoConvertToPng();
private:
wxScopedPtr<QByteArray> m_imageBytes;
};

View File

@@ -152,7 +152,7 @@ bool wxClipboard::GetData( wxDataObject& data )
textdata->SetText(wxQtConvertString(MimeData->text()));
else
{
QByteArray bytearray = MimeData->data( wxQtConvertString(format.GetMimeType()) ).data();
QByteArray bytearray = MimeData->data( wxQtConvertString(format.GetMimeType()) );
data.SetData(format, bytearray.size(), bytearray.constData());
}

View File

@@ -12,6 +12,9 @@
#pragma hdrstop
#endif
#include <QPixmap>
#include <QBuffer>
#include "wx/dataobj.h"
#include "wx/scopedarray.h"
@@ -153,11 +156,54 @@ bool wxDataObject::IsSupportedFormat(const wxDataFormat& format,
//############################################################################
wxBitmapDataObject::wxBitmapDataObject()
: m_imageBytes(new QByteArray())
{
}
wxBitmapDataObject::wxBitmapDataObject( const wxBitmap &WXUNUSED(bitmap) )
wxBitmapDataObject::wxBitmapDataObject( const wxBitmap &bitmap )
: wxBitmapDataObjectBase( bitmap ),
m_imageBytes(new QByteArray())
{
DoConvertToPng();
}
wxBitmapDataObject::~wxBitmapDataObject()
{
}
void wxBitmapDataObject::SetBitmap(const wxBitmap &bitmap)
{
wxBitmapDataObjectBase::SetBitmap(bitmap);
DoConvertToPng();
}
size_t wxBitmapDataObject::GetDataSize() const
{
return m_imageBytes->size();
}
bool wxBitmapDataObject::GetDataHere(void *buf) const
{
memcpy(buf, m_imageBytes->constData(), GetDataSize());
return true;
}
bool wxBitmapDataObject::SetData(const wxDataFormat &WXUNUSED(format), size_t len, const void *buf)
{
m_imageBytes->resize(len);
memcpy(m_imageBytes->data(), buf, len);
QPixmap pix;
pix.loadFromData(*m_imageBytes);
m_bitmap = wxBitmap(pix);
return true;
}
void wxBitmapDataObject::DoConvertToPng()
{
QBuffer buffer(m_imageBytes.get());
buffer.open(QIODevice::WriteOnly);
m_bitmap.GetHandle()->save(&buffer, "PNG");
}
//#############################################################################