Qt spinner (#2494)
* move android spinner * qt spinner * rotation * nothing by default * spin spin * fix rotate * style * spinner for all * -2 * unusedpull/2498/head
parent
c6e1beb402
commit
6c86afee16
15 changed files with 192 additions and 68 deletions
@ -1,14 +0,0 @@ |
|||||||
#ifndef COMMON_SPINNER_H |
|
||||||
#define COMMON_SPINNER_H |
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
extern "C" { |
|
||||||
#endif |
|
||||||
|
|
||||||
int spin(int argc, char** argv); |
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
} |
|
||||||
#endif |
|
||||||
|
|
||||||
#endif |
|
@ -1,2 +1,5 @@ |
|||||||
moc_* |
moc_* |
||||||
|
*.moc |
||||||
|
|
||||||
qt/text |
qt/text |
||||||
|
qt/spinner |
||||||
|
@ -0,0 +1,126 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <string> |
||||||
|
#include <iostream> |
||||||
|
|
||||||
|
#include <QString> |
||||||
|
#include <QGridLayout> |
||||||
|
#include <QApplication> |
||||||
|
#include <QDesktopWidget> |
||||||
|
|
||||||
|
#ifdef QCOM2 |
||||||
|
#include <qpa/qplatformnativeinterface.h> |
||||||
|
#include <QPlatformSurfaceEvent> |
||||||
|
#include <wayland-client-protocol.h> |
||||||
|
#endif |
||||||
|
|
||||||
|
#include "spinner.hpp" |
||||||
|
|
||||||
|
|
||||||
|
Spinner::Spinner(QWidget *parent) { |
||||||
|
QGridLayout *main_layout = new QGridLayout(); |
||||||
|
main_layout->setSpacing(0); |
||||||
|
main_layout->setMargin(50); |
||||||
|
|
||||||
|
const int img_size = 500; |
||||||
|
|
||||||
|
comma = new QLabel(); |
||||||
|
comma->setPixmap(QPixmap("../assets/img_spinner_comma.png").scaled(img_size, img_size, Qt::KeepAspectRatio)); |
||||||
|
comma->setFixedSize(img_size, img_size); |
||||||
|
main_layout->addWidget(comma, 0, 0, Qt::AlignHCenter | Qt::AlignVCenter); |
||||||
|
|
||||||
|
track_img = QPixmap("../assets/img_spinner_track.png").scaled(img_size, img_size, Qt::KeepAspectRatio); |
||||||
|
track = new QLabel(); |
||||||
|
track->setPixmap(track_img); |
||||||
|
track->setFixedSize(img_size, img_size); |
||||||
|
main_layout->addWidget(track, 0, 0, Qt::AlignHCenter | Qt::AlignVCenter); |
||||||
|
|
||||||
|
text = new QLabel("building boardd"); |
||||||
|
text->setVisible(false); |
||||||
|
text->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
||||||
|
main_layout->addWidget(text, 1, 0, Qt::AlignHCenter); |
||||||
|
|
||||||
|
progress_bar = new QProgressBar(); |
||||||
|
progress_bar->setMinimum(5); |
||||||
|
progress_bar->setMaximum(100); |
||||||
|
progress_bar->setTextVisible(false); |
||||||
|
progress_bar->setVisible(false); |
||||||
|
progress_bar->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
||||||
|
main_layout->addWidget(progress_bar, 1, 0, Qt::AlignHCenter); |
||||||
|
|
||||||
|
setLayout(main_layout); |
||||||
|
setStyleSheet(R"( |
||||||
|
Spinner { |
||||||
|
background-color: black; |
||||||
|
} |
||||||
|
QLabel { |
||||||
|
color: white; |
||||||
|
font-size: 80px; |
||||||
|
} |
||||||
|
QProgressBar { |
||||||
|
background-color: #373737; |
||||||
|
border: none; |
||||||
|
margin: 100px; |
||||||
|
height: 50px; |
||||||
|
width: 1000px; |
||||||
|
} |
||||||
|
QProgressBar::chunk { |
||||||
|
background-color: white; |
||||||
|
} |
||||||
|
)"); |
||||||
|
|
||||||
|
rotate_timer = new QTimer(this); |
||||||
|
rotate_timer->start(1000/30.); |
||||||
|
QObject::connect(rotate_timer, SIGNAL(timeout()), this, SLOT(rotate())); |
||||||
|
|
||||||
|
notifier = new QSocketNotifier(fileno(stdin), QSocketNotifier::Read); |
||||||
|
QObject::connect(notifier, SIGNAL(activated(int)), this, SLOT(update(int))); |
||||||
|
}; |
||||||
|
|
||||||
|
void Spinner::rotate() { |
||||||
|
transform.rotate(5); |
||||||
|
|
||||||
|
QPixmap r = track_img.transformed(transform); |
||||||
|
int x = (r.width() - track_img.width()) / 2; |
||||||
|
int y = (r.height() - track_img.height()) / 2; |
||||||
|
track->setPixmap(r.copy(x, y, track_img.width(), track_img.height())); |
||||||
|
}; |
||||||
|
|
||||||
|
void Spinner::update(int n) { |
||||||
|
std::string line; |
||||||
|
std::getline(std::cin, line); |
||||||
|
|
||||||
|
if (line.length()) { |
||||||
|
bool number = std::all_of(line.begin(), line.end(), ::isdigit); |
||||||
|
text->setVisible(!number); |
||||||
|
progress_bar->setVisible(number); |
||||||
|
text->setText(QString::fromStdString(line)); |
||||||
|
if (number) { |
||||||
|
progress_bar->setValue(std::stoi(line)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char *argv[]) { |
||||||
|
QApplication a(argc, argv); |
||||||
|
|
||||||
|
Spinner *spinner = new Spinner(); |
||||||
|
|
||||||
|
// TODO: get size from QScreen, doesn't work on tici
|
||||||
|
#ifdef QCOM2 |
||||||
|
int w = 2160, h = 1080; |
||||||
|
#else |
||||||
|
int w = 1920, h = 1080; |
||||||
|
#endif |
||||||
|
spinner->setFixedSize(w, h); |
||||||
|
spinner->show(); |
||||||
|
|
||||||
|
#ifdef QCOM2 |
||||||
|
QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); |
||||||
|
wl_surface *s = reinterpret_cast<wl_surface*>(native->nativeResourceForWindow("surface", spinner->windowHandle())); |
||||||
|
wl_surface_set_buffer_transform(s, WL_OUTPUT_TRANSFORM_270); |
||||||
|
wl_surface_commit(s); |
||||||
|
spinner->showFullScreen(); |
||||||
|
#endif |
||||||
|
|
||||||
|
return a.exec(); |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
#include <QTimer> |
||||||
|
#include <QLabel> |
||||||
|
#include <QWidget> |
||||||
|
#include <QPixmap> |
||||||
|
#include <QProgressBar> |
||||||
|
#include <QTransform> |
||||||
|
#include <QSocketNotifier> |
||||||
|
|
||||||
|
class Spinner : public QWidget { |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit Spinner(QWidget *parent = 0); |
||||||
|
|
||||||
|
private: |
||||||
|
QPixmap track_img; |
||||||
|
QTimer *rotate_timer; |
||||||
|
QLabel *comma, *track; |
||||||
|
QLabel *text; |
||||||
|
QProgressBar *progress_bar; |
||||||
|
QTransform transform; |
||||||
|
QSocketNotifier *notifier; |
||||||
|
|
||||||
|
public slots: |
||||||
|
void rotate(); |
||||||
|
void update(int n); |
||||||
|
}; |
@ -0,0 +1,8 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
if [ -f /EON ]; then |
||||||
|
export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" |
||||||
|
exec ./android/spinner/spinner "$1" |
||||||
|
else |
||||||
|
exec ./qt/spinner "$1" |
||||||
|
fi |
@ -1,21 +0,0 @@ |
|||||||
#include <stdio.h> |
|
||||||
#include <stdlib.h> |
|
||||||
#include <stdbool.h> |
|
||||||
#include <math.h> |
|
||||||
#include <unistd.h> |
|
||||||
#include <assert.h> |
|
||||||
|
|
||||||
#include <GLES3/gl3.h> |
|
||||||
#include <EGL/egl.h> |
|
||||||
#include <EGL/eglext.h> |
|
||||||
|
|
||||||
#include "common/framebuffer.h" |
|
||||||
#include "common/spinner.h" |
|
||||||
|
|
||||||
int main(int argc, char** argv) { |
|
||||||
int err; |
|
||||||
|
|
||||||
spin(argc, argv); |
|
||||||
|
|
||||||
return 0; |
|
||||||
} |
|
Loading…
Reference in new issue