/*** Olive - Non-Linear Video Editor Copyright (C) 2021 Olive Team 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 "scrollinglabel.h" #include #include "common/qtutils.h" namespace olive { const int ScrollingLabel::kMinLineHeight = 10; ScrollingLabel::ScrollingLabel(QWidget *parent) : QWidget(parent), animate_(0) { timer_.setInterval(50); connect(&timer_, &QTimer::timeout, this, &ScrollingLabel::AnimationUpdate); } ScrollingLabel::ScrollingLabel(const QStringList &text, QWidget *parent) : ScrollingLabel(parent) { SetText(text); } void ScrollingLabel::SetText(const QStringList &text) { text_ = text; QFontMetrics fm = fontMetrics(); text_height_ = fm.height(); int width = 0; foreach (const QString& s, text_) { width = qMax(width, QtUtils::QFontMetricsWidth(fm, s)); } setMinimumSize(width, text_height_ * kMinLineHeight); } void ScrollingLabel::paintEvent(QPaintEvent *e) { QImage map(width(), height(), QImage::Format_RGBA8888_Premultiplied); map.fill(Qt::transparent); { QPainter p(&map); p.setPen(palette().text().color()); QFontMetrics fm = p.fontMetrics(); int half_width = width(); for (int i=0; i= height()) { continue; } const QString& s = text_.at(i); int width = QtUtils::QFontMetricsWidth(fm, s); p.drawText(half_width/2 - width/2, text_y, s); } for (int y=0; y= height() + text_.size() * text_height_) { animate_ = 0; } update(); } }