164 lines
5.1 KiB
Rust
164 lines
5.1 KiB
Rust
use common::DrawTestCfg;
|
|
use cosmic_text::{Attrs, Color, Family, UnderlineStyle};
|
|
|
|
mod common;
|
|
|
|
fn base_attrs() -> Attrs<'static> {
|
|
Attrs::new().family(Family::Name("Noto Sans"))
|
|
}
|
|
|
|
/// Single test covering all decoration variants:
|
|
/// - Single underline, double underline
|
|
/// - Strikethrough, overline
|
|
/// - Colored underline (red), colored strikethrough (cyan)
|
|
/// - All three combined on one span
|
|
/// - Plain text (no decoration) between spans
|
|
#[test]
|
|
fn test_text_decorations() {
|
|
let base = base_attrs();
|
|
let red = Color::rgb(0xFF, 0x00, 0x00);
|
|
let cyan = Color::rgb(0x00, 0xFF, 0xFF);
|
|
|
|
DrawTestCfg::new("text_decorations")
|
|
.font_size(20., 26.)
|
|
.font_attrs(base.clone())
|
|
.rich_text(vec![
|
|
("Under ", base.clone().underline(UnderlineStyle::Single)),
|
|
("Double ", base.clone().underline(UnderlineStyle::Double)),
|
|
("Strike ", base.clone().strikethrough()),
|
|
("Over ", base.clone().overline()),
|
|
(
|
|
"RedUl ",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.underline_color(red),
|
|
),
|
|
(
|
|
"CyanSt ",
|
|
base.clone().strikethrough().strikethrough_color(cyan),
|
|
),
|
|
(
|
|
"All",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.strikethrough()
|
|
.overline(),
|
|
),
|
|
(" Plain", base),
|
|
])
|
|
.canvas(600, 50)
|
|
.validate_text_rendering();
|
|
}
|
|
|
|
#[test]
|
|
fn test_text_decorations_rtl() {
|
|
let base = base_attrs();
|
|
let red = Color::rgb(0xFF, 0x00, 0x00);
|
|
let cyan = Color::rgb(0x00, 0xFF, 0xFF);
|
|
|
|
DrawTestCfg::new("text_decoration_rtl")
|
|
.font_size(20., 26.)
|
|
.font_attrs(base.clone())
|
|
.rich_text(vec![
|
|
("زیر خط ", base.clone().underline(UnderlineStyle::Single)),
|
|
("دوتایی ", base.clone().underline(UnderlineStyle::Double)),
|
|
("خط ", base.clone().strikethrough()),
|
|
("رو ", base.clone().overline()),
|
|
(
|
|
"زیر خط قرمز ",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.underline_color(red),
|
|
),
|
|
(
|
|
"فیروزه ای ",
|
|
base.clone().strikethrough().strikethrough_color(cyan),
|
|
),
|
|
(
|
|
"همگی",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.strikethrough()
|
|
.overline(),
|
|
),
|
|
(" هیچ", base),
|
|
])
|
|
.canvas(600, 50)
|
|
.validate_text_rendering();
|
|
}
|
|
|
|
/// Bidi test
|
|
#[test]
|
|
fn test_text_decorations_bidi() {
|
|
let base = base_attrs();
|
|
let red = Color::rgb(0xFF, 0x00, 0x00);
|
|
let cyan = Color::rgb(0x00, 0xFF, 0xFF);
|
|
|
|
DrawTestCfg::new("text_decoration_bidi")
|
|
.font_size(20., 26.)
|
|
.font_attrs(base.clone())
|
|
.rich_text(vec![
|
|
("زیرخط ", base.clone().underline(UnderlineStyle::Single)),
|
|
("Double ", base.clone().underline(UnderlineStyle::Double)),
|
|
("خط ", base.clone().strikethrough()),
|
|
("Over ", base.clone().overline()),
|
|
(
|
|
"Red زیر خط ",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.underline_color(red),
|
|
),
|
|
(
|
|
"CyanSt ",
|
|
base.clone().strikethrough().strikethrough_color(cyan),
|
|
),
|
|
(
|
|
"All",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.strikethrough()
|
|
.overline(),
|
|
),
|
|
(" Plain", base),
|
|
])
|
|
.canvas(600, 50)
|
|
.validate_text_rendering();
|
|
}
|
|
|
|
/// Multiline Bidi test
|
|
#[test]
|
|
fn test_text_decorations_multiline_bidi() {
|
|
let base = base_attrs();
|
|
let red = Color::rgb(0xFF, 0x00, 0x00);
|
|
let cyan = Color::rgb(0x00, 0xFF, 0xFF);
|
|
|
|
DrawTestCfg::new("text_decoration_multiline_bidi")
|
|
.font_size(20., 26.)
|
|
.font_attrs(base.clone())
|
|
.rich_text(vec![
|
|
("زیرخط ", base.clone().underline(UnderlineStyle::Single)),
|
|
("Double ", base.clone().underline(UnderlineStyle::Double)),
|
|
("خط ", base.clone().strikethrough()),
|
|
("Over \n", base.clone().overline()),
|
|
(
|
|
"Red زیر خط ",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.underline_color(red),
|
|
),
|
|
(
|
|
"CyanSt ",
|
|
base.clone().strikethrough().strikethrough_color(cyan),
|
|
),
|
|
(
|
|
"All",
|
|
base.clone()
|
|
.underline(UnderlineStyle::Single)
|
|
.strikethrough()
|
|
.overline(),
|
|
),
|
|
(" Plain", base),
|
|
])
|
|
.canvas(400, 80)
|
|
.validate_text_rendering();
|
|
}
|