aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/aoapplication.h2
-rw-r--r--include/aotextarea.h2
-rw-r--r--include/courtroom.h27
-rw-r--r--include/datatypes.h4
-rw-r--r--src/courtroom.cpp523
-rw-r--r--src/text_file_functions.cpp68
6 files changed, 220 insertions, 406 deletions
diff --git a/include/aoapplication.h b/include/aoapplication.h
index 5fb63386..fef299b2 100644
--- a/include/aoapplication.h
+++ b/include/aoapplication.h
@@ -242,7 +242,7 @@ public:
//Returns the color with p_identifier from p_file
QColor get_color(QString p_identifier, QString p_file);
- // Returns the colour from the misc folder.
+ // Returns the color from the misc folder.
QColor get_chat_color(QString p_identifier, QString p_chat);
//Returns the sfx with p_identifier from sounds.ini in the current theme path
diff --git a/include/aotextarea.h b/include/aotextarea.h
index 13b29c9e..643a8e34 100644
--- a/include/aotextarea.h
+++ b/include/aotextarea.h
@@ -13,7 +13,7 @@ public:
AOTextArea(QWidget *p_parent = nullptr);
void append_linked(QString p_message);
- void append_chatmessage(QString p_name, QString p_message, QString p_colour);
+ void append_chatmessage(QString p_name, QString p_message, QString p_colur);
void append_error(QString p_message);
private:
diff --git a/include/courtroom.h b/include/courtroom.h
index 26018e2c..5aad1cb4 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -171,7 +171,7 @@ public:
//sets text color based on text color in chatmessage
void set_text_color();
- // And gets the colour, too!
+ // And gets the color, too!
QColor get_text_color(QString color);
//takes in serverD-formatted IP list as prints a converted version to server OOC
@@ -202,7 +202,7 @@ public:
//these are for OOC chat
void append_ms_chatmessage(QString f_name, QString f_message);
- void append_server_chatmessage(QString p_name, QString p_message, QString p_colour);
+ void append_server_chatmessage(QString p_name, QString p_message, QString p_color);
//these functions handle chatmessages sequentially.
//The process itself is very convoluted and merits separate documentation
@@ -213,7 +213,7 @@ public:
//This function filters out the common CC inline text trickery, for appending to
//the IC chatlog.
- QString filter_ic_text(QString p_text);
+ QString filter_ic_text(QString p_text, bool colorize = false, int pos = -1, int default_color = WHITE);
//adds text to the IC chatlog. p_name first as bold then p_text then a newlin
//this function keeps the chatlog scrolled to the top unless there's text selected
@@ -259,18 +259,6 @@ private:
QParallelAnimationGroup *screenshake_animation_group = new QParallelAnimationGroup;
- // This is for inline message-colouring.
-
- enum INLINE_COLOURS {
- INLINE_BLUE,
- INLINE_GREEN,
- INLINE_ORANGE,
- INLINE_GREY
- };
-
- // A stack of inline colours.
- std::stack<INLINE_COLOURS> inline_colour_stack;
-
bool next_character_is_not_special = false; // If true, write the
// next character as it is.
@@ -279,14 +267,6 @@ private:
int current_display_speed = 3;
int message_display_speed[7] = {0, 10, 25, 40, 50, 70, 90};
- // This is for checking if the character should start talking again
- // when an inline blue text ends.
- bool entire_message_is_blue = false;
-
- // And this is the inline 'talking checker'. Counts how 'deep' we are
- // in inline blues.
- int inline_blue_depth = 0;
-
// The character ID of the character this user wants to appear alongside with.
int other_charid = -1;
@@ -356,6 +336,7 @@ private:
bool chatmessage_is_empty = false;
QString previous_ic_message = "";
+ QString additive_previous = "";
//char id, muted or not
QMap<int, bool> mute_map;
diff --git a/include/datatypes.h b/include/datatypes.h
index 5426d981..1917482a 100644
--- a/include/datatypes.h
+++ b/include/datatypes.h
@@ -120,7 +120,9 @@ enum COLOR
YELLOW,
RAINBOW,
PINK,
- CYAN
+ CYAN,
+ GRAY,
+ BLANK
};
#endif // DATATYPES_H
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 3d131cd1..48b88648 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -1266,7 +1266,7 @@ void Courtroom::list_areas()
if (ao_app->arup_enabled)
{
- // Colouring logic here.
+ // Coloring logic here.
ui_area_list->item(n_listed_areas)->setBackground(free_brush);
if (arup_locks.at(n_area) == "LOCKED")
{
@@ -1301,21 +1301,21 @@ void Courtroom::append_ms_chatmessage(QString f_name, QString f_message)
ui_ms_chatlog->append_chatmessage(f_name, f_message, ao_app->get_color("ms_chatlog_sender_color", "courtroom_fonts.ini").name());
}
-void Courtroom::append_server_chatmessage(QString p_name, QString p_message, QString p_colour)
+void Courtroom::append_server_chatmessage(QString p_name, QString p_message, QString p_color)
{
- QString colour = "#000000";
+ QString color = "#000000";
- if (p_colour == "0")
- colour = ao_app->get_color("ms_chatlog_sender_color", "courtroom_fonts.ini").name();
- if (p_colour == "1")
- colour = ao_app->get_color("server_chatlog_sender_color", "courtroom_fonts.ini").name();
+ if (p_color == "0")
+ color = ao_app->get_color("ms_chatlog_sender_color", "courtroom_fonts.ini").name();
+ if (p_color == "1")
+ color = ao_app->get_color("server_chatlog_sender_color", "courtroom_fonts.ini").name();
if(p_message == "Logged in as a moderator.")
{
ui_guard->show();
append_server_chatmessage("CLIENT", "You were granted the Disable Modcalls button.", "1");
}
- ui_server_chatlog->append_chatmessage(p_name, p_message, colour);
+ ui_server_chatlog->append_chatmessage(p_name, p_message, color);
}
void Courtroom::on_chat_return_pressed()
@@ -1635,7 +1635,7 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
ic_chatlog_history.removeFirst();
}
- append_ic_text(": " + m_chatmessage[MESSAGE], f_showname);
+ append_ic_text(m_chatmessage[MESSAGE], f_showname);
previous_ic_message = f_message;
@@ -2060,19 +2060,17 @@ void Courtroom::handle_chatmessage_3()
int f_anim_state = 0;
//BLUE is from an enum in datatypes.h
- bool text_is_blue = m_chatmessage[TEXT_COLOR].toInt() == BLUE;
+ bool text_is_blue = m_chatmessage[TEXT_COLOR].toInt() == BLUE || m_chatmessage[TEXT_COLOR].toInt() == ORANGE;
if (!text_is_blue && text_state == 1)
{
//talking
f_anim_state = 2;
- entire_message_is_blue = false;
}
else
{
//idle
f_anim_state = 3;
- entire_message_is_blue = true;
}
if (f_anim_state <= anim_state)
@@ -2108,148 +2106,156 @@ void Courtroom::handle_chatmessage_3()
}
-QString Courtroom::filter_ic_text(QString p_text)
+QString Courtroom::filter_ic_text(QString p_text, bool colorize, int pos, int default_color)
{
// Get rid of centering.
- if(p_text.startsWith(": ~~"))
- {
- // Don't forget, the p_text part actually everything after the name!
- // Hence why we check for ': ~~'.
-
- // Let's remove those two tildes, then.
- // : _ ~ ~
- // 0 1 2 3
- p_text.remove(2,2);
- }
+ if(p_text.startsWith("~~"))
+ p_text.remove(0,2);
- // Get rid of the inline-colouring.
- // I know, I know, excessive code duplication.
- // Nobody looks in here, I'm fine.
- int trick_check_pos = 0;
+ int check_pos = 0;
bool ic_next_is_not_special = false;
- QString f_character = p_text.at(trick_check_pos);
- std::stack<INLINE_COLOURS> ic_colour_stack;
- while (trick_check_pos < p_text.size())
- {
- f_character = p_text.at(trick_check_pos);
+ QString f_character = p_text.at(check_pos);
+ std::stack<COLOR> ic_color_stack;
- // Escape character.
- if (f_character == "\\" and !ic_next_is_not_special)
- {
- ic_next_is_not_special = true;
- p_text.remove(trick_check_pos,1);
- }
+ if (colorize)
+ {
+ ic_color_stack.push(static_cast<COLOR>(default_color));
+ qDebug() << ic_color_stack.top();
+ QString appendage = "<font color=\""+ get_text_color(QString::number(ic_color_stack.top())).name(QColor::HexRgb) +"\">";
+ p_text.insert(check_pos, appendage);
+ check_pos += appendage.size();
+ if (pos > -1)
+ pos += appendage.size();
+ }
- // Text speed modifier.
- else if (f_character == "{" and !ic_next_is_not_special)
- {
- p_text.remove(trick_check_pos,1);
- }
- else if (f_character == "}" and !ic_next_is_not_special)
- {
- p_text.remove(trick_check_pos,1);
- }
+ while (check_pos < p_text.size())
+ {
+ f_character = p_text.at(check_pos);
+ bool color_update = false;
- else if (f_character == "$" and !ic_next_is_not_special)
+ if (!ic_next_is_not_special)
+ {
+ if (f_character == "\\")
{
- p_text.remove(trick_check_pos,1);
+ ic_next_is_not_special = true;
+ p_text.remove(check_pos, 1);
+ check_pos -= 1;
+ pos -= 1;
}
- else if (f_character == "@" and !ic_next_is_not_special)
+ //Nothing related to colors here
+ else if (f_character == "{" || f_character == "}" || f_character == "@" || f_character == "$")
{
- p_text.remove(trick_check_pos,1);
+ p_text.remove(check_pos, 1);
+ check_pos -= 1;
+ pos -= 1;
}
- // Orange inline colourisation.
- else if (f_character == "|" and !ic_next_is_not_special)
+ //Colors that destroy the character
+ else if (f_character == "`")
{
- if (!ic_colour_stack.empty())
+ if (colorize)
+ {
+ if (!ic_color_stack.empty() && ic_color_stack.top() == GREEN && default_color != GREEN)
+ ic_color_stack.pop(); //Cease our coloring
+ else
{
- if (ic_colour_stack.top() == INLINE_ORANGE)
- {
- ic_colour_stack.pop();
- p_text.remove(trick_check_pos,1);
- }
- else
- {
- ic_colour_stack.push(INLINE_ORANGE);
- p_text.remove(trick_check_pos,1);
- }
+ ic_color_stack.push(GREEN); //Begin our coloring
}
+ color_update = true;
+ }
+ else
+ p_text.remove(check_pos, 1);
+ }
+ else if (f_character == "|")
+ {
+ if (colorize)
+ {
+ if (!ic_color_stack.empty() && ic_color_stack.top() == ORANGE && default_color != ORANGE)
+ ic_color_stack.pop(); //Cease our coloring
else
{
- ic_colour_stack.push(INLINE_ORANGE);
- p_text.remove(trick_check_pos,1);
+ ic_color_stack.push(ORANGE); //Begin our coloring
}
+ color_update = true;
+ }
+ else
+ p_text.remove(check_pos, 1);
}
- // Blue inline colourisation.
- else if (f_character == "(" and !ic_next_is_not_special)
+ //Colors that don't destroy the character and use 2 chars for beginning/end
+ else if (colorize && f_character == "(")
{
- ic_colour_stack.push(INLINE_BLUE);
- trick_check_pos++;
+ ic_color_stack.push(BLUE); //Begin our coloring
+ color_update = true;
}
- else if (f_character == ")" and !ic_next_is_not_special
- and !ic_colour_stack.empty())
+ else if (colorize && f_character == ")" && ic_color_stack.top() == BLUE)
{
- if (ic_colour_stack.top() == INLINE_BLUE)
- {
- ic_colour_stack.pop();
- trick_check_pos++;
- }
- else
- {
- ic_next_is_not_special = true;
- }
+ ic_color_stack.pop(); //Cease our coloring
+ color_update = true;
}
-
- // Grey inline colourisation.
- else if (f_character == "[" and !ic_next_is_not_special)
+ else if (colorize && f_character == "[")
{
- ic_colour_stack.push(INLINE_GREY);
- trick_check_pos++;
+ if (colorize)
+ ic_color_stack.push(GRAY); //Begin our coloring
+ color_update = true;
}
- else if (f_character == "]" and !ic_next_is_not_special
- and !ic_colour_stack.empty())
+ else if (colorize && f_character == "]" && ic_color_stack.top() == GRAY)
{
- if (ic_colour_stack.top() == INLINE_GREY)
- {
- ic_colour_stack.pop();
- trick_check_pos++;
- }
- else
- {
- ic_next_is_not_special = true;
- }
+ if (colorize)
+ ic_color_stack.pop(); //Cease our coloring
+ color_update = true;
}
- // Green inline colourisation.
- else if (f_character == "`" and !ic_next_is_not_special)
+ //Parse the newest color stack
+ if (!ic_next_is_not_special && color_update && (pos <= -1 || check_pos < pos)) //Only color text if we haven't reached the "invisible threshold"
{
- if (!ic_colour_stack.empty())
- {
- if (ic_colour_stack.top() == INLINE_GREEN)
- {
- ic_colour_stack.pop();
- p_text.remove(trick_check_pos,1);
- }
- else
- {
- ic_colour_stack.push(INLINE_GREEN);
- p_text.remove(trick_check_pos,1);
- }
- }
- else
- {
- ic_colour_stack.push(INLINE_GREEN);
- p_text.remove(trick_check_pos,1);
- }
+ QString appendage = "</font>";
+
+ if (!ic_color_stack.empty())
+ appendage += "<font color=\""+ get_text_color(QString::number(ic_color_stack.top())).name(QColor::HexRgb) +"\">";
+
+ if (f_character == "(" || f_character == "[") //Gotta capture them in the color too
+ p_text.insert(check_pos, appendage);
+ else if (f_character == ")" || f_character == "]")
+ p_text.insert(check_pos+1, appendage);
+ else
+ {
+ p_text.remove(check_pos, 1);
+ p_text.insert(check_pos, appendage);
+ check_pos -= 1;
+ pos -= 1;
+ }
+ check_pos += appendage.size();
+ if (pos > -1)
+ pos += appendage.size();
}
- else
+ }
+ else
+ ic_next_is_not_special = false;
+
+ //Make all chars we're not supposed to see invisible
+ if (pos > -1 && check_pos == pos)
+ {
+ QString appendage = "";
+ if (!ic_color_stack.empty())
{
- trick_check_pos++;
- ic_next_is_not_special = false;
+ //Clean it up, we're done here
+ while (!ic_color_stack.empty())
+ ic_color_stack.pop();
+
+ appendage += "</font>";
}
+ ic_color_stack.push(BLANK);
+ appendage += "<font color=\""+ get_text_color(QString::number(BLANK)).name(QColor::HexArgb) +"\">";
+ p_text.insert(check_pos, appendage);
+ }
+ check_pos += 1;
+ }
+
+ if (!ic_color_stack.empty())
+ {
+ p_text.append("</font>");
}
return p_text;
@@ -2292,6 +2298,7 @@ void Courtroom::append_ic_text(QString p_text, QString p_name, bool is_songchang
}
else
{
+ ui_ic_chatlog->textCursor().insertText(": ", normal);
ui_ic_chatlog->textCursor().insertText(p_text, normal);
}
@@ -2302,7 +2309,6 @@ void Courtroom::append_ic_text(QString p_text, QString p_name, bool is_songchang
ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
ui_ic_chatlog->textCursor().removeSelectedText();
ui_ic_chatlog->textCursor().deleteChar();
- //qDebug() << ui_ic_chatlog->document()->blockCount() << " < " << log_maximum_blocks;
}
if (old_cursor.hasSelection() || !is_scrolled_down)
@@ -2333,6 +2339,7 @@ void Courtroom::append_ic_text(QString p_text, QString p_name, bool is_songchang
}
else
{
+ ui_ic_chatlog->textCursor().insertText(": ", normal);
ui_ic_chatlog->textCursor().insertText(p_text + '\n', normal);
}
@@ -2441,7 +2448,7 @@ void Courtroom::start_chat_ticking()
}
set_text_color();
- rainbow_counter = 0;
+// rainbow_counter = 0;
if (chatmessage_is_empty)
{
@@ -2452,10 +2459,10 @@ void Courtroom::start_chat_ticking()
// At this point, we'd do well to clear the inline colour stack.
// This stops it from flowing into next messages.
- while (!inline_colour_stack.empty())
- {
- inline_colour_stack.pop();
- }
+// while (!inline_colour_stack.empty())
+// {
+// inline_colour_stack.pop();
+// }
ui_vp_chatbox->show();
ui_vp_message->show();
@@ -2463,15 +2470,12 @@ void Courtroom::start_chat_ticking()
if (!is_additive)
{
ui_vp_message->clear();
+ additive_previous = "";
}
tick_pos = 0;
blip_pos = 0;
- // Just in case we somehow got inline blue text left over from a previous message,
- // let's set it to false.
- inline_blue_depth = 0;
-
// At the start of every new message, we set the text speed to the default.
current_display_speed = 3;
chat_tick_timer->start(message_display_speed[current_display_speed]);
@@ -2486,11 +2490,10 @@ void Courtroom::start_chat_ticking()
void Courtroom::chat_tick()
{
- //note: this is called fairly often(every 60 ms when char is talking)
+ //note: this is called fairly often
//do not perform heavy operations here
QString f_message = m_chatmessage[MESSAGE];
- f_message.remove(0, tick_pos);
// Due to our new text speed system, we always need to stop the timer now.
chat_tick_timer->stop();
@@ -2498,14 +2501,7 @@ void Courtroom::chat_tick()
// Stops blips from playing when we have a formatting option.
bool formatting_char = false;
- // If previously, we have detected that the message is centered, now
- // is the time to remove those two tildes at the start.
- if (message_is_centered)
- {
- f_message.remove(0,2);
- }
-
- if (f_message.size() == 0)
+ if (tick_pos >= f_message.size())
{
text_state = 2;
if (anim_state != 4)
@@ -2516,239 +2512,78 @@ void Courtroom::chat_tick()
QString f_char = m_chatmessage[CHAR_NAME];
QString f_custom_theme = ao_app->get_char_shouts(f_char);
ui_vp_chat_arrow->play("chat_arrow", f_char, f_custom_theme); //Chat stopped being processed, indicate that.
+ additive_previous = additive_previous + filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
}
else
{
- QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, f_message);
+ QString f_rest = f_message;
+ f_rest.remove(0, tick_pos);
+ QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, f_rest);
QString f_character;
int f_char_length;
tbf.toNextBoundary();
if (tbf.position() == -1)
- f_character = f_message;
+ f_character = f_rest;
else
- f_character = f_message.left(tbf.position());
+ f_character = f_rest.left(tbf.position());
f_char_length = f_character.length();
f_character = f_character.toHtmlEscaped();
-
- if (f_character == " ")
- ui_vp_message->insertPlainText(" ");
-
// Escape character.
- else if (f_character == "\\" and !next_character_is_not_special)
+ if (!next_character_is_not_special)
{
- next_character_is_not_special = true;
- formatting_char = true;
- }
-
- // Text speed modifier.
- else if (f_character == "{" and !next_character_is_not_special)
- {
- // ++, because it INCREASES delay!
- current_display_speed++;
- formatting_char = true;
- }
- else if (f_character == "}" and !next_character_is_not_special)
- {
- current_display_speed--;
- formatting_char = true;
- }
-
- else if (f_character == "@" and !next_character_is_not_special)
- {
- this->do_screenshake();
- formatting_char = true;
- }
-
- else if (f_character == "$" and !next_character_is_not_special)
- {
- this->do_flash();
- formatting_char = true;
- }
-
- // Orange inline colourisation.
- else if (f_character == "|" and !next_character_is_not_special)
- {
- if (!inline_colour_stack.empty())
- {
- if (inline_colour_stack.top() == INLINE_ORANGE)
- {
- inline_colour_stack.pop();
- }
- else
- {
- inline_colour_stack.push(INLINE_ORANGE);
- }
- }
- else
- {
- inline_colour_stack.push(INLINE_ORANGE);
- }
- formatting_char = true;
- }
-
- // Blue inline colourisation.
- else if (f_character == "(" and !next_character_is_not_special)
- {
- inline_colour_stack.push(INLINE_BLUE);
- ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(BLUE)).name() +"\">" + f_character + "</font>");
-
- // Increase how deep we are in inline blues.
- inline_blue_depth++;
-
- // Here, we check if the entire message is blue.
- // If it isn't, we stop talking.
- if (!entire_message_is_blue and anim_state != 4)
- {
- QString f_char = m_chatmessage[CHAR_NAME];
- QString f_emote = m_chatmessage[EMOTE];
- ui_vp_player_char->play_idle(f_char, f_emote);
- }
- }
- else if (f_character == ")" and !next_character_is_not_special
- and !inline_colour_stack.empty())
- {
- if (inline_colour_stack.top() == INLINE_BLUE)
- {
- inline_colour_stack.pop();
- ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(BLUE)).name() +"\">" + f_character + "</font>");
-
- // Decrease how deep we are in inline blues.
- // Just in case, we do a check if we're above zero, but we should be.
- if (inline_blue_depth > 0)
- {
- inline_blue_depth--;
- // Here, we check if the entire message is blue.
- // If it isn't, we start talking if we have completely climbed out of inline blues.
- if (!entire_message_is_blue)
- {
- // We should only go back to talking if we're out of inline blues, not during a non. int. pre, and not on the last character.
- if (inline_blue_depth == 0 and anim_state != 4 and !(tick_pos+1 >= f_message.size()))
- {
- QString f_char = m_chatmessage[CHAR_NAME];
- QString f_emote = m_chatmessage[EMOTE];
- ui_vp_player_char->play_talking(f_char, f_emote);
- }
- }
- }
- }
- else
- {
- next_character_is_not_special = true;
- tick_pos -= f_char_length;
- }
- }
-
- // Grey inline colourisation.
- else if (f_character == "[" and !next_character_is_not_special)
- {
- inline_colour_stack.push(INLINE_GREY);
- ui_vp_message->insertHtml("<font color=\""+ get_text_color("_inline_grey").name() +"\">" + f_character + "</font>");
- }
- else if (f_character == "]" and !next_character_is_not_special
- and !inline_colour_stack.empty())
- {
- if (inline_colour_stack.top() == INLINE_GREY)
- {
- inline_colour_stack.pop();
- ui_vp_message->insertHtml("<font color=\""+ get_text_color("_inline_grey").name() +"\">" + f_character + "</font>");
- }
- else
- {
- next_character_is_not_special = true;
- tick_pos -= f_char_length;
- }
- }
+ if (f_character == "\\")
+ {
+ next_character_is_not_special = true;
+ formatting_char = true;
+ }
- // Green inline colourisation.
- else if (f_character == "`" and !next_character_is_not_special)
- {
- if (!inline_colour_stack.empty())
- {
- if (inline_colour_stack.top() == INLINE_GREEN)
- {
- inline_colour_stack.pop();
- formatting_char = true;
- }
- else
- {
- inline_colour_stack.push(INLINE_GREEN);
- formatting_char = true;
- }
- }
- else
- {
- inline_colour_stack.push(INLINE_GREEN);
- formatting_char = true;
- }
- }
- else
- {
- next_character_is_not_special = false;
- if (!inline_colour_stack.empty())
+ // Text speed modifier.
+ else if (f_character == "{")
{
- switch (inline_colour_stack.top()) {
- case INLINE_ORANGE:
- ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(ORANGE)).name() +"\">" + f_character + "</font>");
- break;
- case INLINE_BLUE:
- ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(BLUE)).name() +"\">" + f_character + "</font>");
- break;
- case INLINE_GREEN:
- ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(GREEN)).name() +"\">" + f_character + "</font>");
- break;
- case INLINE_GREY:
- ui_vp_message->insertHtml("<font color=\""+ get_text_color("_inline_grey").name() +"\">" + f_character + "</font>");
- break;
- }
+ // ++, because it INCREASES delay!
+ current_display_speed++;
+ formatting_char = true;
}
- else
+ else if (f_character == "}")
{
- if (m_chatmessage[TEXT_COLOR].toInt() == RAINBOW)
- {
- QString html_color;
-
- switch (rainbow_counter)
- {
- case 0:
- html_color = get_text_color(QString::number(RED)).name();
- break;
- case 1:
- html_color = get_text_color(QString::number(ORANGE)).name();
- break;
- case 2:
- html_color = get_text_color(QString::number(YELLOW)).name();
- break;
- case 3:
- html_color = get_text_color(QString::number(GREEN)).name();
- break;
- default:
- html_color = get_text_color(QString::number(BLUE)).name();
- rainbow_counter = -1;
- }
-
- ++rainbow_counter;
+ current_display_speed--;
+ formatting_char = true;
+ }
- ui_vp_message->insertHtml("<font color=\"" + html_color + "\">" + f_character + "</font>");
- }
- else
- ui_vp_message->insertHtml(f_character);
+ //Screenshake.
+ else if (f_character == "@")
+ {
+ this->do_screenshake();
+ formatting_char = true;
}
- if (message_is_centered)
+ //Flash.
+ else if (f_character == "$")
{
- ui_vp_message->setAlignment(Qt::AlignCenter);
+ this->do_flash();
+ formatting_char = true;
}
- else
+
+ //Color memes
+ else if (f_character == "`" || f_character == "|")
{
- ui_vp_message->setAlignment(Qt::AlignLeft);
+ formatting_char = true;
}
}
+ else
+ next_character_is_not_special = false;
+ tick_pos += f_char_length;
+
+ //Do the colors, gradual showing, etc. in here
+ ui_vp_message->setHtml(additive_previous + filter_ic_text(f_message, true, tick_pos, m_chatmessage[TEXT_COLOR].toInt()));
+
+ //If the text overflows, make it snap to bottom
QScrollBar *scroll = ui_vp_message->verticalScrollBar();
scroll->setValue(scroll->maximum());
@@ -2773,8 +2608,6 @@ void Courtroom::chat_tick()
++blip_pos;
}
- tick_pos += f_char_length;
-
// If we had a formatting char, we shouldn't wait so long again, as it won't appear!
if (formatting_char)
{
diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp
index 06caf291..91782a86 100644
--- a/src/text_file_functions.cpp
+++ b/src/text_file_functions.cpp
@@ -436,42 +436,40 @@ QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat)
{
QColor return_color(255, 255, 255);
- if (p_identifier == "_inline_grey")
- {
- return_color = QColor(187, 187, 187);
- }
- else
- {
- switch (p_identifier.toInt()) {
- case 1:
- return_color = QColor(0, 255, 0);
- break;
- case 2:
- return_color = QColor(255, 0, 0);
- break;
- case 3:
- return_color = QColor(255, 165, 0);
- break;
- case 4:
- return_color = QColor(45, 150, 255);
- break;
- case 5:
- return_color = QColor(255, 255, 0);
- break;
- case 7:
- return_color = QColor(255, 192, 203);
- break;
- case 8:
- return_color = QColor(0, 255, 255);
- break;
- case 0:
- case 6: // 6 is rainbow.
- default:
- return_color = QColor(255, 255, 255);
- break;
- }
+ switch (p_identifier.toInt()) {
+ case WHITE:
+ case GREEN:
+ return_color = QColor(0, 255, 0);
+ break;
+ case RED:
+ return_color = QColor(255, 0, 0);
+ break;
+ case ORANGE:
+ return_color = QColor(255, 165, 0);
+ break;
+ case BLUE:
+ return_color = QColor(45, 150, 255);
+ break;
+ case YELLOW:
+ return_color = QColor(255, 255, 0);
+ break;
+ case RAINBOW: // 6 is rainbow.
+ case PINK:
+ return_color = QColor(255, 192, 203);
+ break;
+ case CYAN:
+ return_color = QColor(0, 255, 255);
+ break;
+ case GRAY:
+ return_color = QColor(187, 187, 187);
+ break;
+ case BLANK:
+ return_color = QColor(0, 0, 0, 0);
+ break;
+ default:
+ return_color = QColor(255, 255, 255);
+ break;
}
-
p_identifier = p_identifier.prepend("c");
QString design_ini_path = get_base_path() + "misc/" + p_chat + "/config.ini";
QString default_path = get_base_path() + "misc/default/config.ini";