Implement Copy to Clipboard for images
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -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());
|
||||
}
|
||||
|
||||
|
@@ -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");
|
||||
}
|
||||
|
||||
//#############################################################################
|
||||
|
Reference in New Issue
Block a user