diff --git a/include/aoemotebutton.h b/include/aoemotebutton.h index add9b43..edabfb6 100644 --- a/include/aoemotebutton.h +++ b/include/aoemotebutton.h @@ -5,6 +5,7 @@ #include #include #include +#include class AOEmoteButton : public QPushButton { Q_OBJECT @@ -16,16 +17,17 @@ public: void set_image(QString p_image, QString p_emote_comment); void set_char_image(QString p_char, int p_emote, bool on); + void set_selected_image(QString p_image); + void set_id(int p_id) { m_id = p_id; } int get_id() { return m_id; } private: QWidget *parent; AOApplication *ao_app; + QLabel *ui_selected = nullptr; int m_id = 0; - - signals: void emote_clicked(int p_id); diff --git a/src/aoemotebutton.cpp b/src/aoemotebutton.cpp index b8e1489..c053984 100644 --- a/src/aoemotebutton.cpp +++ b/src/aoemotebutton.cpp @@ -11,9 +11,24 @@ AOEmoteButton::AOEmoteButton(QWidget *p_parent, AOApplication *p_ao_app, this->move(p_x, p_y); this->resize(p_w, p_h); + ui_selected = new QLabel(this); + ui_selected->resize(size()); + ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents); + ui_selected->hide(); + connect(this, &AOEmoteButton::clicked, this, &AOEmoteButton::on_clicked); } +void AOEmoteButton::set_selected_image(QString p_image) +{ + if (file_exists(p_image)) { + ui_selected->setStyleSheet("border-image: url(\"" + p_image + "\")"); + } + else { + ui_selected->setStyleSheet("background-color: rgba(0, 0, 0, 128)"); + } +} + void AOEmoteButton::set_image(QString p_image, QString p_emote_comment) { QString tmp_p_image = p_image; @@ -45,33 +60,19 @@ void AOEmoteButton::set_char_image(QString p_char, int p_emote, bool on) suffixedPaths.append(ao_app->get_image_suffix(ao_app->get_character_path( p_char, "emotions/button" + emotion_number + suffix))); } + QString image = suffixedPaths[static_cast(on)]; QString emoteComment = ao_app->get_emote_comment(p_char, p_emote); - if (!file_exists(suffixedPaths[on]) && file_exists(suffixedPaths[!on])) { - QImage tmpImage(suffixedPaths[!on]); - tmpImage = tmpImage.convertToFormat(QImage::Format_ARGB32); - QPoint p1, p2; - p2.setY(tmpImage.height()); - - QLinearGradient gradient(p1, p2); - gradient.setColorAt(0, Qt::transparent); - gradient.setColorAt(1, QColor(0, 0, 0, 159)); - - QPainter p(&tmpImage); - p.fillRect(0, 0, tmpImage.width(), tmpImage.height(), gradient); - - gradient.setColorAt(0, QColor(0, 0, 0, 159)); - gradient.setColorAt(1, Qt::transparent); - p.fillRect(0, 0, tmpImage.width(), tmpImage.height(), gradient); - - p.end(); - - // Original suffixed path may be empty, so create the path again - suffixedPaths[on] = QString(suffixedPaths[!on]).replace(suffixes[!on], suffixes[on]); - tmpImage.save(suffixedPaths[on], "png"); + if (on && !file_exists(suffixedPaths[1])) {; + ui_selected->show(); + image = suffixedPaths[0]; + } + else { + ui_selected->hide(); } - set_image(suffixedPaths[on], emoteComment); + set_image(image, emoteComment); } void AOEmoteButton::on_clicked() { emit emote_clicked(m_id); } + diff --git a/src/emotes.cpp b/src/emotes.cpp index 3c06d43..669aa17 100644 --- a/src/emotes.cpp +++ b/src/emotes.cpp @@ -63,13 +63,15 @@ void Courtroom::refresh_emotes() max_emotes_on_page = emote_columns * emote_rows; + QString selected_image = ao_app->get_image_suffix(ao_app->get_theme_path("emote_selected", ""), true); + for (int n = 0; n < max_emotes_on_page; ++n) { int x_pos = (button_width + x_spacing) * x_mod_count; int y_pos = (button_height + y_spacing) * y_mod_count; AOEmoteButton *f_emote = new AOEmoteButton(ui_emotes, ao_app, x_pos, y_pos, button_width, button_height); - + f_emote->set_selected_image(selected_image); ui_emote_list.append(f_emote); f_emote->set_id(n);