Advance Wayland and KDE package bring-up
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#include "kbusyindicatorwidget.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QIcon>
|
||||
#include <QPainter>
|
||||
#include <QResizeEvent>
|
||||
#include <QStyle>
|
||||
#include <QVariantAnimation>
|
||||
|
||||
class KBusyIndicatorWidgetPrivate
|
||||
{
|
||||
public:
|
||||
KBusyIndicatorWidgetPrivate(KBusyIndicatorWidget *parent)
|
||||
: q(parent)
|
||||
{
|
||||
animation.setLoopCount(-1);
|
||||
animation.setDuration(2000);
|
||||
animation.setStartValue(0);
|
||||
animation.setEndValue(360);
|
||||
QObject::connect(&animation, &QVariantAnimation::valueChanged, q, [this](QVariant value) {
|
||||
rotation = value.toReal();
|
||||
q->update(); // repaint new rotation
|
||||
});
|
||||
}
|
||||
|
||||
KBusyIndicatorWidget *const q;
|
||||
QVariantAnimation animation;
|
||||
QIcon icon = QIcon::fromTheme(QStringLiteral("view-refresh"));
|
||||
qreal rotation = 0;
|
||||
QPointF paintCenter;
|
||||
};
|
||||
|
||||
KBusyIndicatorWidget::KBusyIndicatorWidget(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, d(new KBusyIndicatorWidgetPrivate(this))
|
||||
{
|
||||
}
|
||||
|
||||
KBusyIndicatorWidget::~KBusyIndicatorWidget() = default;
|
||||
|
||||
QSize KBusyIndicatorWidget::minimumSizeHint() const
|
||||
{
|
||||
const auto extent = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
|
||||
return QSize(extent, extent);
|
||||
}
|
||||
|
||||
void KBusyIndicatorWidget::start()
|
||||
{
|
||||
d->animation.start();
|
||||
}
|
||||
|
||||
void KBusyIndicatorWidget::stop()
|
||||
{
|
||||
if (d->animation.state() == QAbstractAnimation::Running) // avoid warning if never started yet
|
||||
d->animation.pause();
|
||||
}
|
||||
|
||||
void KBusyIndicatorWidget::showEvent(QShowEvent *event)
|
||||
{
|
||||
QWidget::showEvent(event);
|
||||
start();
|
||||
}
|
||||
|
||||
void KBusyIndicatorWidget::hideEvent(QHideEvent *event)
|
||||
{
|
||||
QWidget::hideEvent(event);
|
||||
stop();
|
||||
}
|
||||
|
||||
void KBusyIndicatorWidget::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QWidget::resizeEvent(event);
|
||||
d->paintCenter = QPointF(event->size().width() / 2.0, //
|
||||
event->size().height() / 2.0);
|
||||
}
|
||||
|
||||
void KBusyIndicatorWidget::paintEvent(QPaintEvent *)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||
|
||||
// Rotate around the center and then reset back to origin for icon painting.
|
||||
painter.translate(d->paintCenter);
|
||||
painter.rotate(d->rotation);
|
||||
painter.translate(-d->paintCenter);
|
||||
|
||||
d->icon.paint(&painter, rect());
|
||||
}
|
||||
|
||||
bool KBusyIndicatorWidget::event(QEvent *event)
|
||||
{
|
||||
// Only overridden to be flexible WRT binary compatible in the future.
|
||||
// Overriding later has potential to change the call going through
|
||||
// the vtable or not.
|
||||
return QWidget::event(event);
|
||||
}
|
||||
|
||||
#include "moc_kbusyindicatorwidget.cpp"
|
||||
Reference in New Issue
Block a user