/*********************************************************************** * * Copyright (C) 2014-2018 wereturtle * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "ThemePreviewer.h" #include #include #include ThemePreviewer::ThemePreviewer(const Theme& theme, int width, int height) { this->width = width; this->height = height; renderPreview(theme); } ThemePreviewer::~ThemePreviewer() { ; } QIcon ThemePreviewer::getIcon() { return thumbnailPreviewIcon; } void ThemePreviewer::renderPreview(const Theme& newSettings) { this->theme = newSettings; QPixmap thumbnailPixmap(this->width, this->height); QPainter painter(&thumbnailPixmap); // First, paint the background image, if any. if (PictureAspectNone != theme.getBackgroundImageAspect()) { QImage destImg; // Load the background image from the file, if available, and zoom. if ( !theme.getBackgroundImageUrl().isNull() && !theme.getBackgroundImageUrl().isEmpty()) { QImage srcImg(theme.getBackgroundImageUrl()); destImg = srcImg.scaled ( thumbnailPixmap.size(), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation ); } // Draw the image. painter.fillRect ( thumbnailPixmap.rect(), QBrush(theme.getBackgroundColor()) ); if (!destImg.isNull()) { painter.drawImage ( (thumbnailPixmap.width() - destImg.width()) / 2, (thumbnailPixmap.height() - destImg.height()) / 2, destImg ); } } // If there's no background image, then just fill the background color. else { QColor bgColor = theme.getBackgroundColor(); if (EditorAspectStretch == theme.getEditorAspect()) { bgColor = theme.getEditorBackgroundColor(); } painter.fillRect ( thumbnailPixmap.rect(), bgColor.rgb() ); } // Next, draw the "editor" background. int w = 2 * width / 3; int h = height / 4; int x = (width / 3) - 3; int y = ((3 * height) / 4) - 3; painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(QBrush(theme.getEditorBackgroundColor())); if (EditorAspectCenter == theme.getEditorAspect()) { painter.drawRect(x, y, w, h); } else { painter.drawRect(0, 0, width, height); } // Now draw a circle in the "editor" background for each of the text colors. int radius = (h / 4); int xoffset = w / 3; int cx1 = x + (xoffset / 2); int cx2 = cx1 + xoffset; int cx3 = cx2 + xoffset; int cy = y + (h / 2); painter.setBrush(QBrush(theme.getDefaultTextColor())); painter.drawEllipse(QPoint(cx1, cy), radius, radius); painter.setBrush(QBrush(theme.getMarkupColor())); painter.drawEllipse(QPoint(cx2, cy), radius, radius); painter.setBrush(QBrush(theme.getLinkColor())); painter.drawEllipse(QPoint(cx3, cy), radius, radius); // Draw icon to indicate if theme is built-in if (theme.isBuiltIn()) { w = width / 10; h = w; x = w / 4; y = x; painter.drawImage ( x, y, QImage(":/resources/images/ghostwriter.svg").scaled ( QSize(w, h), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation ) ); } painter.end(); thumbnailPreviewIcon = QIcon(thumbnailPixmap); }