do not ask spectre to rotate pages as it seems not to work at all

fixes rendering of bug210499.ps

svn path=/trunk/KDE/kdegraphics/okular/; revision=1039609
remotes/origin/KDE/4.4
Albert Astals Cid 17 years ago
parent 4d730a34ca
commit f074fc2e15
  1. 2
      generators/spectre/generator_ghostview.cpp
  2. 37
      generators/spectre/rendererthread.cpp
  3. 4
      generators/spectre/rendererthread.h

@ -240,7 +240,7 @@ void GSGenerator::generatePixmap( Okular::PixmapRequest * req )
gsreq.textAAbits = textAA; gsreq.textAAbits = textAA;
gsreq.graphicsAAbits = graphicsAA; gsreq.graphicsAAbits = graphicsAA;
gsreq.rotation = req->page()->orientation() * 90; gsreq.orientation = req->page()->orientation();
if (req->page()->rotation() == Okular::Rotation90 || if (req->page()->rotation() == Okular::Rotation90 ||
req->page()->rotation() == Okular::Rotation270) req->page()->rotation() == Okular::Rotation270)
{ {

@ -56,13 +56,18 @@ void GSRendererThread::run()
spectre_render_context_set_scale(m_renderContext, req.magnify, req.magnify); 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_use_platform_fonts(m_renderContext, req.platformFonts);
spectre_render_context_set_antialias_bits(m_renderContext, req.graphicsAAbits, req.textAAbits); 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; unsigned char *data = NULL;
int row_length = 0; int row_length = 0;
int wantedWidth = req.request->width(); int wantedWidth = req.request->width();
int wantedHeight = req.request->height(); int wantedHeight = req.request->height();
if ( req.orientation % 2 )
qSwap( wantedWidth, wantedHeight );
spectre_page_render(req.spectrePage, m_renderContext, &data, &row_length); spectre_page_render(req.spectrePage, m_renderContext, &data, &row_length);
QImage img; QImage img;
@ -76,10 +81,36 @@ void GSRendererThread::run()
QImage aux(data, row_length / 4, wantedHeight, QImage::Format_RGB32); QImage aux(data, row_length / 4, wantedHeight, QImage::Format_RGB32);
img = QImage(aux.copy(0, 0, wantedWidth, wantedHeight)); 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()); QImage *image = new QImage(img.copy());
free(data); 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: " kWarning(4711).nospace() << "Generated image does not match wanted size: "
<< "[" << image->width() << "x" << image->height() << "] vs requested " << "[" << image->width() << "x" << image->height() << "] vs requested "
@ -96,3 +127,5 @@ void GSRendererThread::run()
} }
#include "rendererthread.moc" #include "rendererthread.moc"
/* kate: replace-tabs on; indent-width 4; */

@ -35,7 +35,7 @@ struct GSRendererThreadRequest
, textAAbits(1) , textAAbits(1)
, graphicsAAbits(1) , graphicsAAbits(1)
, magnify(1.0) , magnify(1.0)
, rotation(0) , orientation(0)
, platformFonts(true) , platformFonts(true)
{} {}
@ -45,7 +45,7 @@ struct GSRendererThreadRequest
int textAAbits; int textAAbits;
int graphicsAAbits; int graphicsAAbits;
double magnify; double magnify;
int rotation; int orientation;
bool platformFonts; bool platformFonts;
}; };
Q_DECLARE_TYPEINFO(GSRendererThreadRequest, Q_MOVABLE_TYPE); Q_DECLARE_TYPEINFO(GSRendererThreadRequest, Q_MOVABLE_TYPE);

Loading…
Cancel
Save