#include "getsuyomi.hpp" #include namespace getsuyomi { Getsuyomi::Getsuyomi(QWidget* parent) : QWidget(parent) { // m_pageLeft.setContentsMargins(0, 1, 0, 1); // m_pageRight.setContentsMargins(0, 1, 0, 1); m_layout = new QHBoxLayout(); m_layout->addStretch(); m_layout->addWidget(&m_pageLeft); m_layout->addWidget(&m_pageRight); m_layout->addStretch(); // m_layout->setContentsMargins(0, 1, 0, 1); setLayout(m_layout); } Getsuyomi::~Getsuyomi() { if (m_archive != nullptr) { delete m_archive; } } void Getsuyomi::setArchive(Archive* archive) { if (archive == m_archive) { return; } delete (m_archive); m_archive = archive; m_pageNumber = 0; setPages(); } void Getsuyomi::next() { auto numPages = m_archive->numPages(); size_t increment = 1; if (m_pageLayout != PageLayout::Single) { increment = 2; } if ((m_pageNumber + increment) >= numPages) { return; } m_pageNumber += increment; setPages(); } void Getsuyomi::back() { // auto numPages = m_archive->numPages(); size_t decrement = 1; if (m_pageLayout != PageLayout::Single) { decrement = 2; } if (m_pageNumber < decrement) { m_pageNumber = 0; decrement = 0; } m_pageNumber -= decrement; setPages(); } void Getsuyomi::setPageLayout(PageLayout newPageLayout) { m_pageLayout = newPageLayout; setPages(); } void Getsuyomi::setPages() { m_pageLeft.setPixmap(QPixmap()); m_pageRight.setPixmap(QPixmap()); if (m_archive == nullptr) { return; } switch (m_pageLayout) { case PageLayout::Dual: return setPagesDual(); case PageLayout::Manga: return setPagesManga(); case PageLayout::Single: default: return setPagesNormal(); } } void Getsuyomi::setPagesNormal() { auto page1 = m_archive->getPage(m_pageNumber); auto& label1 = m_pageLeft; if (page1.isOkay()) { auto pixmap = QPixmap::fromImage(page1.getOkay()); auto pixmapHeight = pixmap.height(); auto widgetHeight = height(); if (pixmapHeight < widgetHeight) { // do nothing label1.setPixmap(pixmap); } else { label1.setPixmap(pixmap.scaledToHeight(widgetHeight)); } label1.resize(label1.pixmap().size()); } } void Getsuyomi::setPagesDual() { auto& label1 = m_pageLeft; auto& label2 = m_pageRight; setPages(label1, label2); } void Getsuyomi::setPagesManga() { auto& label1 = m_pageRight; auto& label2 = m_pageLeft; setPages(label1, label2); } void Getsuyomi::setPages(QLabel& label1, QLabel& label2) { auto page1 = m_archive->getPage(m_pageNumber); auto page2 = m_archive->getPage(m_pageNumber + 1); const bool okay1 = page1.isOkay(); const bool okay2 = page2.isOkay(); if (okay1 && okay2) { label1.setPixmap(QPixmap::fromImage(page1.getOkay())); label2.setPixmap(QPixmap::fromImage(page2.getOkay())); auto label1Size = label1.pixmap().size(); auto label2Size = label2.pixmap().size(); if (label1Size.height() <= label2Size.height()) { label1.resize(label1Size); label1.resize(label1Size); } else { label1.resize(label2Size); label1.resize(label2Size); } } else if (okay1) { label1.setPixmap(QPixmap::fromImage(page1.getOkay())); label1.resize(label1.pixmap().size()); } else if (okay2) { label2.setPixmap(QPixmap::fromImage(page2.getOkay())); label2.resize(label2.pixmap().size()); } } } // namespace getsuyomi