//============================================================================ /// \file RenderWidget.cpp /// \author Uwe Kindler /// \date 04.11.2022 /// \brief Implementation of CRenderWidget //============================================================================ //============================================================================ // INCLUDES //============================================================================ #include "RenderWidget.h" #include #include //=========================================================================== CRenderWidget::CRenderWidget(QWidget* Parent) : QWidget(Parent), m_ScaleFactor(1) { this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); this->setCursor(Qt::OpenHandCursor); } //=========================================================================== CRenderWidget::~CRenderWidget() { } //=========================================================================== void CRenderWidget::showImage(const QImage& Image) { m_Image = QPixmap::fromImage(Image); this->adjustWidgetSize(); this->repaint(); } //=========================================================================== void CRenderWidget::paintEvent(QPaintEvent* Event) { Q_UNUSED(Event); QPainter Painter(this); Painter.setRenderHint(QPainter::SmoothPixmapTransform, true); Painter.setRenderHint(QPainter::Antialiasing, true); Painter.scale(m_ScaleFactor, m_ScaleFactor); Painter.drawPixmap(QPoint(0, 0), m_Image); } //============================================================================ void CRenderWidget::zoomIn() { scaleImage(1.25); } //============================================================================ void CRenderWidget::zoomOut() { scaleImage(0.8); } //============================================================================ void CRenderWidget::zoomByValue(double ZoomValue) { scaleImage(ZoomValue); } //============================================================================ void CRenderWidget::normalSize() { m_ScaleFactor = 1; this->adjustWidgetSize(); } //============================================================================ void CRenderWidget::scaleImage(double ScaleFactor) { m_ScaleFactor *= ScaleFactor; this->adjustWidgetSize(); } //============================================================================ void CRenderWidget::adjustWidgetSize() { QSize ScaledImageSize = m_Image.size() * m_ScaleFactor; if (ScaledImageSize != this->size()) { this->setFixedSize(ScaledImageSize); } } //============================================================================ void CRenderWidget::scaleToSize(const QSize& TargetSize) { if (m_Image.isNull()) { return; } double ScaleFactorH = (double) TargetSize.width() / m_Image.size().width(); double ScaleFactorV = (double) TargetSize.height() / m_Image.size().height(); m_ScaleFactor = (ScaleFactorH < ScaleFactorV) ? ScaleFactorH : ScaleFactorV; this->adjustWidgetSize(); } //--------------------------------------------------------------------------- // EOF RenderWidget.cpp