Index: scribus/ui/pagepalette_pages.cpp
===================================================================
--- scribus/ui/pagepalette_pages.cpp	(Revision 26306)
+++ scribus/ui/pagepalette_pages.cpp	(Arbeitskopie)
@@ -191,22 +191,39 @@
 		return;
 	}
 
-//	qDebug() << Q_FUNC_INFO << "- start page preview update";
+	if (pageViewWidget->pageGrid()->rowHeight() == PageGrid::Small)
+	{
+		for (int i = 0; i < currView->m_doc->DocPages.count(); ++i)
+		{
+			if (i < pageViewWidget->pageGrid()->pageList.count())
+			{
+				ScPage page = *currView->m_doc->DocPages.at(i);
+				double pageRatio = page.width() / page.height();
 
-	PageToPixmapFlags flags = Pixmap_DrawFrame | Pixmap_DrawBackground | Pixmap_DontReloadImages | Pixmap_NoCanvasModeChange;
-	QMap<int, QImage> previews = currView->PagesToPixmap(pageViewWidget->pageGrid()->pageHeight(), -1, flags);
+				PageCell *pc = pageViewWidget->pageGrid()->pageList.at(i);
+				pc->pagePreview = QPixmap();
+				pc->pageRatio = pageRatio;
+			}
+		}
+	}
+	else
+	{
+		PageToPixmapFlags flags = Pixmap_DrawFrame | Pixmap_DrawBackground | Pixmap_DontReloadImages | Pixmap_NoCanvasModeChange;
+		QMap<int, QImage> previews = currView->PagesToPixmap(pageViewWidget->pageGrid()->pageHeight() * qApp->devicePixelRatio(), -1, flags);
 
-	for (int i = 0; i < currView->m_doc->DocPages.count(); ++i)
-	{
-		if (previews.contains(i) && i < pageViewWidget->pageGrid()->pageList.count())
+		for (int i = 0; i < currView->m_doc->DocPages.count(); ++i)
 		{
-			ScPage page = *currView->m_doc->DocPages.at(i);
-			double pageRatio = page.width() / page.height();
-			QPixmap pix = ( previews.contains(i) ) ? QPixmap::fromImage( previews.value(i) ) : QPixmap();
+			if (previews.contains(i) && i < pageViewWidget->pageGrid()->pageList.count())
+			{
+				ScPage page = *currView->m_doc->DocPages.at(i);
+				double pageRatio = page.width() / page.height();
+				QPixmap pix = ( previews.contains(i) ) ? QPixmap::fromImage( previews.value(i) ) : QPixmap();
+				pix.setDevicePixelRatio(qApp->devicePixelRatio());
 
-			PageCell *pc = pageViewWidget->pageGrid()->pageList.at(i);
-			pc->pagePreview = pix;
-			pc->pageRatio = pageRatio;
+				PageCell *pc = pageViewWidget->pageGrid()->pageList.at(i);
+				pc->pagePreview = pix;
+				pc->pageRatio = pageRatio;
+			}
 		}
 	}
 
Index: scribus/ui/pagepalette_widgets.cpp
===================================================================
--- scribus/ui/pagepalette_widgets.cpp	(Revision 26306)
+++ scribus/ui/pagepalette_widgets.cpp	(Arbeitskopie)
@@ -23,6 +23,7 @@
 
 #include "iconmanager.h"
 #include "pagepalette_widgets.h"
+#include "prefsfile.h"
 #include "prefsmanager.h"
 #include "scribusapp.h"
 #include "util_gui.h"
@@ -224,6 +225,10 @@
 	calculateSize();
 	initContextMenu();
 
+	PrefsContext *prefTileSize = PrefsManager::instance().prefsFile->getContext("PagePalette");
+	int size = prefTileSize->getInt("pagePreviewSize", m_rowHeight);
+	setRowHeight(size);
+
 //	connect(this, &PageGrid::customContextMenuRequested, this, &PageGrid::showContextMenu);
 
 }
@@ -244,19 +249,24 @@
 	m_documentPageSize = pageSize;
 }
 
-void PageGrid::setRowHeight(int size)
+void PageGrid::setRowHeight(int height)
 {
-	// clamp size from 48 to 256)
-	m_rowHeight = qBound(48, size, 256);
+	// clamp sizes
+	m_rowHeight = qBound(64, height, 128);
+	m_rowSpace = qBound(8, height / 8, 16);
+
 	//	updateTileSize();
 	calculateSize();
 	update();
+
+	PrefsContext *prefTileSize = PrefsManager::instance().prefsFile->getContext("PagePalette");
+	prefTileSize->set("pagePreviewSize", height);
+	PrefsManager::instance().prefsFile->write();
 }
 
 void PageGrid::setFontSize(int size)
 {
 	m_fontSize = size;
-	//	updateTileSize();
 	update();
 }
 
@@ -297,18 +307,6 @@
 	update();
 }
 
-//void PageGrid::setPageList(const QList<PageCell *> list)
-//{
-//	m_pageList = list;
-//	calculateSize();
-//	//	update();
-//}
-
-//QList<PageCell *> PageGrid::pageList() const
-//{
-//	return m_pageList;
-//}
-
 int PageGrid::pageId(int r, int c, bool clampId)
 {
 
@@ -673,7 +671,7 @@
 	update();
 }
 
-void PageGrid::drawTile(QPainter &painter, QPoint cellPosition, PageCell *tile, bool selected, bool hovered, QColor labelColor)
+void PageGrid::drawTile(QPainter &painter, QPoint cellPosition, PageCell *tile, bool selected, bool hovered, QColor labelColor, bool isRight)
 {
 
 	if (tile == nullptr)
@@ -680,38 +678,54 @@
 		return;
 
 	QFont font(this->font().family(), m_fontSize, QFont::Normal);
+	QFont fontName(this->font().family(), m_fontSize * 0.8, QFont::Normal);
 	QRect rectPage(cellPosition.x(), cellPosition.y(), tile->pageWidthByHeight(pageHeight()), pageHeight());
 	QRect rectCell(cellPosition.x(), cellPosition.y(), tile->pageWidthByHeight(pageHeight()), m_rowHeight);
-	//	QRect rectMasterPageMarker(cellPosition.x(), cellPosition.y() + rectPage.height(), rectPage.width(), 4);
 
+	QString pageName = tile->pageName;
+	int pageNameHyphen = tile->pageName.indexOf("-");
+	// Fail fast if no hyphen or nothing to the left of it
+	if (pageNameHyphen > 0)
+	{
+		// Trim whitespace and ensure at least 1-4 chars or ignore it
+		QString tmp = tile->pageName.left(pageNameHyphen).trimmed();
+		if (tmp.length() > 0 && tmp.length() < 5)
+			pageName = tmp;
+	}
+
 	painter.save();
 
 	// Draw Page
-	painter.setBrush(Qt::NoBrush);
-	//	painter.setPen( QPen(Qt::black, 1) );
-	painter.drawPixmap(rectPage, tile->pagePreview, tile->pagePreview.rect());
-	//	painter.drawRect(rectPage);
+	if (m_rowHeight == TileSize::Small)
+		painter.fillRect(rectPage, QBrush(Qt::white));
+	else
+		painter.drawPixmap(rectPage, tile->pagePreview, tile->pagePreview.rect());
 
 	// Setup painter for text drawing
+	painter.setBrush(Qt::NoBrush);
 	painter.setRenderHint(QPainter::TextAntialiasing, true);
 	painter.setFont(font);
 
 	// Draw Page Number
-	//painter.setPen(QPen(palette().windowText().color()));
 	painter.setPen(QPen( labelColor ));
 	painter.drawText(rectCell, Qt::AlignHCenter|Qt::AlignBottom | Qt::TextWordWrap, QString::number(tile->pageNumber + 1));
 
-	// Draw Page Name
-	painter.setBackgroundMode(Qt::OpaqueMode);
-	painter.setBackground(QColor(0,0,0,128));
-	painter.setPen(QPen(Qt::white));
-	painter.drawText(rectPage.adjusted(2,2,-2,-2), Qt::AlignTop | Qt::AlignLeft |Qt::TextWordWrap, tile->pageName);
+	// Draw Page Name	
+	painter.setFont((pageNameHyphen > 0) ? font : fontName);
+	if (m_rowHeight == TileSize::Small)
+	{
+		painter.setPen(Qt::black);
+		painter.drawText(rectPage.adjusted(1, 1, 0, 0), Qt::AlignVCenter | Qt::AlignCenter |Qt::TextWordWrap, pageName);
+	}
+	else
+	{
+		painter.setBackgroundMode(Qt::OpaqueMode);
+		painter.setBackground(QColor(102, 102, 102));
+		painter.setPen(Qt::white);
+		painter.drawText(rectPage.adjusted(1, 1, 0, 0), Qt::AlignTop | ((isRight) ? Qt::AlignRight : Qt::AlignLeft) |Qt::TextWordWrap, pageName);
+	}
 
-	// Draw Master Page Color
-	//	painter.setPen(Qt::NoPen);
-	//	painter.fillRect(rectMasterPageMarker, tile->masterPageColor());
 
-
 	// Draw selection
 	//	if(selected)
 	//	{
@@ -731,11 +745,6 @@
 		painter.drawRect(rectPage);
 	}
 
-	// tmp border
-	//	painter.setPen( Qt::magenta );
-	//	painter.setBrush(Qt::NoBrush);
-	//	painter.drawRect(rectCell);
-
 	painter.restore();
 
 }
@@ -745,25 +754,17 @@
 	m_contextMenu->clear();
 
 	m_contextMenu->addAction(tr("&Small Preview"), [this]() {
-		m_rowSpace = 8;
-		setRowHeight(64);
+		setRowHeight(QVariant(TileSize::Small).toInt());
 		emit previewSizeChanged();
 	});
 	m_contextMenu->addAction(tr("&Medium Preview"), [this]() {
-		m_rowSpace = 12;
-		setRowHeight(96);
+		setRowHeight(QVariant(TileSize::Medium).toInt());
 		emit previewSizeChanged();
 	});
 	m_contextMenu->addAction(tr("&Large Preview"), [this]() {
-		m_rowSpace = 16;
-		setRowHeight(128);
+		setRowHeight(QVariant(TileSize::Large).toInt());
 		emit previewSizeChanged();
 	});
-//	m_contextMenu->addAction(tr("&Extra Large Preview"), [this]() {
-//		m_rowSpace = 20;
-//		setRowHeight(196);
-//		emit previewSizeChanged();
-//	});
 }
 
 void PageGrid::showContextMenu(QPoint pos)
@@ -820,7 +821,8 @@
 				if (id == m_selectedPage)
 					selectedPageRect = QRect(x, y, cell->pageWidthByHeight(pageHeight()), pageHeight() );
 				QPoint pos(x,y);
-				drawTile(painter, pos, cell, (id == m_selectedPage) ? true : false, (id == m_hoveredPage) ? true : false, foregroundColor);
+				bool isRightPage = (m_cellsInGroup == c + 1 && m_cellsInGroup > 1);
+				drawTile(painter, pos, cell, (id == m_selectedPage) ? true : false, (id == m_hoveredPage) ? true : false, foregroundColor, isRightPage);
 
 				// add space only between pages
 				if ((c + 1) % m_cellsInGroup == 0 || count == pageCount() + m_pageOffset -1)
Index: scribus/ui/pagepalette_widgets.h
===================================================================
--- scribus/ui/pagepalette_widgets.h	(Revision 26306)
+++ scribus/ui/pagepalette_widgets.h	(Arbeitskopie)
@@ -66,198 +66,205 @@
 	void delMasterRequest(QString);
 
 protected:
-	void mouseReleaseEvent(QMouseEvent *m);
-	void mousePressEvent(QMouseEvent* e);
-	void mouseMoveEvent(QMouseEvent* e);
-	virtual void keyPressEvent(QKeyEvent* e);
-
+	void mouseReleaseEvent(QMouseEvent *m);
+	void mousePressEvent(QMouseEvent* e);
+	void mouseMoveEvent(QMouseEvent* e);
+	virtual void keyPressEvent(QKeyEvent* e);
+
 	QListWidgetItem *m_currItem {nullptr};
-	QPoint m_mousePos;
+	QPoint m_mousePos {QPoint()};
 	bool m_mousePressed {false};
 	bool m_thumb {false};
 
 };
 
-struct SCRIBUS_API PageCell
+struct SCRIBUS_API PageCell
 {
-	QString pageName;
-	uint pageNumber;
-	QPixmap pagePreview;
-	QColor masterPageColor;
-	double pageRatio;
-
-	PageCell(const QString& text, uint nr, const QPixmap& pix, double pageRatio, const QColor color = Qt::black) :
-		pageName(text), pageNumber(nr), pagePreview(pix), masterPageColor(color), pageRatio(pageRatio) {}
-
-	int pageWidthByHeight(int height) { return qCeil(height * pageRatio); }
-
-};
-
-/* ********************************************************************************* *
- *
- * Page Grid
- *
- * ********************************************************************************* */
-
-class SCRIBUS_API PageGrid : public QWidget
-{
+	QString pageName {QString()};
+	uint pageNumber {1};
+	QPixmap pagePreview {QPixmap()};
+	QColor masterPageColor {QColor()};
+	double pageRatio {1.4142}; // IsoA
+
+	PageCell(const QString& text, uint nr, const QPixmap& pix, double pageRatio, const QColor color = Qt::black) :
+		pageName(text), pageNumber(nr), pagePreview(pix), masterPageColor(color), pageRatio(pageRatio) {}
+
+	int pageWidthByHeight(int height) { return qCeil(height * pageRatio); }
+
+};
+
+/* ********************************************************************************* *
+ *
+ * Page Grid
+ *
+ * ********************************************************************************* */
+
+class SCRIBUS_API PageGrid : public QWidget
+{
 	Q_OBJECT
 
-	friend class PageViewer;
-
+	friend class PageViewer;
+
 public:
-	explicit PageGrid(QWidget *parent = nullptr);
 
-	void setPageInGroup(int amount);
+	enum TileSize {
+		Small = 64,
+		Medium = 96,
+		Large = 128
+	};
 
-	void setDocumentPageSize(QSizeF pageSize);
-
-	void setRowHeight(int size);
-	int rowHeight() { return m_rowHeight; };
-
-	void setFontSize(int size);
-	int fontSize() { return m_fontSize; };
-
-	void setSelectionColor(QColor color);
-	QColor selectionColor() { return m_colorSelection; };
-
-	void setPageLayout(PageLayout layout);
-	PageLayout pageLayout() { return m_pageLayout; };
-
-	void setPageOffset(int pageCount);
-	int pageOffset() { return m_pageOffset; };
-
-	QList<PageCell*> pageList;
-
-	int pageId(int r, int c, bool clampId = true);
-	int pageId(QPoint pos, bool clampId = true);
-
-	PageCell* getPageItem(int pageIndex);
-
-	int pageCount();
-	int pageHeight();
-
-	void setSelectedPage(int pageID);
-	int selectedPage() { return m_selectedPage; };
-
-	void deleteSelectedPage();
-	void clear();
-	void calculateSize();
-
-private:
-
-	enum State {
-		None = 0,
-		StartDrag = 1,
-		StartSelection = 2
-	};
-
-	enum Mode {
-		Invalid = 0,
-		Insert = 1,
-		Add = 2,
-		Hover = 3
-	};
-
-	QSize m_pageSize;
-	QSizeF m_documentPageSize;
-	int m_rowHeight {96};
-	int m_cellGap {1};
-	int m_groupSpace {16};
-	int m_rowSpace {12};
-	int m_fontSize {8}; // font size of number label and masterpage label
-	int m_labelGap {8}; // gap between page and number label
-	QRect m_rectInsert {QRect()};
-	QRect m_rectSelection {QRect()};
-	QRect m_rectAdd {QRect()};
-	QColor m_colorSelection;
-	int m_selectedPage {-1};
-	int m_hoveredPage {-1};
-	bool m_enableSelection {false};
-	QPoint m_mousePos;
-	State m_state {State::None};
-	PageLayout m_pageLayout {PageLayout::singlePage};
-	int m_cellsInGroup {1}; // 1 for single page
-	int m_pageOffset {0};
-	QMenu *m_contextMenu;
-
-	int columns();
-	int rows();
-
-	int columnAt(QPoint pos);
-	int rowAt(QPoint pos);
-	int rowWidth(int rowId);
-	QRect rectAt(int row, int col);
-
-	QSize dummyPageSize();
-
-	QPoint mapPosToCell(QPoint pos, Mode &mode);
-	QPoint pagePosition(int pageId);
-
-	int clampPageId(int pageID, bool allowPlusOne = false);
-
-	void updateSelectedPage(QPoint pos);
-	void updateModeMarker(QPoint pos);
-	void clearUi();
-	void drawTile(QPainter &painter, QPoint cellPosition, PageCell * tile, bool selected, bool hovered, QColor labelColor);
-	void initContextMenu();
-
-private slots:
-	void showContextMenu(QPoint pos);
-
-protected:
-
-	void paintEvent(QPaintEvent *event) override;
-	void resizeEvent(QResizeEvent *event) override;
-
-	void dropEvent(QDropEvent * event) override;
-	void dragEnterEvent(QDragEnterEvent *event) override;
-	void dragLeaveEvent(QDragLeaveEvent *event) override;
-	void dragMoveEvent(QDragMoveEvent *event) override;
-	void mouseReleaseEvent(QMouseEvent *event) override;
-	void mousePressEvent(QMouseEvent* event) override;
-	void mouseMoveEvent(QMouseEvent* event) override;
-
+	explicit PageGrid(QWidget *parent = nullptr);
+
+	void setPageInGroup(int amount);
+
+	void setDocumentPageSize(QSizeF pageSize);
+
+	void setRowHeight(int height);
+	int rowHeight() { return m_rowHeight; };
+
+	void setFontSize(int size);
+	int fontSize() { return m_fontSize; };
+
+	void setSelectionColor(QColor color);
+	QColor selectionColor() { return m_colorSelection; };
+
+	void setPageLayout(PageLayout layout);
+	PageLayout pageLayout() { return m_pageLayout; };
+
+	void setPageOffset(int pageCount);
+	int pageOffset() { return m_pageOffset; };
+
+	QList<PageCell*> pageList {QList<PageCell*>()};
+
+	int pageId(int r, int c, bool clampId = true);
+	int pageId(QPoint pos, bool clampId = true);
+
+	PageCell* getPageItem(int pageIndex);
+
+	int pageCount();
+	int pageHeight();
+
+	void setSelectedPage(int pageID);
+	int selectedPage() { return m_selectedPage; };
+
+	void deleteSelectedPage();
+	void clear();
+	void calculateSize();
+
+private:
+
+	enum State {
+		None = 0,
+		StartDrag = 1,
+		StartSelection = 2
+	};
+
+	enum Mode {
+		Invalid = 0,
+		Insert = 1,
+		Add = 2,
+		Hover = 3
+	};
+
+	QSize m_pageSize {QSize()};
+	QSizeF m_documentPageSize {QSizeF()};
+	int m_rowHeight {QVariant(TileSize::Medium).toInt()};
+	int m_cellGap {1};
+	int m_groupSpace {16};
+	int m_rowSpace {12};
+	int m_fontSize {QFont().pointSize()}; // font size of number label and masterpage label
+	int m_labelGap {8}; // gap between page and number label
+	QRect m_rectInsert {QRect()};
+	QRect m_rectSelection {QRect()};
+	QRect m_rectAdd {QRect()};
+	QColor m_colorSelection;
+	int m_selectedPage {-1};
+	int m_hoveredPage {-1};
+	bool m_enableSelection {false};
+	QPoint m_mousePos {QPoint()};
+	State m_state {State::None};
+	PageLayout m_pageLayout {PageLayout::singlePage};
+	int m_cellsInGroup {1}; // 1 for single page
+	int m_pageOffset {0};
+	QMenu *m_contextMenu {nullptr};
+
+	int columns();
+	int rows();
+
+	int columnAt(QPoint pos);
+	int rowAt(QPoint pos);
+	int rowWidth(int rowId);
+	QRect rectAt(int row, int col);
+
+	QSize dummyPageSize();
+
+	QPoint mapPosToCell(QPoint pos, Mode &mode);
+	QPoint pagePosition(int pageId);
+
+	int clampPageId(int pageID, bool allowPlusOne = false);
+
+	void updateSelectedPage(QPoint pos);
+	void updateModeMarker(QPoint pos);
+	void clearUi();
+	void drawTile(QPainter &painter, QPoint cellPosition, PageCell * tile, bool selected, bool hovered, QColor labelColor, bool isRight);
+	void initContextMenu();
+
+private slots:
+	void showContextMenu(QPoint pos);
+
+protected:
+
+	void paintEvent(QPaintEvent *event) override;
+	void resizeEvent(QResizeEvent *event) override;
+
+	void dropEvent(QDropEvent * event) override;
+	void dragEnterEvent(QDragEnterEvent *event) override;
+	void dragLeaveEvent(QDragLeaveEvent *event) override;
+	void dragMoveEvent(QDragMoveEvent *event) override;
+	void mouseReleaseEvent(QMouseEvent *event) override;
+	void mousePressEvent(QMouseEvent* event) override;
+	void mouseMoveEvent(QMouseEvent* event) override;
+
 signals:
-	void useTemplate(QString, int);
-	void newPage(int, QString);
+	void useTemplate(QString, int);
+	void newPage(int, QString);
 	void movePage(int, int);
-	void click(int, int);
+	void click(int, int);
 	void delPageRequest(int);
-	void previewSizeChanged();
-};
+	void previewSizeChanged();
+};
 
-/* ********************************************************************************* *
- *
- * Page Viewer
- *
- * ********************************************************************************* */
-
-class SCRIBUS_API PageViewer : public QWidget
-{
-
-public:
-	PageViewer(QWidget *parent = nullptr);
-	~PageViewer() {};
-
-	PageGrid *pageGrid();
-	void scrollToPage(int pageId);
-
-
+/* ********************************************************************************* *
+ *
+ * Page Viewer
+ *
+ * ********************************************************************************* */
+
+class SCRIBUS_API PageViewer : public QWidget
+{
+
+public:
+	PageViewer(QWidget *parent = nullptr);
+	~PageViewer() {};
+
+	PageGrid *pageGrid();
+	void scrollToPage(int pageId);
+
+
 protected:
-	PageGrid *m_pageGrid;
-	QScrollArea* m_scroll;
-
-	virtual void keyPressEvent(QKeyEvent* event);
-
+	PageGrid *m_pageGrid {nullptr};
+	QScrollArea* m_scroll {nullptr};
+
+	virtual void keyPressEvent(QKeyEvent* event);
+
 };
 
-/* ********************************************************************************* *
- *
- * Trash bin
- *
- * ********************************************************************************* */
-
+/* ********************************************************************************* *
+ *
+ * Trash bin
+ *
+ * ********************************************************************************* */
+
 class SCRIBUS_API TrashBin : public QLabel
 {
 	Q_OBJECT
@@ -266,17 +273,17 @@
 	TrashBin( QWidget * parent );
 	~TrashBin() {};
 
-	void dragEnterEvent( QDragEnterEvent *e );
-	void dragLeaveEvent( QDragLeaveEvent * );
-	void dropEvent( QDropEvent * e );
-
+	void dragEnterEvent( QDragEnterEvent *e );
+	void dragLeaveEvent( QDragLeaveEvent * );
+	void dropEvent( QDropEvent * e );
+
 protected:
-	QPixmap normal;
-	QPixmap open;
+	QPixmap normal {QPixmap()};
+	QPixmap open {QPixmap()};
 
 protected slots:
 	void iconSetChange();
-
+
 signals:
 	void delPageRequest(int);
 	void delMasterRequest(QString);
