APNG Support

This commit is contained in:
iamgoofball 2018-10-17 08:11:52 -07:00
parent d1347b2243
commit b56421365a
6 changed files with 34 additions and 9 deletions

View File

@ -5,7 +5,7 @@
#------------------------------------------------- #-------------------------------------------------
QT += core gui multimedia network QT += core gui multimedia network
QTPLUGIN += qapng
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
RC_ICONS = logo.ico RC_ICONS = logo.ico
@ -88,7 +88,7 @@ HEADERS += lobby.h \
# in the same way as BASS. Discord RPC uses CMake, which does not play nicely with # in the same way as BASS. Discord RPC uses CMake, which does not play nicely with
# QMake, so this step must be manual. # QMake, so this step must be manual.
unix:LIBS += -L$$PWD -lbass -ldiscord-rpc unix:LIBS += -L$$PWD -lbass -ldiscord-rpc
win32:LIBS += -L$$PWD "$$PWD/bass.dll" -L$$PWD "$$PWD/discord-rpc.dll" win32:LIBS += -L$$PWD "$$PWD/bass.dll" -L$$PWD "$$PWD/discord-rpc.dll" -lpng -lqapng -lz
android:LIBS += -L$$PWD\android\libs\armeabi-v7a\ -lbass android:LIBS += -L$$PWD\android\libs\armeabi-v7a\ -lbass
CONFIG += c++11 CONFIG += c++11

View File

@ -172,6 +172,9 @@ public:
//Figure out if we can opus this or if we should fall back to wav //Figure out if we can opus this or if we should fall back to wav
QString get_sfx_suffix(QString sound_to_check); QString get_sfx_suffix(QString sound_to_check);
// Can we use APNG for this? If not, fall back to a gif.
QString get_image_suffix(QString path_to_check);
//Returns the value of p_search_line within target_tag and terminator_tag //Returns the value of p_search_line within target_tag and terminator_tag
QString read_char_ini(QString p_char, QString p_search_line, QString target_tag, QString terminator_tag); QString read_char_ini(QString p_char, QString p_search_line, QString target_tag, QString terminator_tag);

View File

@ -3,6 +3,8 @@
#include "misc_functions.h" #include "misc_functions.h"
#include "file_functions.h" #include "file_functions.h"
#include "aoapplication.h" #include "aoapplication.h"
#include "debug_functions.h"
#include <string>
AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent) AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
{ {
@ -21,11 +23,14 @@ void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix)
{ {
QString original_path = ao_app->get_character_path(p_char) + emote_prefix + p_emote.toLower() + ".gif"; QString original_path = ao_app->get_character_path(p_char) + emote_prefix + p_emote.toLower() + ".gif";
QString alt_path = ao_app->get_character_path(p_char) + p_emote.toLower() + ".png"; QString alt_path = ao_app->get_character_path(p_char) + p_emote.toLower() + ".png";
QString apng_path = ao_app->get_character_path(p_char) + emote_prefix + p_emote.toLower() + ".apng";
QString placeholder_path = ao_app->get_theme_path() + "placeholder.gif"; QString placeholder_path = ao_app->get_theme_path() + "placeholder.gif";
QString placeholder_default_path = ao_app->get_default_theme_path() + "placeholder.gif"; QString placeholder_default_path = ao_app->get_default_theme_path() + "placeholder.gif";
QString gif_path; QString gif_path;
if (file_exists(original_path)) if (file_exists(apng_path))
gif_path = apng_path;
else if (file_exists(original_path))
gif_path = original_path; gif_path = original_path;
else if (file_exists(alt_path)) else if (file_exists(alt_path))
gif_path = alt_path; gif_path = alt_path;
@ -148,6 +153,7 @@ void AOCharMovie::combo_resize(int w, int h)
void AOCharMovie::frame_change(int n_frame) void AOCharMovie::frame_change(int n_frame)
{ {
if (movie_frames.size() > n_frame) if (movie_frames.size() > n_frame)
{ {
QPixmap f_pixmap = QPixmap::fromImage(movie_frames.at(n_frame)); QPixmap f_pixmap = QPixmap::fromImage(movie_frames.at(n_frame));

View File

@ -1219,13 +1219,13 @@ void Courtroom::play_preanim()
preanim_duration = ao2_duration; preanim_duration = ao2_duration;
sfx_delay_timer->start(sfx_delay); sfx_delay_timer->start(sfx_delay);
QString anim_to_find = ao_app->get_image_suffix(ao_app->get_character_path(f_char) + f_preanim.toLower());
if (!file_exists(ao_app->get_character_path(f_char) + f_preanim.toLower() + ".gif") || if (!file_exists(anim_to_find) ||
preanim_duration < 0) preanim_duration < 0)
{ {
anim_state = 1; anim_state = 1;
preanim_done(); preanim_done();
qDebug() << "could not find " + ao_app->get_character_path(f_char) + f_preanim.toLower() + ".gif"; qDebug() << "could not find " + anim_to_find;
return; return;
} }

View File

@ -5,9 +5,9 @@
#include "networkmanager.h" #include "networkmanager.h"
#include "lobby.h" #include "lobby.h"
#include "courtroom.h" #include "courtroom.h"
#include <QPluginLoader>
#include <QDebug> #include <QDebug>
Q_IMPORT_PLUGIN(ApngImagePlugin);
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#if QT_VERSION > QT_VERSION_CHECK(5, 6, 0) #if QT_VERSION > QT_VERSION_CHECK(5, 6, 0)
@ -16,10 +16,10 @@ int main(int argc, char *argv[])
// packages up to Qt 5.6, so this is conditional. // packages up to Qt 5.6, so this is conditional.
AOApplication::setAttribute(Qt::AA_EnableHighDpiScaling); AOApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif #endif
AOApplication main_app(argc, argv); AOApplication main_app(argc, argv);
main_app.construct_lobby(); main_app.construct_lobby();
main_app.net_manager->connect_to_master(); main_app.net_manager->connect_to_master();
main_app.w_lobby->show(); main_app.w_lobby->show();
return main_app.exec(); return main_app.exec();
} }

View File

@ -360,6 +360,22 @@ QString AOApplication::get_sfx_suffix(QString sound_to_check)
return sound_to_check + ".wav"; return sound_to_check + ".wav";
} }
QString AOApplication::get_image_suffix(QString path_to_check)
{
QString apng_check = path_to_check + ".apng";
QString gif_check = path_to_check + ".gif";
if(file_exists(apng_check))
{
return path_to_check + ".apng";
}
if(file_exists(gif_check))
{
return path_to_check + ".gif";
}
return path_to_check + ".gif";
}
//returns whatever is to the right of "search_line =" within target_tag and terminator_tag, trimmed //returns whatever is to the right of "search_line =" within target_tag and terminator_tag, trimmed
//returns the empty string if the search line couldnt be found //returns the empty string if the search line couldnt be found
QString AOApplication::read_char_ini(QString p_char, QString p_search_line, QString target_tag, QString terminator_tag) QString AOApplication::read_char_ini(QString p_char, QString p_search_line, QString target_tag, QString terminator_tag)