summaryrefslogtreecommitdiff
path: root/vcl/qt5/Qt5Widget.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/qt5/Qt5Widget.cxx')
-rw-r--r--vcl/qt5/Qt5Widget.cxx38
1 files changed, 34 insertions, 4 deletions
diff --git a/vcl/qt5/Qt5Widget.cxx b/vcl/qt5/Qt5Widget.cxx
index 739708148876..7682a4717ae0 100644
--- a/vcl/qt5/Qt5Widget.cxx
+++ b/vcl/qt5/Qt5Widget.cxx
@@ -22,11 +22,15 @@
#include "Qt5Frame.hxx"
#include "Qt5Graphics.hxx"
+#include "Qt5Tools.hxx"
#include <QtGui/QImage>
#include <QtGui/QPainter>
#include <QtGui/QPaintEvent>
+#include <cairo.h>
+#include <headless/svpgdi.hxx>
+
Qt5Widget::Qt5Widget( Qt5Frame &rFrame, QWidget *parent, Qt::WindowFlags f )
: QWidget( parent, f )
, m_pFrame( &rFrame )
@@ -41,14 +45,40 @@ Qt5Widget::~Qt5Widget()
void Qt5Widget::paintEvent( QPaintEvent *pEvent )
{
QPainter p( this );
- p.drawImage( pEvent->rect().topLeft(), *m_pFrame->m_pQImage, pEvent->rect() );
+ if( m_pFrame->m_bUseCairo )
+ {
+ cairo_surface_t *pSurface = m_pFrame->m_pSurface.get();
+ cairo_surface_flush( pSurface );
+
+ QImage aImage( cairo_image_surface_get_data( pSurface ),
+ size().width(), size().height(), Qt5_DefaultFormat32 );
+ p.drawImage( QPoint( 0, 0 ), aImage );
+ p.drawImage( pEvent->rect().topLeft(), aImage, pEvent->rect() );
+ }
+ else
+ p.drawImage( pEvent->rect().topLeft(),
+ *m_pFrame->m_pQImage, pEvent->rect() );
}
void Qt5Widget::resizeEvent( QResizeEvent* )
{
- QImage *pImage = new QImage( m_pFrame->m_pQWidget->size(), QImage::Format_ARGB32 );
- m_pFrame->m_pGraphics->ChangeQImage( pImage );
- m_pFrame->m_pQImage.reset( pImage );
+ if( m_pFrame->m_bUseCairo )
+ {
+ int width = size().width();
+ int height = size().height();
+ cairo_surface_t *pSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
+ cairo_surface_set_user_data( pSurface, SvpSalGraphics::getDamageKey(),
+ &m_pFrame->m_aDamageHandler, nullptr );
+ m_pFrame->m_pSvpGraphics->setSurface( pSurface, basegfx::B2IVector(width, height) );
+ m_pFrame->m_pSurface.reset( pSurface );
+ }
+ else
+ {
+ QImage *pImage = new QImage( size(), Qt5_DefaultFormat32 );
+ m_pFrame->m_pQt5Graphics->ChangeQImage( pImage );
+ m_pFrame->m_pQImage.reset( pImage );
+ }
+
m_pFrame->CallCallback( SalEvent::Resize, nullptr );
}