Add copy codeblock button to built-in documentation
This commit is contained in:
parent
01dc5c5b58
commit
f739f78871
1 changed files with 29 additions and 10 deletions
|
@ -291,6 +291,8 @@ void EditorHelp::_class_desc_select(const String &p_select) {
|
|||
}
|
||||
} else if (p_select.begins_with("http")) {
|
||||
OS::get_singleton()->shell_open(p_select);
|
||||
} else if (p_select.begins_with("^")) {
|
||||
DisplayServer::get_singleton()->clipboard_set(p_select.trim_prefix("^"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2386,6 +2388,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt, Control
|
|||
bool code_tag = false;
|
||||
bool codeblock_tag = false;
|
||||
const bool using_tab_indent = int(EDITOR_GET("text_editor/behavior/indent/type")) == 0;
|
||||
StringBuilder codeblock_text;
|
||||
|
||||
int pos = 0;
|
||||
while (pos < bbcode.length()) {
|
||||
|
@ -2419,6 +2422,9 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt, Control
|
|||
if (!code_tag && !codeblock_tag) {
|
||||
text = text.replace("\n", "\n\n");
|
||||
}
|
||||
if (codeblock_tag) {
|
||||
codeblock_text.append(text);
|
||||
}
|
||||
p_rt->add_text(text);
|
||||
}
|
||||
|
||||
|
@ -2452,22 +2458,33 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt, Control
|
|||
tag_stack.pop_front();
|
||||
pos = brk_end + 1;
|
||||
if (tag != "/img") {
|
||||
p_rt->pop();
|
||||
if (code_tag) {
|
||||
p_rt->pop(); // color
|
||||
p_rt->pop(); // background color
|
||||
p_rt->pop(); // font size
|
||||
// Pop both color and background color.
|
||||
p_rt->pop();
|
||||
p_rt->pop();
|
||||
} else if (codeblock_tag) {
|
||||
p_rt->pop(); // color
|
||||
p_rt->pop(); // cell
|
||||
|
||||
// Copy codeblock button.
|
||||
p_rt->push_cell();
|
||||
p_rt->set_cell_row_background_color(code_bg_color, Color(code_bg_color, 0.99));
|
||||
p_rt->set_cell_padding(Rect2(0, 10 * EDSCALE, 0, 10 * EDSCALE));
|
||||
p_rt->set_cell_size_override(Vector2(1, 1), Vector2(10, 10) * EDSCALE);
|
||||
p_rt->push_meta("^" + codeblock_text.as_string(), RichTextLabel::META_UNDERLINE_ON_HOVER);
|
||||
codeblock_text = StringBuilder();
|
||||
p_rt->add_image(p_owner_node->get_editor_theme_icon(SNAME("ActionCopy")), 24 * EDSCALE, 24 * EDSCALE, Color(link_property_color, 0.3), INLINE_ALIGNMENT_BOTTOM_TO, Rect2(), Variant(), false, TTR("Click to copy."));
|
||||
p_rt->pop(); // meta
|
||||
p_rt->pop(); // cell
|
||||
|
||||
p_rt->pop(); // table
|
||||
p_rt->pop(); // font size
|
||||
// Pop color, cell and table.
|
||||
p_rt->pop();
|
||||
p_rt->pop();
|
||||
p_rt->pop();
|
||||
|
||||
if (pos < bbcode.length()) {
|
||||
p_rt->add_newline();
|
||||
}
|
||||
}
|
||||
p_rt->pop(); // Pops font for codetags & codeblocks, anything else for other tags.
|
||||
}
|
||||
code_tag = false;
|
||||
codeblock_tag = false;
|
||||
|
@ -2475,7 +2492,9 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt, Control
|
|||
} else if (code_tag || codeblock_tag) {
|
||||
p_rt->add_text("[");
|
||||
pos = brk_pos + 1;
|
||||
|
||||
if (codeblock_tag) {
|
||||
codeblock_text.append("[");
|
||||
}
|
||||
} else if (tag.begins_with("method ") || tag.begins_with("constructor ") || tag.begins_with("operator ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ") || tag.begins_with("annotation ") || tag.begins_with("theme_item ")) {
|
||||
const int tag_end = tag.find_char(' ');
|
||||
const String link_tag = tag.substr(0, tag_end);
|
||||
|
@ -2575,7 +2594,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt, Control
|
|||
p_rt->push_font(doc_code_font);
|
||||
p_rt->push_font_size(doc_code_font_size);
|
||||
|
||||
p_rt->push_table(1);
|
||||
p_rt->push_table(2);
|
||||
p_rt->push_cell();
|
||||
p_rt->set_cell_row_background_color(code_bg_color, Color(code_bg_color, 0.99));
|
||||
p_rt->set_cell_padding(Rect2(10 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE));
|
||||
|
|
Loading…
Reference in a new issue