aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Skoland <davidskoland@gmail.com>2017-02-02 17:37:47 +0100
committerDavid Skoland <davidskoland@gmail.com>2017-02-02 17:37:47 +0100
commitde7d25962f62a62ba282c35d1a64c740affd53db (patch)
treeb783e9da1013a85c6d8194fac6e7f3a4e76e3342
parent051d9dc4ddde110b3916a7019c0a4e12ad35a245 (diff)
added dynamic resolution scaling
-rw-r--r--aoapplication.h3
-rw-r--r--aoimage.cpp17
-rw-r--r--aoimage.h1
-rw-r--r--aoscene.cpp40
-rw-r--r--aoscene.h6
-rw-r--r--base/themes/default/courtroom_design.ini7
-rw-r--r--courtroom.cpp133
-rw-r--r--courtroom.h13
-rw-r--r--path_functions.cpp13
9 files changed, 148 insertions, 85 deletions
diff --git a/aoapplication.h b/aoapplication.h
index 664bac13..4144ef56 100644
--- a/aoapplication.h
+++ b/aoapplication.h
@@ -83,6 +83,9 @@ public:
QString get_sounds_path();
QString get_music_path();
+ QString get_background_path();
+ QString get_default_background_path();
+
//implementation in text_file_functions.cpp
QString read_user_theme();
void write_to_serverlist_txt(QString p_line);
diff --git a/aoimage.cpp b/aoimage.cpp
index 4b0e9738..fc72913d 100644
--- a/aoimage.cpp
+++ b/aoimage.cpp
@@ -23,3 +23,20 @@ void AOImage::set_image(QString p_image)
else
this->setPixmap(default_image_path);
}
+
+void AOImage::set_scaled_image(QString p_image)
+{
+ QString theme_image_path = ao_app->get_theme_path() + p_image;
+ QString default_image_path = ao_app->get_default_theme_path() + p_image;
+
+ QString final_image_path;
+
+ if (file_exists(theme_image_path))
+ final_image_path = theme_image_path;
+ else
+ final_image_path = default_image_path;
+
+ QPixmap f_pixmap(final_image_path);
+
+ this->setPixmap(f_pixmap.scaled(this->width(), this->height()));
+}
diff --git a/aoimage.h b/aoimage.h
index 95f10ca2..635d4f0e 100644
--- a/aoimage.h
+++ b/aoimage.h
@@ -17,6 +17,7 @@ public:
AOApplication *ao_app;
void set_image(QString p_image);
+ void set_scaled_image(QString p_image);
void set_size_and_pos(QString identifier);
};
diff --git a/aoscene.cpp b/aoscene.cpp
index c925f9c4..126a604b 100644
--- a/aoscene.cpp
+++ b/aoscene.cpp
@@ -6,23 +6,22 @@
#include <QDebug>
-AOScene::AOScene(Courtroom *parent) : QLabel(parent)
+AOScene::AOScene(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
{
- m_courtroom = parent;
+ m_parent = parent;
+ ao_app = p_ao_app;
}
void AOScene::set_image(QString p_image)
{
- QString background_path = m_courtroom->get_background_path() + p_image;
- QString default_path = m_courtroom->get_default_background_path() + p_image;
+ QString background_path = ao_app->get_background_path() + p_image;
+ QString default_path = ao_app->get_default_background_path() + p_image;
QPixmap background(background_path);
QPixmap default_bg(default_path);
int w = this->width();
- qDebug() << "AOScene width found to be " << w;
int h = this->height();
- qDebug() << "AOScene height found to be " << h;
if (file_exists(background_path))
this->setPixmap(background.scaled(w, h));
@@ -35,24 +34,27 @@ void AOScene::set_legacy_desk(QString p_image)
//vanilla desks vary in both width and height. in order to make that work with viewport rescaling,
//some INTENSE math is needed.
- QImage f_image(p_image);
+ QString desk_path = ao_app->get_background_path() + p_image;
+ QString default_path = ao_app->get_default_background_path() + p_image;
- int vp_x = m_courtroom->get_vp_x();
- int vp_y = m_courtroom->get_vp_y();
- int vp_width = m_courtroom->get_vp_w();
- int vp_height = m_courtroom->get_vp_h();
+ QPixmap f_desk;
- double y_modifier = 147 / 192;
+ if (file_exists(desk_path))
+ f_desk.load(desk_path);
+ else
+ f_desk.load(default_path);
+
+ int vp_width = m_parent->width();
+ int vp_height = m_parent->height();
+
+ //double y_modifier = 147 / 192;
double w_modifier = vp_width / 256;
double h_modifier = vp_height / 192;
- int final_x = vp_x;
- int final_y = vp_y + y_modifier * vp_height;
- int final_w = w_modifier * f_image.width();
- int final_h = h_modifier * f_image.height();
+ //int final_y = y_modifier * vp_height;
+ int final_w = w_modifier * f_desk.width();
+ int final_h = h_modifier * f_desk.height();
- this->move(final_x, final_y);
this->resize(final_w, final_h);
-
-
+ this->setPixmap(f_desk.scaled(final_w, final_h));
}
diff --git a/aoscene.h b/aoscene.h
index 37a3d0ca..8c964451 100644
--- a/aoscene.h
+++ b/aoscene.h
@@ -4,18 +4,20 @@
#include <QLabel>
class Courtroom;
+class AOApplication;
class AOScene : public QLabel
{
Q_OBJECT
public:
- explicit AOScene(Courtroom *parent);
+ explicit AOScene(QWidget *parent, AOApplication *p_ao_app);
void set_image(QString p_image);
void set_legacy_desk(QString p_image);
private:
- Courtroom *m_courtroom;
+ QWidget *m_parent;
+ AOApplication *ao_app;
};
diff --git a/base/themes/default/courtroom_design.ini b/base/themes/default/courtroom_design.ini
index e7a3de4b..16e5f474 100644
--- a/base/themes/default/courtroom_design.ini
+++ b/base/themes/default/courtroom_design.ini
@@ -1,12 +1,17 @@
courtroom = 0, 0, 714, 668
viewport = 0, 0, 256, 192
+chatbox = 0, 96, 256, 78
+ao2_chatbox = 0, 114, 256, 78
+showname = 6, 113, 80, 15
+message = 3, 132, 250, 60
ic_chatlog = 260, 0, 231, 319
ms_chatlog = 490, 1, 224, 277
server_chatlog = 490, 1, 224, 277
mute_list = 260, 160, 231, 159
area_list = 266, 494, 224, 174
music_list = 490, 342, 224, 326
-ic_chat_message = 0, 192, 255, 23
+ic_chat_message = 0, 174, 256, 23
+ao2_ic_chat_message = 0, 192, 256, 23
ooc_chat_message = 492, 281, 222, 19
ooc_chat_name = 492, 300, 85, 19
area_password = 266, 471, 224, 23
diff --git a/courtroom.cpp b/courtroom.cpp
index a93bbf75..f5d342cf 100644
--- a/courtroom.cpp
+++ b/courtroom.cpp
@@ -14,6 +14,9 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
{
ao_app = p_ao_app;
+ keepalive_timer = new QTimer(this);
+ keepalive_timer->start(60000);
+
chat_tick_timer = new QTimer(this);
text_delay = new QTimer(this);
@@ -28,17 +31,19 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_background = new AOImage(this, ao_app);
- ui_vp_background = new AOScene(this);
- ui_vp_player_char = new AOCharMovie(this, ao_app);
- ui_vp_desk = new AOScene(this);
- ui_vp_legacy_desk = new AOScene(this);
- ui_vp_chatbox = new AOImage(this, ao_app);
+ ui_viewport = new QWidget(this);
+ ui_vp_background = new AOScene(ui_viewport, ao_app);
+ ui_vp_player_char = new AOCharMovie(ui_viewport, ao_app);
+ ui_vp_desk = new AOScene(ui_viewport, ao_app);
+ ui_vp_legacy_desk = new AOScene(ui_viewport, ao_app);
+ //ui_vp_legacy_padding = new AOImage(ui_viewport, ao_app);
+ ui_vp_chatbox = new AOImage(ui_viewport, ao_app);
ui_vp_showname = new QLabel(ui_vp_chatbox);
ui_vp_message = new QPlainTextEdit(ui_vp_chatbox);
- ui_vp_testimony = new AOImage(this, ao_app);
- ui_vp_realization = new AOImage(this, ao_app);
- ui_vp_wtce = new AOMovie(this, ao_app);
- ui_vp_objection = new AOMovie(this, ao_app);
+ ui_vp_testimony = new AOImage(ui_viewport, ao_app);
+ ui_vp_realization = new AOImage(ui_viewport, ao_app);
+ ui_vp_wtce = new AOMovie(ui_viewport, ao_app);
+ ui_vp_objection = new AOMovie(ui_viewport, ao_app);
ui_ic_chatlog = new QPlainTextEdit(this);
ui_ic_chatlog->setReadOnly(true);
@@ -172,6 +177,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_spectator = new AOButton(ui_char_select_background, ao_app);
+ connect(keepalive_timer, SIGNAL(timeout()), this, SLOT(ping_server()));
+
connect(ui_vp_objection, SIGNAL(done()), this, SLOT(objection_done()));
connect(ui_ooc_chat_message, SIGNAL(returnPressed()), this, SLOT(on_ooc_return_pressed()));
@@ -200,7 +207,6 @@ void Courtroom::set_widgets()
QString default_ini_path = ao_app->get_base_path() + "themes/default/courtroom_design.ini";
pos_size_type f_courtroom = ao_app->get_pos_and_size("courtroom", design_ini_path);
- pos_size_type f_viewport = ao_app->get_pos_and_size("viewport", design_ini_path);
if (f_courtroom.width < 0 || f_courtroom.height < 0)
{
@@ -212,68 +218,59 @@ void Courtroom::set_widgets()
}
}
-
-
- if (f_viewport.width < 0 || f_viewport.height < 0)
- {
- f_viewport = ao_app->get_pos_and_size("viewport", default_ini_path);
- if (f_viewport.width < 0 || f_viewport.height < 0)
- {
- qDebug() << "ERROR: did not find viewport width or height in courtroom_design.ini!";
- //T0D0: same, critical error
- }
- }
-
m_courtroom_width = f_courtroom.width;
m_courtroom_height = f_courtroom.height;
- m_viewport_x = f_viewport.x;
- m_viewport_y = f_viewport.y;
- m_viewport_width = f_viewport.width;
- m_viewport_height = f_viewport.height;
-
this->setFixedSize(m_courtroom_width, m_courtroom_height);
ui_background->set_image("courtroombackground.png");
ui_background->move(0, 0);
ui_background->resize(m_courtroom_width, m_courtroom_height);
- ui_vp_background->move(m_viewport_x, m_viewport_y);
- ui_vp_background->resize(m_viewport_width, m_viewport_height);
+ set_size_and_pos(ui_viewport, "viewport");
- ui_vp_player_char->move(m_viewport_x, m_viewport_y);
- ui_vp_player_char->combo_resize(m_viewport_width, m_viewport_height);
+ ui_vp_background->move(0, 0);
+ ui_vp_background->resize(ui_viewport->width(), ui_viewport->height());
- ui_vp_desk->move(m_viewport_x, m_viewport_y);
- ui_vp_desk->resize(m_viewport_width, m_viewport_height);
- qDebug() << "resized ui_vp_desk to " << m_viewport_width << " and " << m_viewport_height;
+ ui_vp_player_char->move(0, 0);
+ ui_vp_player_char->combo_resize(ui_viewport->width(), ui_viewport->height());
- ui_vp_chatbox->move(m_viewport_x, m_viewport_y);
- ui_vp_chatbox->resize(m_viewport_width, m_viewport_height);
+ //the AO2 desk element
+ ui_vp_desk->move(0, 0);
+ ui_vp_desk->resize(ui_viewport->width(), ui_viewport->height());
- ui_vp_showname->move(m_viewport_x, m_viewport_y);
- ui_vp_showname->resize(m_viewport_width, m_viewport_height);
+ //the size of the ui_vp_legacy_desk element relies on various factors and is set in set_scene()
- ui_vp_message->move(m_viewport_x, m_viewport_y);
- ui_vp_message->resize(m_viewport_width, m_viewport_height);
+ double y_modifier = 147.0 / 192.0;
+ int final_y = y_modifier * ui_viewport->height();
+ ui_vp_legacy_desk->move(0, final_y);
+ ui_vp_legacy_desk->hide();
- //T0D0: resize it properly
- //D3BUG START
- //obscures some things
- ui_vp_message->hide();
- //D3BUG END
+ //set_size_and_pos(ui_vp_legacy_padding, "legacy_padding");
+ //ui_vp_legacy_padding->setStyleSheet("background-color: rgba(89, 89, 89, 255);");
- ui_vp_testimony->move(m_viewport_x, m_viewport_y);
- ui_vp_testimony->resize(m_viewport_width, m_viewport_height);
+ set_size_and_pos(ui_vp_chatbox, "chatbox");
+ ui_vp_chatbox->set_scaled_image("chatmed.png");
+
+ set_size_and_pos(ui_vp_showname, "showname");
+ ui_vp_showname->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
+ "color: white;");
+
+ set_size_and_pos(ui_vp_message, "message");
+ ui_vp_message->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
+ "color: white;");
- ui_vp_realization->move(m_viewport_x, m_viewport_y);
- ui_vp_realization->resize(m_viewport_width, m_viewport_height);
+ ui_vp_testimony->move(0, 0);
+ ui_vp_testimony->resize(ui_viewport->width(), ui_viewport->height());
- ui_vp_wtce->move(m_viewport_x, m_viewport_y);
- ui_vp_wtce->combo_resize(m_viewport_width, m_viewport_height);
+ ui_vp_realization->move(0, 0);
+ ui_vp_realization->resize(ui_viewport->x(), ui_viewport->y());
- ui_vp_objection->move(m_viewport_x, m_viewport_y);
- ui_vp_objection->combo_resize(m_viewport_width, m_viewport_height);
+ ui_vp_wtce->move(0, 0);
+ ui_vp_wtce->combo_resize(ui_viewport->width(), ui_viewport->height());
+
+ ui_vp_objection->move(0, 0);
+ ui_vp_objection->combo_resize(ui_viewport->width(), ui_viewport->height());
set_size_and_pos(ui_ic_chatlog, "ic_chatlog");
ui_ic_chatlog->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
@@ -295,7 +292,7 @@ void Courtroom::set_widgets()
ui_area_list->setStyleSheet("background-color: rgba(0, 0, 0, 0);");
set_size_and_pos(ui_ic_chat_message, "ic_chat_message");
- ui_ic_chat_message->setStyleSheet("background-color: rgba(89, 89, 89, 0);");
+ ui_ic_chat_message->setStyleSheet("background-color: rgba(89, 89, 89, 255);");
set_size_and_pos(ui_ooc_chat_message, "ooc_chat_message");
ui_ooc_chat_message->setStyleSheet("background-color: rgba(0, 0, 0, 0);");
@@ -520,7 +517,16 @@ void Courtroom::set_background(QString p_background)
file_exists(bg_path + "prosecutiondesk.png") &&
file_exists(bg_path + "stand.png");
- //T0D0: find some way to compensate for legacy resolution
+ if (is_ao2_bg)
+ {
+ set_size_and_pos(ui_vp_chatbox, "ao2_chatbox");
+ set_size_and_pos(ui_ic_chat_message, "ao2_ic_chat_message");
+ }
+ else
+ {
+ set_size_and_pos(ui_vp_chatbox, "chatbox");
+ set_size_and_pos(ui_ic_chat_message, "ic_chat_message");
+ }
}
void Courtroom::enter_courtroom(int p_cid)
@@ -701,6 +707,13 @@ void Courtroom::handle_chatmessage_2()
ui_vp_message->clear();
ui_vp_chatbox->hide();
+ //D3BUG START
+
+ ui_vp_chatbox->show();
+ ui_vp_message->appendPlainText(m_chatmessage[MESSAGE]);
+
+ //D3BUG END
+
set_scene();
set_text_color();
}
@@ -744,7 +757,6 @@ void Courtroom::set_scene()
if (is_ao2_bg)
{
- qDebug() << "found is_ao2_bg to be true";
QString desk_image = "stand.png";
if (f_side == "def")
@@ -817,7 +829,7 @@ void Courtroom::handle_wtce(QString p_wtce)
sfx_player->setSource(wt_sfx);
sfx_player->play();
- ui_vp_wtce->play("witnesstestimony.gif");
+ ui_vp_wtce->play("witnesstestimony");
}
//cross examination
else if (p_wtce == "testimony2")
@@ -829,7 +841,7 @@ void Courtroom::handle_wtce(QString p_wtce)
sfx_player->setSource(ce_sfx);
sfx_player->play();
- ui_vp_wtce->play("crossexamination.gif");
+ ui_vp_wtce->play("crossexamination");
}
}
@@ -941,6 +953,11 @@ void Courtroom::char_clicked(int n_char)
ao_app->send_server_packet(new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" + QString::number(n_real_char) + "#" + get_hdid() + "#%"));
}
+void Courtroom::ping_server()
+{
+ ao_app->send_server_packet(new AOPacket("CH#" + QString::number(m_cid) + "#%"));
+}
+
Courtroom::~Courtroom()
{
diff --git a/courtroom.h b/courtroom.h
index eb660b93..1cb11494 100644
--- a/courtroom.h
+++ b/courtroom.h
@@ -52,11 +52,6 @@ public:
QString get_default_background_path();
int get_cid() {return m_cid;}
- int get_vp_x(){return m_viewport_x;}
- int get_vp_y(){return m_viewport_y;}
- int get_vp_w(){return m_viewport_width;}
- int get_vp_h(){return m_viewport_height;}
-
void enter_courtroom(int p_cid);
@@ -88,6 +83,9 @@ private:
QSignalMapper *char_button_mapper;
+ //triggers ping_server() every 60 seconds
+ QTimer *keepalive_timer;
+
//determines how fast messages tick onto screen
QTimer *chat_tick_timer;
int chat_tick_interval = 60;
@@ -129,10 +127,13 @@ private:
AOImage *ui_background;
+ //ui_viewport is the parent of all the viewport widgets
+ QWidget *ui_viewport;
AOScene *ui_vp_background;
AOCharMovie *ui_vp_player_char;
AOScene *ui_vp_desk;
AOScene *ui_vp_legacy_desk;
+ //AOImage *ui_vp_legacy_padding;
AOImage *ui_vp_chatbox;
QLabel *ui_vp_showname;
QPlainTextEdit *ui_vp_message;
@@ -244,6 +245,8 @@ private slots:
void char_clicked(int n_char);
+ void ping_server();
+
};
#endif // COURTROOM_H
diff --git a/path_functions.cpp b/path_functions.cpp
index b1fd1168..c07d9101 100644
--- a/path_functions.cpp
+++ b/path_functions.cpp
@@ -42,6 +42,19 @@ QString AOApplication::get_music_path()
return get_base_path() + "sounds/music/";
}
+QString AOApplication::get_background_path()
+{
+ if (courtroom_constructed)
+ return w_courtroom->get_background_path();
+ //this function being called when the courtroom isn't constructed makes no sense
+ return "";
+}
+
+QString AOApplication::get_default_background_path()
+{
+ return get_base_path() + "background/gs4/";
+}
+
QString Courtroom::get_background_path()
{
return ao_app->get_base_path() + "background/" + current_background.toLower() + "/";