|
@@ -364,7 +364,8 @@ float RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font
|
|
|
Line &l = p_frame->lines[p_line];
|
|
|
MutexLock lock(l.text_buf->get_mutex());
|
|
|
|
|
|
- l.offset.x = _find_margin(l.from, p_base_font, p_base_font_size) + l.prefix_width;
|
|
|
+ l.indent = _find_margin(l.from, p_base_font, p_base_font_size) + l.prefix_width;
|
|
|
+ l.offset.x = l.indent;
|
|
|
l.text_buf->set_width(p_width - l.offset.x);
|
|
|
|
|
|
PackedFloat32Array tab_stops = _find_tab_stops(l.from);
|
|
@@ -501,7 +502,8 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
|
|
|
}
|
|
|
|
|
|
// Add indent.
|
|
|
- l.offset.x = _find_margin(l.from, p_base_font, p_base_font_size) + l.prefix_width;
|
|
|
+ l.indent = _find_margin(l.from, p_base_font, p_base_font_size) + l.prefix_width;
|
|
|
+ l.offset.x = l.indent;
|
|
|
l.text_buf->set_width(p_width - l.offset.x);
|
|
|
l.text_buf->set_alignment(_find_alignment(l.from));
|
|
|
l.text_buf->set_direction(_find_direction(l.from));
|
|
@@ -625,8 +627,8 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
|
|
|
t_char_count += cell_ch;
|
|
|
remaining_characters -= cell_ch;
|
|
|
|
|
|
- table->columns[column].min_width = MAX(table->columns[column].min_width, ceil(frame->lines[i].text_buf->get_size().x));
|
|
|
- table->columns[column].max_width = MAX(table->columns[column].max_width, ceil(frame->lines[i].text_buf->get_non_wrapped_size().x));
|
|
|
+ table->columns[column].min_width = MAX(table->columns[column].min_width, frame->lines[i].indent + ceil(frame->lines[i].text_buf->get_size().x));
|
|
|
+ table->columns[column].max_width = MAX(table->columns[column].max_width, frame->lines[i].indent + ceil(frame->lines[i].text_buf->get_non_wrapped_size().x));
|
|
|
}
|
|
|
idx++;
|
|
|
}
|
|
@@ -977,6 +979,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
|
|
|
|
|
|
if (frame->lines.size() != 0 && row < row_count) {
|
|
|
Vector2 coff = frame->lines[0].offset;
|
|
|
+ coff.x -= frame->lines[0].indent;
|
|
|
if (rtl) {
|
|
|
coff.x = rect.size.width - table->columns[col].width - coff.x;
|
|
|
}
|
|
@@ -2548,6 +2551,10 @@ int RichTextLabel::_find_margin(Item *p_item, const Ref<Font> &p_base_font, int
|
|
|
float margin = 0.0;
|
|
|
|
|
|
while (item) {
|
|
|
+ if (item->type == ITEM_FRAME) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
if (item->type == ITEM_INDENT) {
|
|
|
Ref<Font> font = p_base_font;
|
|
|
int font_size = p_base_font_size;
|
|
@@ -4295,7 +4302,6 @@ void RichTextLabel::append_text(const String &p_bbcode) {
|
|
|
parsing_bbcode.store(true);
|
|
|
|
|
|
int pos = 0;
|
|
|
- int indent_level = 0;
|
|
|
|
|
|
bool in_bold = false;
|
|
|
bool in_italics = false;
|
|
@@ -4377,7 +4383,7 @@ void RichTextLabel::append_text(const String &p_bbcode) {
|
|
|
in_italics = false;
|
|
|
}
|
|
|
if ((tag_stack.front()->get() == "indent") || (tag_stack.front()->get() == "ol") || (tag_stack.front()->get() == "ul")) {
|
|
|
- indent_level--;
|
|
|
+ current_frame->indent_level--;
|
|
|
}
|
|
|
|
|
|
if (!tag_ok) {
|
|
@@ -4650,44 +4656,44 @@ void RichTextLabel::append_text(const String &p_bbcode) {
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front(tag);
|
|
|
} else if (tag == "ul") {
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_DOTS, false);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_DOTS, false);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front(tag);
|
|
|
} else if (tag.begins_with("ul bullet=")) {
|
|
|
String bullet = _get_tag_value(tag);
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_DOTS, false, bullet);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_DOTS, false, bullet);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front("ul");
|
|
|
} else if ((tag == "ol") || (tag == "ol type=1")) {
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_NUMBERS, false);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_NUMBERS, false);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front("ol");
|
|
|
} else if (tag == "ol type=a") {
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_LETTERS, false);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_LETTERS, false);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front("ol");
|
|
|
} else if (tag == "ol type=A") {
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_LETTERS, true);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_LETTERS, true);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front("ol");
|
|
|
} else if (tag == "ol type=i") {
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_ROMAN, false);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_ROMAN, false);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front("ol");
|
|
|
} else if (tag == "ol type=I") {
|
|
|
- indent_level++;
|
|
|
- push_list(indent_level, LIST_ROMAN, true);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_list(current_frame->indent_level, LIST_ROMAN, true);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front("ol");
|
|
|
} else if (tag == "indent") {
|
|
|
- indent_level++;
|
|
|
- push_indent(indent_level);
|
|
|
+ current_frame->indent_level++;
|
|
|
+ push_indent(current_frame->indent_level);
|
|
|
pos = brk_end + 1;
|
|
|
tag_stack.push_front(tag);
|
|
|
} else if (tag.begins_with("lang=")) {
|