mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Fix Label and RichTextLabale text shadows and shadow outlines.
This commit is contained in:
		
							parent
							
								
									7538c05215
								
							
						
					
					
						commit
						5f9cd9ccbc
					
				
					 11 changed files with 33 additions and 32 deletions
				
			
		|  | @ -194,7 +194,7 @@ | ||||||
| 			The vertical offset of the text's shadow. | 			The vertical offset of the text's shadow. | ||||||
| 		</theme_item> | 		</theme_item> | ||||||
| 		<theme_item name="shadow_outline_size" data_type="constant" type="int" default="1"> | 		<theme_item name="shadow_outline_size" data_type="constant" type="int" default="1"> | ||||||
| 			Shadow outline size. If set to 1 or greater, the shadow will be displayed around the whole text as an outline. | 			The size of the shadow outline. | ||||||
| 		</theme_item> | 		</theme_item> | ||||||
| 	</theme_items> | 	</theme_items> | ||||||
| </class> | </class> | ||||||
|  |  | ||||||
|  | @ -586,15 +586,15 @@ | ||||||
| 		<theme_item name="selection_color" data_type="color" type="Color" default="Color(0.1, 0.1, 1, 0.8)"> | 		<theme_item name="selection_color" data_type="color" type="Color" default="Color(0.1, 0.1, 1, 0.8)"> | ||||||
| 			The color of the selection box. | 			The color of the selection box. | ||||||
| 		</theme_item> | 		</theme_item> | ||||||
| 		<theme_item name="shadow_as_outline" data_type="constant" type="int" default="0"> |  | ||||||
| 			Boolean value. If 1 ([code]true[/code]), the shadow will be displayed around the whole text as an outline. |  | ||||||
| 		</theme_item> |  | ||||||
| 		<theme_item name="shadow_offset_x" data_type="constant" type="int" default="1"> | 		<theme_item name="shadow_offset_x" data_type="constant" type="int" default="1"> | ||||||
| 			The horizontal offset of the font's shadow. | 			The horizontal offset of the font's shadow. | ||||||
| 		</theme_item> | 		</theme_item> | ||||||
| 		<theme_item name="shadow_offset_y" data_type="constant" type="int" default="1"> | 		<theme_item name="shadow_offset_y" data_type="constant" type="int" default="1"> | ||||||
| 			The vertical offset of the font's shadow. | 			The vertical offset of the font's shadow. | ||||||
| 		</theme_item> | 		</theme_item> | ||||||
|  | 		<theme_item name="shadow_outline_size" data_type="constant" type="int" default="1"> | ||||||
|  | 			The size of the shadow outline. | ||||||
|  | 		</theme_item> | ||||||
| 		<theme_item name="table_border" data_type="color" type="Color" default="Color(0, 0, 0, 0)"> | 		<theme_item name="table_border" data_type="color" type="Color" default="Color(0, 0, 0, 0)"> | ||||||
| 			The default cell border color. | 			The default cell border color. | ||||||
| 		</theme_item> | 		</theme_item> | ||||||
|  |  | ||||||
|  | @ -1207,7 +1207,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { | ||||||
| 	theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0)); | 	theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0)); | ||||||
| 	theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * EDSCALE); | 	theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * EDSCALE); | ||||||
| 	theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * EDSCALE); | 	theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * EDSCALE); | ||||||
| 	theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * EDSCALE); | 	theme->set_constant("shadow_outline_size", "RichTextLabel", 1 * EDSCALE); | ||||||
| 	theme->set_stylebox("focus", "RichTextLabel", make_empty_stylebox()); | 	theme->set_stylebox("focus", "RichTextLabel", make_empty_stylebox()); | ||||||
| 	theme->set_stylebox("normal", "RichTextLabel", style_tree_bg); | 	theme->set_stylebox("normal", "RichTextLabel", style_tree_bg); | ||||||
| 
 | 
 | ||||||
|  | @ -1223,7 +1223,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { | ||||||
| 	theme->set_color("font_shadow_color", "Label", Color(0, 0, 0, 0)); | 	theme->set_color("font_shadow_color", "Label", Color(0, 0, 0, 0)); | ||||||
| 	theme->set_constant("shadow_offset_x", "Label", 1 * EDSCALE); | 	theme->set_constant("shadow_offset_x", "Label", 1 * EDSCALE); | ||||||
| 	theme->set_constant("shadow_offset_y", "Label", 1 * EDSCALE); | 	theme->set_constant("shadow_offset_y", "Label", 1 * EDSCALE); | ||||||
| 	theme->set_constant("shadow_as_outline", "Label", 0 * EDSCALE); | 	theme->set_constant("shadow_outline_size", "Label", 1 * EDSCALE); | ||||||
| 	theme->set_constant("line_spacing", "Label", 3 * EDSCALE); | 	theme->set_constant("line_spacing", "Label", 3 * EDSCALE); | ||||||
| 
 | 
 | ||||||
| 	// LinkButton
 | 	// LinkButton
 | ||||||
|  |  | ||||||
|  | @ -6192,14 +6192,14 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte | ||||||
| 
 | 
 | ||||||
| 	label = memnew(Label); | 	label = memnew(Label); | ||||||
| 	label->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 1)); | 	label->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 1)); | ||||||
| 	label->add_theme_constant_override("shadow_as_outline", 1 * EDSCALE); | 	label->add_theme_constant_override("shadow_outline_size", 1 * EDSCALE); | ||||||
| 	label->hide(); | 	label->hide(); | ||||||
| 	canvas_item_editor->get_controls_container()->add_child(label); | 	canvas_item_editor->get_controls_container()->add_child(label); | ||||||
| 
 | 
 | ||||||
| 	label_desc = memnew(Label); | 	label_desc = memnew(Label); | ||||||
| 	label_desc->add_theme_color_override("font_color", Color(0.6f, 0.6f, 0.6f, 1)); | 	label_desc->add_theme_color_override("font_color", Color(0.6f, 0.6f, 0.6f, 1)); | ||||||
| 	label_desc->add_theme_color_override("font_shadow_color", Color(0.2f, 0.2f, 0.2f, 1)); | 	label_desc->add_theme_color_override("font_shadow_color", Color(0.2f, 0.2f, 0.2f, 1)); | ||||||
| 	label_desc->add_theme_constant_override("shadow_as_outline", 1 * EDSCALE); | 	label_desc->add_theme_constant_override("shadow_outline_size", 1 * EDSCALE); | ||||||
| 	label_desc->add_theme_constant_override("line_spacing", 0); | 	label_desc->add_theme_constant_override("line_spacing", 0); | ||||||
| 	label_desc->hide(); | 	label_desc->hide(); | ||||||
| 	canvas_item_editor->get_controls_container()->add_child(label_desc); | 	canvas_item_editor->get_controls_container()->add_child(label_desc); | ||||||
|  |  | ||||||
|  | @ -173,7 +173,7 @@ Texture3DEditor::Texture3DEditor() { | ||||||
| 	info->set_v_grow_direction(GROW_DIRECTION_BEGIN); | 	info->set_v_grow_direction(GROW_DIRECTION_BEGIN); | ||||||
| 	info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); | 	info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); | ||||||
| 	info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5)); | 	info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5)); | ||||||
| 	info->add_theme_constant_override("shadow_as_outline", 1); | 	info->add_theme_constant_override("shadow_outline_size", 1); | ||||||
| 	info->add_theme_constant_override("shadow_offset_x", 2); | 	info->add_theme_constant_override("shadow_offset_x", 2); | ||||||
| 	info->add_theme_constant_override("shadow_offset_y", 2); | 	info->add_theme_constant_override("shadow_offset_y", 2); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -101,7 +101,7 @@ TexturePreview::TexturePreview(Ref<Texture2D> p_texture, bool p_show_metadata) { | ||||||
| 		metadata_label->add_theme_color_override("font_outline_color", Color::named("black")); | 		metadata_label->add_theme_color_override("font_outline_color", Color::named("black")); | ||||||
| 		metadata_label->add_theme_constant_override("outline_size", 2 * EDSCALE); | 		metadata_label->add_theme_constant_override("outline_size", 2 * EDSCALE); | ||||||
| 
 | 
 | ||||||
| 		metadata_label->add_theme_constant_override("shadow_as_outline", 1); | 		metadata_label->add_theme_constant_override("shadow_outline_size", 1); | ||||||
| 		metadata_label->set_h_size_flags(Control::SIZE_SHRINK_END); | 		metadata_label->set_h_size_flags(Control::SIZE_SHRINK_END); | ||||||
| 		metadata_label->set_v_size_flags(Control::SIZE_SHRINK_END); | 		metadata_label->set_v_size_flags(Control::SIZE_SHRINK_END); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -249,7 +249,7 @@ TextureLayeredEditor::TextureLayeredEditor() { | ||||||
| 	info->set_v_grow_direction(GROW_DIRECTION_BEGIN); | 	info->set_v_grow_direction(GROW_DIRECTION_BEGIN); | ||||||
| 	info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); | 	info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); | ||||||
| 	info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5)); | 	info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5)); | ||||||
| 	info->add_theme_constant_override("shadow_as_outline", 1); | 	info->add_theme_constant_override("shadow_outline_size", 1); | ||||||
| 	info->add_theme_constant_override("shadow_offset_x", 2); | 	info->add_theme_constant_override("shadow_offset_x", 2); | ||||||
| 	info->add_theme_constant_override("shadow_offset_y", 2); | 	info->add_theme_constant_override("shadow_offset_y", 2); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -243,11 +243,9 @@ inline void draw_glyph_outline(const Glyph &p_gl, const RID &p_canvas, const Col | ||||||
| 	if (p_gl.font_rid != RID()) { | 	if (p_gl.font_rid != RID()) { | ||||||
| 		if (p_font_shadow_color.a > 0) { | 		if (p_font_shadow_color.a > 0) { | ||||||
| 			TS->font_draw_glyph(p_gl.font_rid, p_canvas, p_gl.font_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + shadow_ofs, p_gl.index, p_font_shadow_color); | 			TS->font_draw_glyph(p_gl.font_rid, p_canvas, p_gl.font_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + shadow_ofs, p_gl.index, p_font_shadow_color); | ||||||
| 			if (p_shadow_outline_size > 0) { | 		} | ||||||
| 				TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + Vector2(-shadow_ofs.x, shadow_ofs.y), p_gl.index, p_font_shadow_color); | 		if (p_font_shadow_color.a > 0 && p_shadow_outline_size > 0) { | ||||||
| 				TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + Vector2(shadow_ofs.x, -shadow_ofs.y), p_gl.index, p_font_shadow_color); | 			TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + shadow_ofs, p_gl.index, p_font_shadow_color); | ||||||
| 				TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_shadow_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off) + Vector2(-shadow_ofs.x, -shadow_ofs.y), p_gl.index, p_font_shadow_color); |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 		if (p_font_outline_color.a != 0.0 && p_outline_size > 0) { | 		if (p_font_outline_color.a != 0.0 && p_outline_size > 0) { | ||||||
| 			TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off), p_gl.index, p_font_outline_color); | 			TS->font_draw_glyph_outline(p_gl.font_rid, p_canvas, p_gl.font_size, p_outline_size, p_ofs + Vector2(p_gl.x_off, p_gl.y_off), p_gl.index, p_font_outline_color); | ||||||
|  | @ -397,7 +395,7 @@ void Label::_notification(int p_what) { | ||||||
| 			int ellipsis_gl_size = TS->shaped_text_get_ellipsis_glyph_count(lines_rid[i]); | 			int ellipsis_gl_size = TS->shaped_text_get_ellipsis_glyph_count(lines_rid[i]); | ||||||
| 
 | 
 | ||||||
| 			// Draw outline. Note: Do not merge this into the single loop with the main text, to prevent overlaps.
 | 			// Draw outline. Note: Do not merge this into the single loop with the main text, to prevent overlaps.
 | ||||||
| 			if (font_shadow_color.a > 0 || (font_outline_color.a != 0.0 && outline_size > 0)) { | 			if ((outline_size > 0 && font_outline_color.a != 0) || (font_shadow_color.a != 0)) { | ||||||
| 				Vector2 offset = ofs; | 				Vector2 offset = ofs; | ||||||
| 				// Draw RTL ellipsis string when necessary.
 | 				// Draw RTL ellipsis string when necessary.
 | ||||||
| 				if (rtl && ellipsis_pos >= 0) { | 				if (rtl && ellipsis_pos >= 0) { | ||||||
|  |  | ||||||
|  | @ -621,7 +621,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, bool p_shadow_as_outline, const Point2 &p_shadow_ofs) { | int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs) { | ||||||
| 	Vector2 off; | 	Vector2 off; | ||||||
| 
 | 
 | ||||||
| 	ERR_FAIL_COND_V(p_frame == nullptr, 0); | 	ERR_FAIL_COND_V(p_frame == nullptr, 0); | ||||||
|  | @ -804,7 +804,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o | ||||||
| 							} | 							} | ||||||
| 
 | 
 | ||||||
| 							for (int j = 0; j < frame->lines.size(); j++) { | 							for (int j = 0; j < frame->lines.size(); j++) { | ||||||
| 								_draw_line(frame, j, p_ofs + rect.position + off + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_base_color, p_outline_size, p_outline_color, p_font_shadow_color, p_shadow_as_outline, p_shadow_ofs); | 								_draw_line(frame, j, p_ofs + rect.position + off + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_base_color, p_outline_size, p_outline_color, p_font_shadow_color, p_shadow_outline_size, p_shadow_ofs); | ||||||
| 							} | 							} | ||||||
| 							idx++; | 							idx++; | ||||||
| 						} | 						} | ||||||
|  | @ -824,7 +824,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o | ||||||
| 			Item *it = _get_item_at_pos(it_from, it_to, glyphs[i].start); | 			Item *it = _get_item_at_pos(it_from, it_to, glyphs[i].start); | ||||||
| 			int size = _find_outline_size(it, p_outline_size); | 			int size = _find_outline_size(it, p_outline_size); | ||||||
| 			Color font_color = _find_outline_color(it, p_outline_color); | 			Color font_color = _find_outline_color(it, p_outline_color); | ||||||
| 			if (size <= 0) { | 			Color font_shadow_color = p_font_shadow_color; | ||||||
|  | 			if ((size <= 0 || font_color.a == 0) && (font_shadow_color.a == 0)) { | ||||||
| 				gloff.x += glyphs[i].advance; | 				gloff.x += glyphs[i].advance; | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
|  | @ -871,9 +872,10 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o | ||||||
| 					faded_visibility = faded_visibility < 0.0f ? 0.0f : faded_visibility; | 					faded_visibility = faded_visibility < 0.0f ? 0.0f : faded_visibility; | ||||||
| 				} | 				} | ||||||
| 				font_color.a = faded_visibility; | 				font_color.a = faded_visibility; | ||||||
|  | 				font_shadow_color.a = faded_visibility; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			bool visible = (font_color.a != 0); | 			bool visible = (font_color.a != 0) || (font_shadow_color.a != 0); | ||||||
| 
 | 
 | ||||||
| 			for (int j = 0; j < fx_stack.size(); j++) { | 			for (int j = 0; j < fx_stack.size(); j++) { | ||||||
| 				ItemFX *item_fx = fx_stack[j]; | 				ItemFX *item_fx = fx_stack[j]; | ||||||
|  | @ -942,18 +944,19 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			Point2 shadow_ofs(get_theme_constant(SNAME("shadow_offset_x")), get_theme_constant(SNAME("shadow_offset_y"))); |  | ||||||
| 
 |  | ||||||
| 			// Draw glyph outlines.
 | 			// Draw glyph outlines.
 | ||||||
| 			for (int j = 0; j < glyphs[i].repeat; j++) { | 			for (int j = 0; j < glyphs[i].repeat; j++) { | ||||||
| 				if (visible) { | 				if (visible) { | ||||||
| 					if (frid != RID()) { | 					if (frid != RID()) { | ||||||
| 						if (p_shadow_as_outline) { | 						if (font_shadow_color.a > 0) { | ||||||
| 							TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff + Vector2(-shadow_ofs.x, shadow_ofs.y), gl, p_font_shadow_color); | 							TS->font_draw_glyph(frid, ci, glyphs[i].font_size, p_ofs + fx_offset + gloff + p_shadow_ofs, gl, font_shadow_color); | ||||||
| 							TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff + Vector2(shadow_ofs.x, -shadow_ofs.y), gl, p_font_shadow_color); | 						} | ||||||
| 							TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff + Vector2(-shadow_ofs.x, -shadow_ofs.y), gl, p_font_shadow_color); | 						if (font_shadow_color.a > 0 && p_shadow_outline_size > 0) { | ||||||
|  | 							TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, p_shadow_outline_size, p_ofs + fx_offset + gloff + p_shadow_ofs, gl, font_shadow_color); | ||||||
|  | 						} | ||||||
|  | 						if (font_color.a != 0.0 && size > 0) { | ||||||
|  | 							TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff, gl, font_color); | ||||||
| 						} | 						} | ||||||
| 						TS->font_draw_glyph_outline(frid, ci, glyphs[i].font_size, size, p_ofs + fx_offset + gloff, gl, font_color); |  | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				gloff.x += glyphs[i].advance; | 				gloff.x += glyphs[i].advance; | ||||||
|  | @ -1470,7 +1473,7 @@ void RichTextLabel::_notification(int p_what) { | ||||||
| 			Color outline_color = get_theme_color(SNAME("font_outline_color")); | 			Color outline_color = get_theme_color(SNAME("font_outline_color")); | ||||||
| 			int outline_size = get_theme_constant(SNAME("outline_size")); | 			int outline_size = get_theme_constant(SNAME("outline_size")); | ||||||
| 			Color font_shadow_color = get_theme_color(SNAME("font_shadow_color")); | 			Color font_shadow_color = get_theme_color(SNAME("font_shadow_color")); | ||||||
| 			bool use_outline = get_theme_constant(SNAME("shadow_as_outline")); | 			int shadow_outline_size = get_theme_constant(SNAME("shadow_outline_size")); | ||||||
| 			Point2 shadow_ofs(get_theme_constant(SNAME("shadow_offset_x")), get_theme_constant(SNAME("shadow_offset_y"))); | 			Point2 shadow_ofs(get_theme_constant(SNAME("shadow_offset_x")), get_theme_constant(SNAME("shadow_offset_y"))); | ||||||
| 
 | 
 | ||||||
| 			visible_paragraph_count = 0; | 			visible_paragraph_count = 0; | ||||||
|  | @ -1480,7 +1483,7 @@ void RichTextLabel::_notification(int p_what) { | ||||||
| 			Point2 ofs = text_rect.get_position() + Vector2(0, main->lines[from_line].offset.y - vofs); | 			Point2 ofs = text_rect.get_position() + Vector2(0, main->lines[from_line].offset.y - vofs); | ||||||
| 			while (ofs.y < size.height && from_line < main->lines.size()) { | 			while (ofs.y < size.height && from_line < main->lines.size()) { | ||||||
| 				visible_paragraph_count++; | 				visible_paragraph_count++; | ||||||
| 				visible_line_count += _draw_line(main, from_line, ofs, text_rect.size.x, base_color, outline_size, outline_color, font_shadow_color, use_outline, shadow_ofs); | 				visible_line_count += _draw_line(main, from_line, ofs, text_rect.size.x, base_color, outline_size, outline_color, font_shadow_color, shadow_outline_size, shadow_ofs); | ||||||
| 				ofs.y += main->lines[from_line].text_buf->get_size().y + get_theme_constant(SNAME("line_separation")); | 				ofs.y += main->lines[from_line].text_buf->get_size().y + get_theme_constant(SNAME("line_separation")); | ||||||
| 				from_line++; | 				from_line++; | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | @ -412,7 +412,7 @@ private: | ||||||
| 
 | 
 | ||||||
| 	void _shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, int *r_char_offset); | 	void _shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, int *r_char_offset); | ||||||
| 	void _resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width); | 	void _resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width); | ||||||
| 	int _draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, bool p_shadow_as_outline, const Point2 &shadow_ofs); | 	int _draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs); | ||||||
| 	float _find_click_in_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Point2i &p_click, ItemFrame **r_click_frame = nullptr, int *r_click_line = nullptr, Item **r_click_item = nullptr, int *r_click_char = nullptr); | 	float _find_click_in_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Point2i &p_click, ItemFrame **r_click_frame = nullptr, int *r_click_line = nullptr, Item **r_click_item = nullptr, int *r_click_char = nullptr); | ||||||
| 
 | 
 | ||||||
| 	String _roman(int p_num, bool p_capitalize) const; | 	String _roman(int p_num, bool p_capitalize) const; | ||||||
|  |  | ||||||
|  | @ -940,7 +940,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const | ||||||
| 
 | 
 | ||||||
| 	theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * scale); | 	theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * scale); | ||||||
| 	theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * scale); | 	theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * scale); | ||||||
| 	theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * scale); | 	theme->set_constant("shadow_outline_size", "RichTextLabel", 1 * scale); | ||||||
| 
 | 
 | ||||||
| 	theme->set_constant("line_separation", "RichTextLabel", 0 * scale); | 	theme->set_constant("line_separation", "RichTextLabel", 0 * scale); | ||||||
| 	theme->set_constant("table_hseparation", "RichTextLabel", 3 * scale); | 	theme->set_constant("table_hseparation", "RichTextLabel", 3 * scale); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bruvzg
						bruvzg