ferroui_base/media/
text_trailing_trimming.rs1use std::fmt;
2use std::rc::Rc;
3
4use crate::media::text_formatting::{TextCollapsingProperties, TextTrailingCharacterEllipsis, TextTrailingWordEllipsis};
5use crate::media::{TextCollapsingCreateInfo, TextTrimming};
6
7pub struct TextTrailingTrimming {
9 ellipsis: String,
10 is_word_based: bool,
11}
12
13impl TextTrailingTrimming {
14 pub fn new(ellipsis: &str, is_word_based: bool) -> Self {
15 Self { ellipsis: ellipsis.to_owned(), is_word_based }
16 }
17}
18
19impl TextTrimming for TextTrailingTrimming {
20 fn create_collapsing_properties(&self, create_info: &TextCollapsingCreateInfo) -> Rc<dyn TextCollapsingProperties> {
21 if self.is_word_based {
22 return Rc::new(TextTrailingWordEllipsis::new(
23 &self.ellipsis,
24 create_info.width,
25 create_info.text_run_properties.clone(),
26 create_info.flow_direction,
27 ));
28 }
29
30 Rc::new(TextTrailingCharacterEllipsis::new(
31 &self.ellipsis,
32 create_info.width,
33 create_info.text_run_properties.clone(),
34 create_info.flow_direction,
35 ))
36 }
37}
38
39impl fmt::Display for TextTrailingTrimming {
40 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41 f.write_str(if self.is_word_based { "WordEllipsis" } else { "CharacterEllipsis" })
42 }
43}