|
|
|
|
@ -56,13 +56,18 @@ void GSRendererThread::run() |
|
|
|
|
spectre_render_context_set_scale(m_renderContext, req.magnify, req.magnify); |
|
|
|
|
spectre_render_context_set_use_platform_fonts(m_renderContext, req.platformFonts); |
|
|
|
|
spectre_render_context_set_antialias_bits(m_renderContext, req.graphicsAAbits, req.textAAbits); |
|
|
|
|
spectre_render_context_set_rotation(m_renderContext, req.rotation); |
|
|
|
|
// Do not use spectre_render_context_set_rotation makes some files not render correctly, e.g. bug210499.ps
|
|
|
|
|
// so we basically do the rendering without any rotation and then rotate to the orientation as needed
|
|
|
|
|
// spectre_render_context_set_rotation(m_renderContext, req.orientation);
|
|
|
|
|
|
|
|
|
|
unsigned char *data = NULL; |
|
|
|
|
int row_length = 0; |
|
|
|
|
int wantedWidth = req.request->width(); |
|
|
|
|
int wantedHeight = req.request->height(); |
|
|
|
|
|
|
|
|
|
if ( req.orientation % 2 ) |
|
|
|
|
qSwap( wantedWidth, wantedHeight ); |
|
|
|
|
|
|
|
|
|
spectre_page_render(req.spectrePage, m_renderContext, &data, &row_length); |
|
|
|
|
|
|
|
|
|
QImage img; |
|
|
|
|
@ -76,10 +81,36 @@ void GSRendererThread::run() |
|
|
|
|
QImage aux(data, row_length / 4, wantedHeight, QImage::Format_RGB32); |
|
|
|
|
img = QImage(aux.copy(0, 0, wantedWidth, wantedHeight)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch (req.orientation) |
|
|
|
|
{ |
|
|
|
|
case Okular::Rotation90: |
|
|
|
|
{ |
|
|
|
|
QMatrix m; |
|
|
|
|
m.rotate(90); |
|
|
|
|
img = img.transformed( m ); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
case Okular::Rotation180: |
|
|
|
|
{ |
|
|
|
|
QMatrix m; |
|
|
|
|
m.rotate(180); |
|
|
|
|
img = img.transformed( m ); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case Okular::Rotation270: |
|
|
|
|
{ |
|
|
|
|
QMatrix m; |
|
|
|
|
m.rotate(270); |
|
|
|
|
img = img.transformed( m ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QImage *image = new QImage(img.copy()); |
|
|
|
|
free(data); |
|
|
|
|
|
|
|
|
|
if (image->width() != wantedWidth || image->height() != wantedHeight) |
|
|
|
|
if (image->width() != req.request->width() || image->height() != req.request->height()) |
|
|
|
|
{ |
|
|
|
|
kWarning(4711).nospace() << "Generated image does not match wanted size: " |
|
|
|
|
<< "[" << image->width() << "x" << image->height() << "] vs requested " |
|
|
|
|
@ -96,3 +127,5 @@ void GSRendererThread::run() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#include "rendererthread.moc" |
|
|
|
|
|
|
|
|
|
/* kate: replace-tabs on; indent-width 4; */ |
|
|
|
|
|