/* * Squawk messenger. * Copyright (C) 2019 Yury Gubich * * 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 #include "image.h" Image::Image(const QString& p_path, quint16 p_minWidth, QWidget* parent): QLabel(parent), pixmap(p_path), path(p_path), aspectRatio(0), minWidth(p_minWidth), svgMode(false) { if (path.contains(".svg")) { svgMode = true; } setScaledContents(true); recalculateAspectRatio(); } Image::~Image() { } int Image::heightForWidth(int width) const { int height = width / aspectRatio; return height; } int Image::widthForHeight(int height) const { return height * aspectRatio; } bool Image::hasHeightForWidth() const { return true; } void Image::recalculateAspectRatio() { qreal height = pixmap.height(); qreal width = pixmap.width(); aspectRatio = width / height; if (!svgMode) { setPixmap(pixmap); } setMinimumHeight(minWidth / aspectRatio); setMinimumWidth(minWidth); } void Image::setMinWidth(quint16 p_minWidth) { if (minWidth != p_minWidth) { minWidth = p_minWidth; recalculateAspectRatio(); } } void Image::setPath(const QString& p_path) { if (path != p_path) { path = p_path; if (path.contains(".svg")) { svgMode = true; } pixmap = QPixmap(path); recalculateAspectRatio(); } } void Image::resizeEvent(QResizeEvent* event) { if (svgMode) { QIcon ico; QSize size = event->size(); ico.addFile(path, size); setPixmap(ico.pixmap(size)); } QLabel::resizeEvent(event); }