aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrystalwarrior <varsash@gmail.com>2019-09-24 21:24:25 +0300
committerCrystalwarrior <varsash@gmail.com>2019-09-24 21:24:25 +0300
commit7097053723bab5cb91c312abaafeb69dc07dd4ac (patch)
treee1aa578f9764efd74e25c8a6ee04e65fcbafbd6d
parent9911aeb5e6741279715f05d76c054907c58b47de (diff)
Change all instances of "colour" to "color" for consistency's sake
Overhaul inline colors system to properly support additive text and further expansion Add two new colors - Gray and Blank, the latter being used for IC parsing. Instead of adding text symbol by symbol, reveal more of the already-rendered text instead so that it properly anticipates words that need to be on the newline. Changed the append_ic function slightly so it appends ": " to text only after it's no longer needed. Made gray color less inconsistent with everything else
-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";