From 810920c471f4e09d0be49c716826983b7b3f3ea0 Mon Sep 17 00:00:00 2001 From: Felix Kauselmann <2039670+selmf@users.noreply.github.com> Date: Sun, 2 Nov 2014 20:25:57 +0100 Subject: [PATCH] Scale pages in double page mode to the same height --- YACReader/render.cpp | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/YACReader/render.cpp b/YACReader/render.cpp index f0cc6797..552ad553 100644 --- a/YACReader/render.cpp +++ b/YACReader/render.cpp @@ -490,36 +490,54 @@ QPixmap * Render::getCurrentDoublePage() { QPoint leftpage(0,0); QPoint rightpage(0,0); + QSize leftsize; + QSize rightsize; int totalWidth,totalHeight; switch (imageRotation) { case 0: totalHeight = qMax(buffer[currentPageBufferedIndex]->height(), buffer[currentPageBufferedIndex+1]->height()); - totalWidth = buffer[currentPageBufferedIndex]->width() + buffer[currentPageBufferedIndex+1]->width(); - rightpage.setX(buffer[currentPageBufferedIndex]->width()); + leftsize.setHeight(totalHeight); + rightsize.setHeight(totalHeight); + leftsize.setWidth(buffer[currentPageBufferedIndex]->width() + (totalHeight - buffer[currentPageBufferedIndex]->height())); + rightsize.setWidth(buffer[currentPageBufferedIndex+1]->width() + (totalHeight - buffer[currentPageBufferedIndex+1]->height())); + totalWidth = leftsize.rwidth() + rightsize.rwidth(); + rightpage.setX(leftsize.rwidth()); break; case 90: totalWidth = qMax(buffer[currentPageBufferedIndex]->width(), buffer[currentPageBufferedIndex+1]->width()); - totalHeight = buffer[currentPageBufferedIndex]->height() + buffer[currentPageBufferedIndex+1]->height(); - rightpage.setY(buffer[currentPageBufferedIndex]->height()); + leftsize.setWidth(totalWidth); + rightsize.setWidth(totalWidth); + leftsize.setHeight(buffer[currentPageBufferedIndex]->height() + (totalWidth - buffer[currentPageBufferedIndex]->width())); + rightsize.setHeight(buffer[currentPageBufferedIndex+1]->height() + (totalWidth - buffer[currentPageBufferedIndex+1]->width())); + totalHeight = leftsize.rheight() + rightsize.rheight(); + rightpage.setY(leftsize.rheight()); break; case 180: totalHeight = qMax(buffer[currentPageBufferedIndex]->height(), buffer[currentPageBufferedIndex+1]->height()); - totalWidth = buffer[currentPageBufferedIndex]->width() + buffer[currentPageBufferedIndex+1]->width(); - leftpage.setX(buffer[currentPageBufferedIndex+1]->width()); + leftsize.setHeight(totalHeight); + rightsize.setHeight(totalHeight); + leftsize.setWidth(buffer[currentPageBufferedIndex]->width() + (totalHeight - buffer[currentPageBufferedIndex]->height())); + rightsize.setWidth(buffer[currentPageBufferedIndex+1]->width() + (totalHeight - buffer[currentPageBufferedIndex+1]->height())); + totalWidth = leftsize.rwidth() + rightsize.rwidth(); + leftpage.setX(rightsize.rwidth()); break; case 270: totalWidth = qMax(buffer[currentPageBufferedIndex]->width(), buffer[currentPageBufferedIndex+1]->width()); - totalHeight = buffer[currentPageBufferedIndex]->height() + buffer[currentPageBufferedIndex+1]->height(); - leftpage.setY(buffer[currentPageBufferedIndex+1]->height()); + leftsize.setWidth(totalWidth); + rightsize.setWidth(totalWidth); + leftsize.setHeight(buffer[currentPageBufferedIndex]->height() + (totalWidth - buffer[currentPageBufferedIndex]->width())); + rightsize.setHeight(buffer[currentPageBufferedIndex+1]->height() + (totalWidth - buffer[currentPageBufferedIndex+1]->width())); + totalHeight = leftsize.rheight() + rightsize.rheight(); + leftpage.setY(rightsize.rheight()); break; default: return NULL; } QPixmap * page = new QPixmap(totalWidth, totalHeight); QPainter painter(page); - painter.drawImage(leftpage, *buffer[currentPageBufferedIndex]); - painter.drawImage(rightpage, *buffer[currentPageBufferedIndex+1]); + painter.drawImage(QRect(leftpage,leftsize), *buffer[currentPageBufferedIndex]); + painter.drawImage(QRect(rightpage,rightsize), *buffer[currentPageBufferedIndex+1]); return page; } else