Merge pull request #504 from AttorneyOnline/fix/css-lag

Fix character select screen lag/performance overhead
This commit is contained in:
oldmud0 2021-04-20 00:20:54 -05:00 committed by GitHub
commit d0ef4831de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 29 additions and 29 deletions

View File

@ -11,7 +11,7 @@
class AOImage : public QLabel { class AOImage : public QLabel {
public: public:
AOImage(QWidget *parent, AOApplication *p_ao_app); AOImage(QWidget *parent, AOApplication *p_ao_app, bool make_static = false);
~AOImage(); ~AOImage();
QWidget *m_parent; QWidget *m_parent;
@ -20,6 +20,8 @@ public:
QString path; QString path;
bool is_static = false;
bool set_image(QString p_image, QString p_misc = ""); bool set_image(QString p_image, QString p_misc = "");
void set_size_and_pos(QString identifier); void set_size_and_pos(QString identifier);
}; };

View File

@ -755,7 +755,6 @@ private:
QVector<AOCharButton *> ui_char_button_list; QVector<AOCharButton *> ui_char_button_list;
QVector<AOCharButton *> ui_char_button_list_filtered; QVector<AOCharButton *> ui_char_button_list_filtered;
AOImage *ui_selector;
AOButton *ui_back_to_lobby; AOButton *ui_back_to_lobby;

View File

@ -15,19 +15,19 @@ AOCharButton::AOCharButton(QWidget *parent, AOApplication *p_ao_app, int x_pos,
this->resize(60, 60); this->resize(60, 60);
this->move(x_pos, y_pos); this->move(x_pos, y_pos);
ui_taken = new AOImage(this, ao_app); ui_taken = new AOImage(this, ao_app, true);
ui_taken->resize(60, 60); ui_taken->resize(60, 60);
ui_taken->set_image("char_taken"); ui_taken->set_image("char_taken");
ui_taken->setAttribute(Qt::WA_TransparentForMouseEvents); ui_taken->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_taken->hide(); ui_taken->hide();
ui_passworded = new AOImage(this, ao_app); ui_passworded = new AOImage(this, ao_app, true);
ui_passworded->resize(60, 60); ui_passworded->resize(60, 60);
ui_passworded->set_image("char_passworded"); ui_passworded->set_image("char_passworded");
ui_passworded->setAttribute(Qt::WA_TransparentForMouseEvents); ui_passworded->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_passworded->hide(); ui_passworded->hide();
ui_selector = new AOImage(parent, ao_app); ui_selector = new AOImage(parent, ao_app, true);
ui_selector->resize(62, 62); ui_selector->resize(62, 62);
ui_selector->move(x_pos - 1, y_pos - 1); ui_selector->move(x_pos - 1, y_pos - 1);
ui_selector->set_image("char_selector"); ui_selector->set_image("char_selector");

View File

@ -9,14 +9,14 @@ AOEvidenceButton::AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app,
ao_app = p_ao_app; ao_app = p_ao_app;
m_parent = p_parent; m_parent = p_parent;
ui_selected = new AOImage(this, ao_app); ui_selected = new AOImage(this, ao_app, true);
ui_selected->resize(p_w, p_h); ui_selected->resize(p_w, p_h);
// ui_selected->move(p_x, p_y); // ui_selected->move(p_x, p_y);
ui_selected->set_image("evidence_selected"); ui_selected->set_image("evidence_selected");
ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents); ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_selected->hide(); ui_selected->hide();
ui_selector = new AOImage(this, ao_app); ui_selector = new AOImage(this, ao_app, true);
ui_selector->resize(p_w, p_h); ui_selector->resize(p_w, p_h);
// ui_selector->move(p_x - 1, p_y - 1); // ui_selector->move(p_x - 1, p_y - 1);
ui_selector->set_image("evidence_selector"); ui_selector->set_image("evidence_selector");

View File

@ -4,18 +4,22 @@
#include <QBitmap> #include <QBitmap>
AOImage::AOImage(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent) AOImage::AOImage(QWidget *parent, AOApplication *p_ao_app, bool make_static) : QLabel(parent)
{ {
m_parent = parent; m_parent = parent;
ao_app = p_ao_app; ao_app = p_ao_app;
movie = new QMovie(); is_static = make_static;
connect(movie, &QMovie::frameChanged, [=]{ if (!is_static) // Only create the QMovie if we're non-static
QPixmap f_pixmap = movie->currentPixmap(); {
f_pixmap = movie = new QMovie(this);
f_pixmap.scaled(this->size(), Qt::IgnoreAspectRatio); connect(movie, &QMovie::frameChanged, [=]{
this->setPixmap(f_pixmap); QPixmap f_pixmap = movie->currentPixmap();
this->setMask(f_pixmap.mask()); f_pixmap =
}); f_pixmap.scaled(this->size(), Qt::IgnoreAspectRatio);
this->setPixmap(f_pixmap);
this->setMask(f_pixmap.mask());
});
}
} }
AOImage::~AOImage() {} AOImage::~AOImage() {}
@ -23,7 +27,7 @@ AOImage::~AOImage() {}
bool AOImage::set_image(QString p_path, QString p_misc) bool AOImage::set_image(QString p_path, QString p_misc)
{ {
// Check if the user wants animated themes // Check if the user wants animated themes
if (ao_app->get_animated_theme()) if (!is_static && ao_app->get_animated_theme())
// We want an animated image // We want an animated image
p_path = ao_app->get_image(p_path, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_misc); p_path = ao_app->get_image(p_path, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_misc);
else else
@ -35,12 +39,14 @@ bool AOImage::set_image(QString p_path, QString p_misc)
return false; return false;
} }
path = p_path; path = p_path;
movie->stop(); if (!is_static) {
movie->setFileName(path); movie->stop();
if (ao_app->get_animated_theme() && movie->frameCount() > 1) { movie->setFileName(path);
movie->start(); if (ao_app->get_animated_theme() && movie->frameCount() > 1) {
movie->start();
}
} }
else { if (is_static || !ao_app->get_animated_theme() || movie->frameCount() <= 1) {
QPixmap f_pixmap(path); QPixmap f_pixmap(path);
f_pixmap = f_pixmap =

View File

@ -21,10 +21,6 @@ void Courtroom::construct_char_select()
ui_char_buttons = new QWidget(ui_char_select_background); ui_char_buttons = new QWidget(ui_char_select_background);
ui_selector = new AOImage(ui_char_select_background, ao_app);
ui_selector->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_selector->resize(62, 62);
ui_back_to_lobby = new AOButton(ui_char_select_background, ao_app); ui_back_to_lobby = new AOButton(ui_char_select_background, ao_app);
ui_char_password = new QLineEdit(ui_char_select_background); ui_char_password = new QLineEdit(ui_char_select_background);

View File

@ -978,9 +978,6 @@ void Courtroom::set_widgets()
set_size_and_pos(ui_sfx_slider, "sfx_slider"); set_size_and_pos(ui_sfx_slider, "sfx_slider");
set_size_and_pos(ui_blip_slider, "blip_slider"); set_size_and_pos(ui_blip_slider, "blip_slider");
ui_selector->set_image("char_selector");
ui_selector->hide();
set_size_and_pos(ui_back_to_lobby, "back_to_lobby"); set_size_and_pos(ui_back_to_lobby, "back_to_lobby");
ui_back_to_lobby->setText(tr("Back to Lobby")); ui_back_to_lobby->setText(tr("Back to Lobby"));
ui_back_to_lobby->setToolTip(tr("Return back to the server list.")); ui_back_to_lobby->setToolTip(tr("Return back to the server list."));