File indexing completed on 2025-02-02 04:11:28

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "font_preview_widget.hpp"
0008 #include "ui_font_preview_widget.h"
0009 
0010 #include <QEvent>
0011 #include <QGraphicsScene>
0012 #include <QGraphicsTextItem>
0013 
0014 
0015 class glaxnimate::gui::font::FontPreviewWidget::Private
0016 {
0017 public:
0018     Ui::FontPreviewWidget ui;
0019     QGraphicsTextItem item;
0020     QGraphicsScene scene;
0021     qreal scale = 1;
0022 
0023     QString default_text() const
0024     {
0025         return i18n("The quick brown fox jumps over the lazy dog");
0026     }
0027 
0028     void fit()
0029     {
0030         ui.view->fitInView(&item, Qt::KeepAspectRatio);
0031         scale = qBound(0.01, ui.view->transform().m11(), 1.);
0032         ui.spin_zoom->setValue(scale * 100);
0033     }
0034 };
0035 
0036 
0037 glaxnimate::gui::font::FontPreviewWidget::FontPreviewWidget(QWidget* parent)
0038     : QWidget(parent), d(std::make_unique<Private>())
0039 {
0040     d->ui.setupUi(this);
0041     d->ui.view->setScene(&d->scene);
0042     d->scene.addItem(&d->item);
0043     d->item.setPlainText(d->default_text());
0044     d->item.setTextInteractionFlags(Qt::TextEditorInteraction);
0045     d->item.setFocus();
0046 }
0047 
0048 glaxnimate::gui::font::FontPreviewWidget::~FontPreviewWidget()
0049 {
0050     d->scene.removeItem(&d->item);
0051 }
0052 
0053 void glaxnimate::gui::font::FontPreviewWidget::changeEvent ( QEvent* e )
0054 {
0055     QWidget::changeEvent(e);
0056 
0057     if ( e->type() == QEvent::LanguageChange)
0058     {
0059         d->ui.retranslateUi(this);
0060     }
0061 }
0062 
0063 void glaxnimate::gui::font::FontPreviewWidget::set_font(const QFont& font)
0064 {
0065     d->item.setFont(font);
0066     d->fit();
0067 }
0068 
0069 QFont glaxnimate::gui::font::FontPreviewWidget::selected_font() const
0070 {
0071     return d->item.font();
0072 }
0073 
0074 
0075 void glaxnimate::gui::font::FontPreviewWidget::set_text(const QString& text, bool fallback_to_default)
0076 {
0077     if ( fallback_to_default && text.isEmpty() )
0078         d->item.setPlainText(d->default_text());
0079     else
0080         d->item.setPlainText(text);
0081 }
0082 
0083 void glaxnimate::gui::font::FontPreviewWidget::zoom_changed(double zoom)
0084 {
0085     double factor = zoom / 100 / d->scale;
0086     d->ui.view->scale(factor, factor);
0087     d->scale = zoom / 100;
0088     d->ui.view->centerOn(&d->item);
0089 }
0090 
0091 void glaxnimate::gui::font::FontPreviewWidget::resizeEvent(QResizeEvent* event)
0092 {
0093     QWidget::resizeEvent(event);
0094     d->fit();
0095 }
0096 
0097 void glaxnimate::gui::font::FontPreviewWidget::showEvent(QShowEvent* event)
0098 {
0099     QWidget::showEvent(event);
0100     d->fit();
0101 }
0102