update rich_text example with set_rich_text

This commit is contained in:
tigregalis 2023-06-27 21:56:17 +08:00
parent 4a05c9c1cf
commit 0d9173c05b

View file

@ -1,8 +1,8 @@
// SPDX-License-Identifier: MIT OR Apache-2.0 // SPDX-License-Identifier: MIT OR Apache-2.0
use cosmic_text::{ use cosmic_text::{
Action, Attrs, AttrsList, Buffer, BufferLine, Color, Edit, Editor, Family, FontSystem, Metrics, Action, Attrs, Buffer, Color, Edit, Editor, Family, FontSystem, Metrics, Shaping, Style,
Shaping, Style, SwashCache, Weight, SwashCache, Weight,
}; };
use orbclient::{EventOption, Renderer, Window, WindowFlag}; use orbclient::{EventOption, Renderer, Window, WindowFlag};
use std::{ use std::{
@ -36,8 +36,7 @@ fn main() {
) )
.unwrap(); .unwrap();
let mut editor = Editor::new(Buffer::new( let mut editor = Editor::new(Buffer::new_empty(
&mut font_system,
Metrics::new(32.0, 44.0).scale(display_scale), Metrics::new(32.0, 44.0).scale(display_scale),
)); ));
@ -52,10 +51,7 @@ fn main() {
let mono_attrs = attrs.family(Family::Monospace); let mono_attrs = attrs.family(Family::Monospace);
let comic_attrs = attrs.family(Family::Name("Comic Neue")); let comic_attrs = attrs.family(Family::Name("Comic Neue"));
editor.buffer_mut().lines.clear(); let spans: &[(&str, Attrs)] = &[
let lines: &[&[(&str, Attrs)]] = &[
&[
("B", attrs.weight(Weight::BOLD)), ("B", attrs.weight(Weight::BOLD)),
("old ", attrs), ("old ", attrs),
("I", attrs.style(Style::Italic)), ("I", attrs.style(Style::Italic)),
@ -65,45 +61,35 @@ fn main() {
("f", attrs.weight(Weight::BOLD)), ("f", attrs.weight(Weight::BOLD)),
("i ", attrs), ("i ", attrs),
("f", attrs.style(Style::Italic)), ("f", attrs.style(Style::Italic)),
("i ", attrs), ("i \n", attrs),
],
&[
("Sans-Serif Normal ", attrs), ("Sans-Serif Normal ", attrs),
("Sans-Serif Bold ", attrs.weight(Weight::BOLD)), ("Sans-Serif Bold ", attrs.weight(Weight::BOLD)),
("Sans-Serif Italic ", attrs.style(Style::Italic)), ("Sans-Serif Italic ", attrs.style(Style::Italic)),
( (
"Sans-Serif Bold Italic", "Sans-Serif Bold Italic\n",
attrs.weight(Weight::BOLD).style(Style::Italic), attrs.weight(Weight::BOLD).style(Style::Italic),
), ),
],
&[
("Serif Normal ", serif_attrs), ("Serif Normal ", serif_attrs),
("Serif Bold ", serif_attrs.weight(Weight::BOLD)), ("Serif Bold ", serif_attrs.weight(Weight::BOLD)),
("Serif Italic ", serif_attrs.style(Style::Italic)), ("Serif Italic ", serif_attrs.style(Style::Italic)),
( (
"Serif Bold Italic", "Serif Bold Italic\n",
serif_attrs.weight(Weight::BOLD).style(Style::Italic), serif_attrs.weight(Weight::BOLD).style(Style::Italic),
), ),
],
&[
("Mono Normal ", mono_attrs), ("Mono Normal ", mono_attrs),
("Mono Bold ", mono_attrs.weight(Weight::BOLD)), ("Mono Bold ", mono_attrs.weight(Weight::BOLD)),
("Mono Italic ", mono_attrs.style(Style::Italic)), ("Mono Italic ", mono_attrs.style(Style::Italic)),
( (
"Mono Bold Italic", "Mono Bold Italic\n",
mono_attrs.weight(Weight::BOLD).style(Style::Italic), mono_attrs.weight(Weight::BOLD).style(Style::Italic),
), ),
],
&[
("Comic Normal ", comic_attrs), ("Comic Normal ", comic_attrs),
("Comic Bold ", comic_attrs.weight(Weight::BOLD)), ("Comic Bold ", comic_attrs.weight(Weight::BOLD)),
("Comic Italic ", comic_attrs.style(Style::Italic)), ("Comic Italic ", comic_attrs.style(Style::Italic)),
( (
"Comic Bold Italic", "Comic Bold Italic\n",
comic_attrs.weight(Weight::BOLD).style(Style::Italic), comic_attrs.weight(Weight::BOLD).style(Style::Italic),
), ),
],
&[
("R", attrs.color(Color::rgb(0xFF, 0x00, 0x00))), ("R", attrs.color(Color::rgb(0xFF, 0x00, 0x00))),
("A", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))), ("A", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))),
("I", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))), ("I", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))),
@ -124,27 +110,16 @@ fn main() {
("C", attrs.color(Color::rgb(0x00, 0xFF, 0x00))), ("C", attrs.color(Color::rgb(0x00, 0xFF, 0x00))),
("O", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))), ("O", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))),
("R", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))), ("R", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))),
("N", attrs.color(Color::rgb(0xFF, 0x00, 0x00))), ("N\n", attrs.color(Color::rgb(0xFF, 0x00, 0x00))),
], (
&[( "生活,삶,जिंदगी 😀 FPS\n",
"生活,삶,जिंदगी 😀 FPS",
attrs.color(Color::rgb(0xFF, 0x00, 0x00)), attrs.color(Color::rgb(0xFF, 0x00, 0x00)),
)], ),
]; ];
for &line in lines {
let mut line_text = String::new();
let mut attrs_list = AttrsList::new(attrs);
for &(text, attrs) in line {
let start = line_text.len();
line_text.push_str(text);
let end = line_text.len();
attrs_list.add_span(start..end, attrs);
}
editor editor
.buffer_mut() .buffer_mut()
.lines .set_rich_text(spans.iter().copied(), Shaping::Advanced);
.push(BufferLine::new(line_text, attrs_list, Shaping::Advanced));
}
let mut swash_cache = SwashCache::new(); let mut swash_cache = SwashCache::new();