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