diff --git a/src/gui/widgets/common/CMakeLists.txt b/src/gui/widgets/common/CMakeLists.txt index 56044a2d..ba74b568 100644 --- a/src/gui/widgets/common/CMakeLists.txt +++ b/src/gui/widgets/common/CMakeLists.txt @@ -8,22 +8,21 @@ target_link_libraries( ) add_library( - sliderjumpstyle - sliderjumpstyle.cpp + strokelabel + strokelabel.cpp ) target_link_libraries( - sliderjumpstyle + strokelabel Qt5::Widgets ) add_library( - progressslider - progressslider.cpp + sliderjumpstyle + sliderjumpstyle.cpp ) target_link_libraries( - progressslider + sliderjumpstyle Qt5::Widgets - Qt5::Core ) add_library( @@ -42,4 +41,4 @@ add_library( target_link_libraries( scrolldoublespinbox Qt5::Widgets -) \ No newline at end of file +) diff --git a/src/gui/widgets/common/strokelabel.cpp b/src/gui/widgets/common/strokelabel.cpp new file mode 100644 index 00000000..ba40dfbd --- /dev/null +++ b/src/gui/widgets/common/strokelabel.cpp @@ -0,0 +1,234 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2021 Ripose +// +// This file is part of Memento. +// +// Memento 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, version 2 of the License. +// +// Memento 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 Memento. If not, see . +// +//////////////////////////////////////////////////////////////////////////////// + +#include "strokelabel.h" + +#include +#include + +/* Begin Constructor/Destructor */ + +#define TRANSPARENT_COLOR QColor("#00000000") + +StrokeLabel::StrokeLabel(QWidget *parent) + : QWidget(parent), + m_backgroundText(new QTextEdit(this)), + m_foregroundText(new QTextEdit(this)), + m_textColor(palette().text().color()), + m_strokeColor(palette().window().color()), + m_strokeSize(4.0), + m_backgroundColor(TRANSPARENT_COLOR) +{ + initTextEdit(m_backgroundText); + + initTextEdit(m_foregroundText); + m_foregroundText->raise(); + + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + setFocusPolicy(Qt::FocusPolicy::NoFocus); + fitToContents(); + updateColors(); +} + +void StrokeLabel::initTextEdit(QTextEdit *te) +{ + te->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + te->setFocusPolicy(Qt::FocusPolicy::NoFocus); + te->setAcceptDrops(false); + te->setFrameShape(QFrame::Shape::NoFrame); + te->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + te->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + te->setLineWrapMode(QTextEdit::NoWrap); + te->setReadOnly(true); + te->setAcceptRichText(false); + te->setTextInteractionFlags(Qt::NoTextInteraction); + te->setCursor(Qt::ArrowCursor); +} + +void StrokeLabel::updateColors() +{ + /* Set the text and background color */ + QString stylesheetFormat = + "QTextEdit {" + "color: rgba(%1, %2, %3, %4);" + "background: rgba(0, 0, 0, 0);" + "}"; + m_foregroundText->setStyleSheet( + stylesheetFormat.arg(QString::number(m_textColor.red())) + .arg(QString::number(m_textColor.green())) + .arg(QString::number(m_textColor.blue())) + .arg(QString::number(m_textColor.alpha())) + ); + + stylesheetFormat = + "QTextEdit {" + "color: rgba(%1, %2, %3, %4);" + "background: rgba(%5, %6, %7, %8);" + "}"; + m_backgroundText->setStyleSheet( + stylesheetFormat.arg(QString::number(m_textColor.red())) + .arg(QString::number(m_textColor.green())) + .arg(QString::number(m_textColor.blue())) + .arg(QString::number(m_textColor.alpha())) + .arg(QString::number(m_backgroundColor.red())) + .arg(QString::number(m_backgroundColor.green())) + .arg(QString::number(m_backgroundColor.blue())) + .arg(QString::number(m_backgroundColor.alpha())) + ); + + setText(m_foregroundText->toPlainText()); +} + + +void StrokeLabel::fitToContents() +{ + m_backgroundText->updateGeometry(); + int width = m_backgroundText->document()->idealWidth() + 4; + int height = m_backgroundText->document()->size().toSize().height(); + setSize(width, height); +} + +#undef TRANSPARENT_COLOR + +/* End Constructor/Destructor */ +/* Begin Color Setters */ + +void StrokeLabel::setTextColor(const QColor &color) +{ + m_textColor = color; + updateColors(); +} + +void StrokeLabel::setStrokeColor(const QColor &color) +{ + m_strokeColor = color; + updateColors(); +} + +void StrokeLabel::setStrokeSize(double size) +{ + m_strokeSize = size; + updateColors(); +} + +void StrokeLabel::setBackgroundColor(const QColor &color) +{ + m_backgroundColor = color; + updateColors(); +} + +/* End Color Setters */ +/* Begin Font Methods */ + +QFont StrokeLabel::textFont() const +{ + return m_foregroundText->font(); +} + +void StrokeLabel::setTextFont(const QFont &f) +{ + m_foregroundText->setFont(f); + m_backgroundText->setFont(f); + fitToContents(); +} + +/* End Font Methods */ +/* Begin Text Methods */ + +void StrokeLabel::setText(const QString &text) +{ + clearText(); + QStringList subList = text.split('\n'); + for (const QString &text : subList) + { + if (text.isEmpty()) + continue; + + m_backgroundText->append(text); + m_backgroundText->setAlignment(Qt::AlignHCenter); + + m_foregroundText->append(text); + m_foregroundText->setAlignment(Qt::AlignHCenter); + } + + /* Add the stroke */ + QTextCharFormat format; + format.setTextOutline( + QPen( + m_strokeColor, + m_strokeSize, + Qt::SolidLine, + Qt::RoundCap, + Qt::RoundJoin + ) + ); + QTextCursor cursor(m_backgroundText->document()); + cursor.select(QTextCursor::Document); + cursor.mergeCharFormat(format); + + fitToContents(); +} + + +QString StrokeLabel::getText() const +{ + return m_foregroundText->toPlainText(); +} + +void StrokeLabel::clearText() +{ + m_backgroundText->clear(); + m_foregroundText->clear(); + setSize(0, 0); +} + +void StrokeLabel::selectText(int start, int length) +{ + QTextCursor q = m_foregroundText->textCursor(); + q.setPosition(start); + q.setPosition(start + length, QTextCursor::KeepAnchor); + m_foregroundText->setTextCursor(q); +} + +void StrokeLabel::deselectText() +{ + QTextCursor q = m_foregroundText->textCursor(); + q.clearSelection(); + m_foregroundText->setTextCursor(q); +} + +/* End Text Methods */ +/* Begin Helper Methods */ + +void StrokeLabel::setSize(int w, int h) +{ + m_backgroundText->setFixedSize(w, h); + m_foregroundText->setFixedSize(w, h); + setFixedSize(w, h); +} + +int StrokeLabel::getPosition(const QPoint &pos) const +{ + return m_foregroundText->document()->documentLayout()->hitTest( + pos, Qt::ExactHit + ); +} + +/* End Helper Methods */ diff --git a/src/gui/widgets/common/strokelabel.h b/src/gui/widgets/common/strokelabel.h new file mode 100644 index 00000000..9319d874 --- /dev/null +++ b/src/gui/widgets/common/strokelabel.h @@ -0,0 +1,153 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2021 Ripose +// +// This file is part of Memento. +// +// Memento 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, version 2 of the License. +// +// Memento 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 Memento. If not, see . +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef STROKELABEL_H +#define STROKELABEL_H + +#include + +class QTextEdit; + +/** + * A label that displays text with a stroke. + */ +class StrokeLabel : public QWidget +{ + Q_OBJECT + +public: + StrokeLabel(QWidget *parent = nullptr); + + /** + * Sets the color of the text. + * @param color The color to set the text to. + */ + void setTextColor(const QColor &color); + + /** + * Sets the color of the stroke. + * @param color The color of the stroke. + */ + void setStrokeColor(const QColor &color); + + /** + * Sets the size of the stroke. + * @param size The size of the stroke. + */ + void setStrokeSize(double size); + + /** + * Sets the color of the background. + * @param color The color of the background. + */ + void setBackgroundColor(const QColor &color); + + /** + * Gets the current text font. + * @return The current font. + */ + QFont textFont() const; + + /** + * Sets the current text font. + * @param f The font to make the current font. + */ + void setTextFont(const QFont &f); + + /** + * Sets the text of the label. Text is always centered. + * @param text The text to set the label to. + */ + void setText(const QString &text); + + /** + * Gets the current text of the label in plain text. + */ + QString getText() const; + + /** + * Removes all text from the label. + */ + void clearText(); + + /** + * Gets the index of the character at the current position. + * @param pos The point (on this widget) to get the text index of. + */ + int getPosition(const QPoint &pos) const; + +public Q_SLOTS: + /** + * Selects the text starting at some index for some number of characters. + * @param start The starting index to begin the selection from. + * @param length The length of the selection. + */ + void selectText(int start, int length); + + /** + * Deselects text if any is currently selected. + */ + void deselectText(); + +protected: + /** + * Resizes the label to fit the context of the current text. + */ + void fitToContents(); + +private: + /** + * Initializes a QTextEdit with all the expected common configuration. + * @param te The QTextEdit to initialize. + */ + void initTextEdit(QTextEdit *te); + + /** + * Updates the colors of the QTextEdit. + */ + void updateColors(); + + /** + * Sets the fixed size of the widget. + * @param h The height of the widget. + * @param w The width of the widget. + */ + void setSize(int h, int w); + + /* The background QTextEdit that creates the stroke effect. */ + QTextEdit *m_backgroundText; + + /* The foreground QTextEdit that creates the text */ + QTextEdit *m_foregroundText; + + /* The current color of the text */ + QColor m_textColor; + + /* The current color of the stroke */ + QColor m_strokeColor; + + /* The current size of the stroke */ + double m_strokeSize; + + /* The current background color */ + QColor m_backgroundColor; +}; + +#endif // STROKELABEL_H \ No newline at end of file diff --git a/src/gui/widgets/overlay/CMakeLists.txt b/src/gui/widgets/overlay/CMakeLists.txt index 39cf7e11..bb6cd336 100644 --- a/src/gui/widgets/overlay/CMakeLists.txt +++ b/src/gui/widgets/overlay/CMakeLists.txt @@ -1,3 +1,14 @@ +add_library( + progressslider + progressslider.cpp +) +target_link_libraries( + progressslider + strokelabel + Qt5::Widgets + Qt5::Core +) + add_library( playermenu playermenu.cpp @@ -14,6 +25,7 @@ add_library( ) target_link_libraries( subtitlewidget + strokelabel Qt5::Widgets globalmediator dictionary_db diff --git a/src/gui/widgets/overlay/playercontrols.ui b/src/gui/widgets/overlay/playercontrols.ui index 0b4627f1..29232bc5 100644 --- a/src/gui/widgets/overlay/playercontrols.ui +++ b/src/gui/widgets/overlay/playercontrols.ui @@ -294,7 +294,7 @@ ProgressSlider QSlider -
src/gui/widgets/common/progressslider.h
+
src/gui/widgets/overlay/progressslider.h
diff --git a/src/gui/widgets/common/progressslider.cpp b/src/gui/widgets/overlay/progressslider.cpp similarity index 72% rename from src/gui/widgets/common/progressslider.cpp rename to src/gui/widgets/overlay/progressslider.cpp index 8adaee79..64baa7ff 100644 --- a/src/gui/widgets/common/progressslider.cpp +++ b/src/gui/widgets/overlay/progressslider.cpp @@ -29,78 +29,8 @@ #include #include "../../../util/globalmediator.h" +#include "../common/strokelabel.h" -/* Begin StrokeLabel */ - -/** - * A widget that displays text with a stroke. - */ -class StrokeLabel : public QTextEdit -{ -public: - StrokeLabel(QWidget *parent = nullptr); - - /** - * Sets the text of the widget and adjusts the size according to the - * content. - * @param text The text to set the widget to. - */ - void setText(const QString &text); - -protected: - /** - * Adds the stroke. - * @param event The paint event. - */ - void paintEvent(QPaintEvent *event) override; -}; - -StrokeLabel::StrokeLabel(QWidget *parent) : QTextEdit(parent) -{ - setReadOnly(true); - setAutoFillBackground(false); - setFrameStyle(QFrame::NoFrame); - setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setStyleSheet("QTextEdit { background : rgba(0, 0, 0, 0); }"); -} - -void StrokeLabel::paintEvent(QPaintEvent *event) -{ - QTextCharFormat format; - format.setTextOutline( - QPen( - parentWidget()->palette().window(), - 3.0, - Qt::SolidLine, - Qt::RoundCap, - Qt::RoundJoin - ) - ); - QTextCursor cursor(document()); - cursor.select(QTextCursor::Document); - cursor.mergeCharFormat(format); - QTextEdit::paintEvent(event); - - format = QTextCharFormat(); - format.setTextOutline(QPen(Qt::transparent)); - cursor.mergeCharFormat(format); - QTextEdit::paintEvent(event); -} - -void StrokeLabel::setText(const QString &text) -{ - setPlainText(text); - document()->adjustSize(); - int width = document()->idealWidth() + 10; - setFixedWidth(width); - int height = document()->size().toSize().height(); - setFixedHeight(height); - updateGeometry(); -} - -/* End StrokeLabel */ /* Begin Constructor/Destructor */ /** @@ -148,7 +78,8 @@ ProgressSlider::~ProgressSlider() void ProgressSlider::initTheme() { - m_labelTimecode->setPalette(palette()); + m_labelTimecode->setTextColor(palette().text().color()); + m_labelTimecode->setStrokeColor(palette().window().color()); initStylesheet(); } @@ -166,9 +97,9 @@ void ProgressSlider::initStylesheet() void ProgressSlider::showEvent(QShowEvent *event) { - QFont font = m_labelTimecode->font(); + QFont font = m_labelTimecode->textFont(); font.setPixelSize(height()); - m_labelTimecode->setFont(font); + m_labelTimecode->setTextFont(font); } void ProgressSlider::hideEvent(QHideEvent *event) @@ -181,6 +112,8 @@ void ProgressSlider::hideEvent(QHideEvent *event) void ProgressSlider::mouseMoveEvent(QMouseEvent *event) { + QSlider::mouseMoveEvent(event); + if (maximum() == 0) { QSlider::mouseMoveEvent(event); @@ -210,8 +143,6 @@ void ProgressSlider::mouseMoveEvent(QMouseEvent *event) { m_labelTimecode->show(); } - - QSlider::mouseMoveEvent(event); } #undef MOUSE_OFFSET @@ -219,6 +150,7 @@ void ProgressSlider::mouseMoveEvent(QMouseEvent *event) void ProgressSlider::paintEvent(QPaintEvent* event) { QSlider::paintEvent(event); + QRect rect = event->rect(); QPainter p(this); p.setPen(palette().window().color()); diff --git a/src/gui/widgets/common/progressslider.h b/src/gui/widgets/overlay/progressslider.h similarity index 100% rename from src/gui/widgets/common/progressslider.h rename to src/gui/widgets/overlay/progressslider.h diff --git a/src/gui/widgets/overlay/subtitlewidget.cpp b/src/gui/widgets/overlay/subtitlewidget.cpp index 39373f35..2e263df3 100644 --- a/src/gui/widgets/overlay/subtitlewidget.cpp +++ b/src/gui/widgets/overlay/subtitlewidget.cpp @@ -42,7 +42,7 @@ /* Begin Constructor/Destructor */ SubtitleWidget::SubtitleWidget(QWidget *parent) - : QTextEdit(parent), + : StrokeLabel(parent), m_dictionary(GlobalMediator::getGlobalMediator()->getDictionary()), m_currentIndex(-1), m_findDelay(new QTimer(this)), @@ -56,19 +56,9 @@ SubtitleWidget::SubtitleWidget(QWidget *parent) initTheme(); - setFixedHeight(0); - setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); - setFocusPolicy(Qt::FocusPolicy::NoFocus); - setAcceptDrops(false); - setFrameShape(QFrame::Shape::NoFrame); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setLineWrapMode(QTextEdit::NoWrap); - setReadOnly(true); - setAcceptRichText(false); - setTextInteractionFlags(Qt::NoTextInteraction); - hide(); + setMouseTracking(true); setCursor(Qt::ArrowCursor); + hide(); m_findDelay->setSingleShot(true); @@ -92,7 +82,7 @@ SubtitleWidget::SubtitleWidget(QWidget *parent) ); connect( mediator, &GlobalMediator::definitionsHidden, - this, &SubtitleWidget::deselectText + this, &StrokeLabel::deselectText ); connect( mediator, &GlobalMediator::definitionsShown, @@ -178,13 +168,7 @@ void SubtitleWidget::initTheme() SETTINGS_INTERFACE_SUB_SCALE_DEFAULT ).toDouble() ); - setFont(font); - - QString stylesheetFormat = - "QTextEdit {" - "color: rgba(%1, %2, %3, %4);" - "background: rgba(%5, %6, %7, %8);" - "}"; + setTextFont(font); QColor fontColor( settings.value( @@ -192,35 +176,29 @@ void SubtitleWidget::initTheme() SETTINGS_INTERFACE_SUB_TEXT_COLOR_DEFAULT ).toString() ); + setTextColor(fontColor); + QColor bgColor( settings.value( SETTINGS_INTERFACE_SUB_BG_COLOR, SETTINGS_INTERFACE_SUB_BG_COLOR_DEFAULT ).toString() ); + setBackgroundColor(bgColor); - setStyleSheet( - stylesheetFormat.arg(QString::number(fontColor.red())) - .arg(QString::number(fontColor.green())) - .arg(QString::number(fontColor.blue())) - .arg(QString::number(fontColor.alpha())) - .arg(QString::number(bgColor.red())) - .arg(QString::number(bgColor.green())) - .arg(QString::number(bgColor.blue())) - .arg(QString::number(bgColor.alpha())) - - ); - - m_settings.strokeColor.setNamedColor( + QColor strokeColor( settings.value( SETTINGS_INTERFACE_SUB_STROKE_COLOR, SETTINGS_INTERFACE_SUB_STROKE_COLOR_DEFAULT ).toString() ); - m_settings.strokeSize = settings.value( + setStrokeColor(strokeColor); + + double strokeSize = settings.value( SETTINGS_INTERFACE_SUB_STROKE, SETTINGS_INTERFACE_SUB_STROKE_DEFAULT ).toDouble(); + setStrokeSize(strokeSize); settings.endGroup(); @@ -324,30 +302,32 @@ void SubtitleWidget::initSettings() void SubtitleWidget::showEvent(QShowEvent *event) { + StrokeLabel::showEvent(event); + if (m_settings.hideSubsWhenVisible) { Q_EMIT GlobalMediator::getGlobalMediator() ->requestSetSubtitleVisibility(false); } - QTextEdit::showEvent(event); } void SubtitleWidget::hideEvent(QHideEvent *event) { + StrokeLabel::hideEvent(event); + if (m_settings.hideSubsWhenVisible && m_settings.hideOnPlay) { Q_EMIT GlobalMediator::getGlobalMediator() ->requestSetSubtitleVisibility(true); } Q_EMIT GlobalMediator::getGlobalMediator()->subtitleHidden(); - QTextEdit::hideEvent(event); } void SubtitleWidget::mouseMoveEvent(QMouseEvent *event) { - int position = document()->documentLayout()->hitTest( - event->pos(), Qt::ExactHit - ); + StrokeLabel::mouseMoveEvent(event); + + int position = getPosition(event->pos()); if (!m_paused || position == m_currentIndex || position == -1) { return; @@ -374,50 +354,26 @@ void SubtitleWidget::mouseMoveEvent(QMouseEvent *event) void SubtitleWidget::mouseDoubleClickEvent(QMouseEvent *event) { + StrokeLabel::mouseDoubleClickEvent(event); + QApplication::clipboard()->setText(m_subtitle.rawText); } void SubtitleWidget::leaveEvent(QEvent *event) { + StrokeLabel::leaveEvent(event); + m_findDelay->stop(); m_currentIndex = -1; } void SubtitleWidget::resizeEvent(QResizeEvent *event) { - setAlignment(Qt::AlignHCenter); - if (!m_subtitle.rawText.isEmpty()) - fitToContents(); - - event->ignore(); - QTextEdit::resizeEvent(event); + StrokeLabel::resizeEvent(event); Q_EMIT GlobalMediator::getGlobalMediator()->requestDefinitionDelete(); } -void SubtitleWidget::paintEvent(QPaintEvent *event) -{ - QTextCharFormat format; - format.setTextOutline( - QPen( - m_settings.strokeColor, - m_settings.strokeSize, - Qt::SolidLine, - Qt::RoundCap, - Qt::RoundJoin - ) - ); - QTextCursor cursor(document()); - cursor.select(QTextCursor::Document); - cursor.mergeCharFormat(format); - QTextEdit::paintEvent(event); - - format = QTextCharFormat(); - format.setTextOutline(QPen(Qt::transparent)); // Potential SIGSEGV - cursor.mergeCharFormat(format); - QTextEdit::paintEvent(event); -} - /* End Event Handlers */ /* Begin General Slots */ @@ -458,7 +414,7 @@ void SubtitleWidget::findTerms() Q_EMIT GlobalMediator::getGlobalMediator()->termsChanged(terms); m_lastEmittedIndex = index; m_lastEmittedSize = terms->first()->clozeBody.size(); - m_lastEmittedSize += toPlainText() + m_lastEmittedSize += getText() .midRef(m_lastEmittedIndex, m_lastEmittedSize) .count('\n'); } @@ -472,7 +428,7 @@ void SubtitleWidget::adjustVisibility() { hide(); } - else if (toPlainText().isEmpty()) + else if (getText().isEmpty()) { hide(); } @@ -496,7 +452,7 @@ void SubtitleWidget::positionChanged(const double value) value > m_subtitle.endTime + DOUBLE_DELTA) { m_subtitle.rawText.clear(); - clear(); + clearText(); hide(); Q_EMIT GlobalMediator::getGlobalMediator()->subtitleExpired(); } @@ -516,26 +472,7 @@ void SubtitleWidget::setSubtitle(QString subtitle, } /* Add it to the text edit */ - clear(); - QStringList subList = subtitle.split('\n'); - for (const QString &text : subList) - { - if (text.isEmpty()) - continue; - - append(text); - setAlignment(Qt::AlignHCenter); - } - - /* Update Size */ - if (m_subtitle.rawText.isEmpty()) - { - setFixedSize(QSize(0, 0)); - } - else - { - fitToContents(); - } + setText(subtitle); /* Keep track of when to delete the subtitle */ m_subtitle.startTime = start + delay; @@ -547,37 +484,7 @@ void SubtitleWidget::setSubtitle(QString subtitle, void SubtitleWidget::selectText() { - QTextCursor q = textCursor(); - q.setPosition(m_lastEmittedIndex); - q.setPosition( - m_lastEmittedIndex + m_lastEmittedSize, - QTextCursor::KeepAnchor - ); - setTextCursor(q); -} - -void SubtitleWidget::deselectText() -{ - QTextCursor q = textCursor(); - q.clearSelection(); - setTextCursor(q); + StrokeLabel::selectText(m_lastEmittedIndex, m_lastEmittedSize); } /* End General Slots */ -/* Begin Helpers */ - -void SubtitleWidget::fitToContents() -{ - updateGeometry(); - int width = document()->idealWidth() + 4; - if (width > GlobalMediator::getGlobalMediator()->getPlayerWidget()->width()) - { - width = GlobalMediator::getGlobalMediator()->getPlayerWidget()->width(); - } - setFixedWidth(width); - int height = document()->size().toSize().height(); - setFixedHeight(height); - updateGeometry(); -} - -/* End Helpers */ diff --git a/src/gui/widgets/overlay/subtitlewidget.h b/src/gui/widgets/overlay/subtitlewidget.h index 3de1cbe8..497f9808 100644 --- a/src/gui/widgets/overlay/subtitlewidget.h +++ b/src/gui/widgets/overlay/subtitlewidget.h @@ -21,7 +21,7 @@ #ifndef SUBTITLEWIDGET_H #define SUBTITLEWIDGET_H -#include +#include "../common/strokelabel.h" #include #include @@ -31,7 +31,7 @@ /** * Widget used to display subtitle text and initiate searches. */ -class SubtitleWidget : public QTextEdit +class SubtitleWidget : public StrokeLabel { Q_OBJECT @@ -67,12 +67,6 @@ class SubtitleWidget : public QTextEdit */ void resizeEvent(QResizeEvent *event) override; - /** - * Applys a stroke to the text if needed. - * @param event The paint event. - */ - void paintEvent(QPaintEvent *event) override; - /** * Hides the player subtitles when visible if set. * @param event The show event, not used. @@ -133,17 +127,7 @@ private Q_SLOTS: */ void selectText(); - /** - * Deselects any currently selected text. - */ - void deselectText(); - private: - /** - * Resizes the widget to the current text. - */ - void fitToContents(); - /** * Destructor for the term list. */ @@ -220,12 +204,7 @@ private Q_SLOTS: /* The string to replace newlines with if replaceNewLines is true. */ QString replaceStr; - /* The color of the stroke. */ - QColor strokeColor; - - /* The size of the stroke. */ - double strokeSize; - + /* true if subtitles should be shown when needed, false otherwise. */ bool showSubtitles; } m_settings; };