File indexing completed on 2024-04-28 04:32:02

0001 /*
0002  * Copyright (C) 2010-2015 by Stephen Allewell
0003  * steve.allewell@gmail.com
0004  *
0005  * This program is free software; you can redistribute it and/or modify
0006  * it under the terms of the GNU General Public License as published by
0007  * the Free Software Foundation; either version 2 of the License, or
0008  * (at your option) any later version.
0009  */
0010 
0011 #include "LibraryListWidgetItem.h"
0012 
0013 #include <QPainter>
0014 
0015 #include "LibraryPattern.h"
0016 #include "Pattern.h"
0017 #include "Renderer.h"
0018 #include "StitchData.h"
0019 
0020 #include "configuration.h"
0021 
0022 LibraryListWidgetItem::LibraryListWidgetItem(QListWidget *listWidget, LibraryPattern *libraryPattern)
0023     : QListWidgetItem(listWidget)
0024 {
0025     setLibraryPattern(libraryPattern);
0026 }
0027 
0028 void LibraryListWidgetItem::setLibraryPattern(LibraryPattern *libraryPattern)
0029 {
0030     static Renderer *renderer = nullptr;
0031 
0032     if (renderer == nullptr) {
0033         renderer = new Renderer();
0034         renderer->setRenderStitchesAs(Configuration::EnumRenderer_RenderStitchesAs::Stitches);
0035         renderer->setRenderBackstitchesAs(Configuration::EnumRenderer_RenderBackstitchesAs::ColorLines);
0036         renderer->setRenderKnotsAs(Configuration::EnumRenderer_RenderKnotsAs::ColorBlocks);
0037     }
0038 
0039     m_libraryPattern = libraryPattern;
0040 
0041     StitchData &stitches = libraryPattern->pattern()->stitches();
0042     int cellSize = 256 / std::max(stitches.width(), stitches.height());
0043     QPixmap pixmap(stitches.width() * cellSize, stitches.height() * cellSize);
0044     pixmap.fill(Qt::white);
0045 
0046     QPainter painter(&pixmap);
0047     painter.setRenderHint(QPainter::Antialiasing, true);
0048     painter.setWindow(0, 0, stitches.width(), stitches.height());
0049 
0050     renderer->render(&painter, libraryPattern->pattern(), pixmap.rect(), true, true, true, true, -1);
0051 
0052     setIcon(QIcon(pixmap));
0053 }
0054 
0055 LibraryPattern *LibraryListWidgetItem::libraryPattern()
0056 {
0057     return m_libraryPattern;
0058 }