Skip to content

Commit

Permalink
Unify Attrs and AttrsOwned
Browse files Browse the repository at this point in the history
  • Loading branch information
geieredgar committed Jun 11, 2023
1 parent 79275d1 commit 0bfe062
Show file tree
Hide file tree
Showing 12 changed files with 253 additions and 217 deletions.
38 changes: 21 additions & 17 deletions examples/editor-libcosmic/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ fn main() -> cosmic::iced::Result {
pub struct Window {
theme: Theme,
path_opt: Option<PathBuf>,
attrs: Attrs<'static>,
attrs: Attrs,
font_size: FontSize,
#[cfg(not(feature = "vi"))]
editor: Mutex<SyntaxEditor<'static>>,
Expand All @@ -111,7 +111,7 @@ impl Window {
let mut editor = self.editor.lock().unwrap();
let mut font_system = FONT_SYSTEM.lock().unwrap();
let mut editor = editor.borrow_with(&mut font_system);
match editor.load_text(&path, self.attrs) {
match editor.load_text(&path, &self.attrs) {
Ok(()) => {
log::info!("opened '{}'", path.display());
self.path_opt = Some(path);
Expand All @@ -131,8 +131,11 @@ impl Application for Window {
type Theme = Theme;

fn new(_flags: ()) -> (Self, Command<Self::Message>) {
let attrs = cosmic_text::Attrs::new().family(cosmic_text::Family::Monospace);
let attrs = cosmic_text::Attrs::builder()
.family(cosmic_text::Family::Monospace)
.build();

#[cfg_attr(feature = "vi", allow(unused_mut))]
let mut editor = SyntaxEditor::new(
Buffer::new(
&mut FONT_SYSTEM.lock().unwrap(),
Expand All @@ -146,7 +149,7 @@ impl Application for Window {
#[cfg(feature = "vi")]
let mut editor = cosmic_text::ViEditor::new(editor);

update_attrs(&mut editor, attrs);
update_attrs(&mut editor, &attrs);

let mut window = Window {
theme: Theme::dark(),
Expand Down Expand Up @@ -203,34 +206,35 @@ impl Application for Window {
}
}
Message::Bold(bold) => {
self.attrs = self.attrs.weight(if bold {
self.attrs.weight = if bold {
cosmic_text::Weight::BOLD
} else {
cosmic_text::Weight::NORMAL
});
};

let mut editor = self.editor.lock().unwrap();
update_attrs(&mut *editor, self.attrs);
update_attrs(&mut *editor, &self.attrs);
}
Message::Italic(italic) => {
self.attrs = self.attrs.style(if italic {
self.attrs.style = if italic {
cosmic_text::Style::Italic
} else {
cosmic_text::Style::Normal
});
};

let mut editor = self.editor.lock().unwrap();
update_attrs(&mut *editor, self.attrs);
update_attrs(&mut *editor, &self.attrs);
}
Message::Monospaced(monospaced) => {
self.attrs = self.attrs.family(if monospaced {
self.attrs.family_owned = if monospaced {
cosmic_text::Family::Monospace
} else {
cosmic_text::Family::SansSerif
});
}
.into();

let mut editor = self.editor.lock().unwrap();
update_attrs(&mut *editor, self.attrs);
update_attrs(&mut *editor, &self.attrs);
}
Message::FontSizeChanged(font_size) => {
self.font_size = font_size;
Expand Down Expand Up @@ -260,15 +264,15 @@ impl Application for Window {

let Color { r, g, b, a } = self.theme.cosmic().on_bg_color().into();
let as_u8 = |component: f32| (component * 255.0) as u8;
self.attrs = self.attrs.color(cosmic_text::Color::rgba(
self.attrs.color_opt = Some(cosmic_text::Color::rgba(
as_u8(r),
as_u8(g),
as_u8(b),
as_u8(a),
));

let mut editor = self.editor.lock().unwrap();
update_attrs(&mut *editor, self.attrs);
update_attrs(&mut *editor, &self.attrs);
}
}

Expand Down Expand Up @@ -367,9 +371,9 @@ impl Application for Window {
}
}

fn update_attrs<T: Edit>(editor: &mut T, attrs: Attrs) {
fn update_attrs<T: Edit>(editor: &mut T, attrs: &Attrs) {
editor.buffer_mut().lines.iter_mut().for_each(|line| {
line.set_attrs_list(AttrsList::new(attrs));
line.set_attrs_list(AttrsList::new(attrs.clone()));
});
}

Expand Down
4 changes: 2 additions & 2 deletions examples/editor-orbclient/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ fn main() {

let line_x = 8.0 * display_scale;

#[cfg_attr(feature = "vi", allow(unused_mut))]
let mut editor = SyntaxEditor::new(
Buffer::new(&mut font_system, font_sizes[font_size_i]),
&syntax_system,
Expand All @@ -72,8 +73,7 @@ fn main() {
editor
.buffer_mut()
.set_size(window.width() as f32 - line_x * 2.0, window.height() as f32);

let attrs = Attrs::new().family(Family::Monospace);
let attrs = Attrs::builder().family(Family::Monospace).build();
match editor.load_text(&path, attrs) {
Ok(()) => (),
Err(err) => {
Expand Down
112 changes: 56 additions & 56 deletions examples/rich-text/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: MIT OR Apache-2.0

use cosmic_text::{
Action, Attrs, AttrsList, Buffer, BufferLine, Color, Edit, Editor, Family, FontSystem, Metrics,
Shaping, Style, SwashCache, Weight,
Action, Attrs, AttrsBuilder, AttrsList, Buffer, BufferLine, Color, Edit, Editor, Family,
FontSystem, Metrics, Shaping, Style, SwashCache, Weight,
};
use orbclient::{EventOption, Renderer, Window, WindowFlag};
use std::{
Expand Down Expand Up @@ -47,98 +47,98 @@ fn main() {
.buffer_mut()
.set_size(window.width() as f32, window.height() as f32);

let attrs = Attrs::new();
let serif_attrs = attrs.family(Family::Serif);
let mono_attrs = attrs.family(Family::Monospace);
let comic_attrs = attrs.family(Family::Name("Comic Neue"));
let attrs = Attrs::builder();
let serif_attrs = attrs.clone().family(Family::Serif);
let mono_attrs = attrs.clone().family(Family::Monospace);
let comic_attrs = attrs.clone().family(Family::Name("Comic Neue"));

editor.buffer_mut().lines.clear();

let lines: &[&[(&str, Attrs)]] = &[
let lines: &[&[(&str, AttrsBuilder)]] = &[
&[
("B", attrs.weight(Weight::BOLD)),
("old ", attrs),
("I", attrs.style(Style::Italic)),
("talic ", attrs),
("f", attrs),
("i ", attrs),
("f", attrs.weight(Weight::BOLD)),
("i ", attrs),
("f", attrs.style(Style::Italic)),
("i ", attrs),
("B", attrs.clone().weight(Weight::BOLD)),
("old ", attrs.clone()),
("I", attrs.clone().style(Style::Italic)),
("talic ", attrs.clone()),
("f", attrs.clone()),
("i ", attrs.clone()),
("f", attrs.clone().weight(Weight::BOLD)),
("i ", attrs.clone()),
("f", attrs.clone().style(Style::Italic)),
("i ", attrs.clone()),
],
&[
("Sans-Serif Normal ", attrs),
("Sans-Serif Bold ", attrs.weight(Weight::BOLD)),
("Sans-Serif Italic ", attrs.style(Style::Italic)),
("Sans-Serif Normal ", attrs.clone()),
("Sans-Serif Bold ", attrs.clone().weight(Weight::BOLD)),
("Sans-Serif Italic ", attrs.clone().style(Style::Italic)),
(
"Sans-Serif Bold Italic",
attrs.weight(Weight::BOLD).style(Style::Italic),
attrs.clone().weight(Weight::BOLD).style(Style::Italic),
),
],
&[
("Serif Normal ", serif_attrs),
("Serif Bold ", serif_attrs.weight(Weight::BOLD)),
("Serif Italic ", serif_attrs.style(Style::Italic)),
("Serif Normal ", serif_attrs.clone()),
("Serif Bold ", serif_attrs.clone().weight(Weight::BOLD)),
("Serif Italic ", serif_attrs.clone().style(Style::Italic)),
(
"Serif Bold Italic",
serif_attrs.weight(Weight::BOLD).style(Style::Italic),
),
],
&[
("Mono Normal ", mono_attrs),
("Mono Bold ", mono_attrs.weight(Weight::BOLD)),
("Mono Italic ", mono_attrs.style(Style::Italic)),
("Mono Normal ", mono_attrs.clone()),
("Mono Bold ", mono_attrs.clone().weight(Weight::BOLD)),
("Mono Italic ", mono_attrs.clone().style(Style::Italic)),
(
"Mono Bold Italic",
mono_attrs.weight(Weight::BOLD).style(Style::Italic),
),
],
&[
("Comic Normal ", comic_attrs),
("Comic Bold ", comic_attrs.weight(Weight::BOLD)),
("Comic Italic ", comic_attrs.style(Style::Italic)),
("Comic Normal ", comic_attrs.clone()),
("Comic Bold ", comic_attrs.clone().weight(Weight::BOLD)),
("Comic Italic ", comic_attrs.clone().style(Style::Italic)),
(
"Comic Bold Italic",
comic_attrs.weight(Weight::BOLD).style(Style::Italic),
),
],
&[
("R", attrs.color(Color::rgb(0xFF, 0x00, 0x00))),
("A", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))),
("I", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))),
("N", attrs.color(Color::rgb(0x00, 0xFF, 0x00))),
("B", attrs.color(Color::rgb(0x00, 0x00, 0xFF))),
("O", attrs.color(Color::rgb(0x4B, 0x00, 0x82))),
("W ", attrs.color(Color::rgb(0x94, 0x00, 0xD3))),
("Red ", attrs.color(Color::rgb(0xFF, 0x00, 0x00))),
("Orange ", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))),
("Yellow ", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))),
("Green ", attrs.color(Color::rgb(0x00, 0xFF, 0x00))),
("Blue ", attrs.color(Color::rgb(0x00, 0x00, 0xFF))),
("Indigo ", attrs.color(Color::rgb(0x4B, 0x00, 0x82))),
("Violet ", attrs.color(Color::rgb(0x94, 0x00, 0xD3))),
("U", attrs.color(Color::rgb(0x94, 0x00, 0xD3))),
("N", attrs.color(Color::rgb(0x4B, 0x00, 0x82))),
("I", attrs.color(Color::rgb(0x00, 0x00, 0xFF))),
("C", attrs.color(Color::rgb(0x00, 0xFF, 0x00))),
("O", attrs.color(Color::rgb(0xFF, 0xFF, 0x00))),
("R", attrs.color(Color::rgb(0xFF, 0x7F, 0x00))),
("N", attrs.color(Color::rgb(0xFF, 0x00, 0x00))),
("R", attrs.clone().color(Color::rgb(0xFF, 0x00, 0x00))),
("A", attrs.clone().color(Color::rgb(0xFF, 0x7F, 0x00))),
("I", attrs.clone().color(Color::rgb(0xFF, 0xFF, 0x00))),
("N", attrs.clone().color(Color::rgb(0x00, 0xFF, 0x00))),
("B", attrs.clone().color(Color::rgb(0x00, 0x00, 0xFF))),
("O", attrs.clone().color(Color::rgb(0x4B, 0x00, 0x82))),
("W ", attrs.clone().color(Color::rgb(0x94, 0x00, 0xD3))),
("Red ", attrs.clone().color(Color::rgb(0xFF, 0x00, 0x00))),
("Orange ", attrs.clone().color(Color::rgb(0xFF, 0x7F, 0x00))),
("Yellow ", attrs.clone().color(Color::rgb(0xFF, 0xFF, 0x00))),
("Green ", attrs.clone().color(Color::rgb(0x00, 0xFF, 0x00))),
("Blue ", attrs.clone().color(Color::rgb(0x00, 0x00, 0xFF))),
("Indigo ", attrs.clone().color(Color::rgb(0x4B, 0x00, 0x82))),
("Violet ", attrs.clone().color(Color::rgb(0x94, 0x00, 0xD3))),
("U", attrs.clone().color(Color::rgb(0x94, 0x00, 0xD3))),
("N", attrs.clone().color(Color::rgb(0x4B, 0x00, 0x82))),
("I", attrs.clone().color(Color::rgb(0x00, 0x00, 0xFF))),
("C", attrs.clone().color(Color::rgb(0x00, 0xFF, 0x00))),
("O", attrs.clone().color(Color::rgb(0xFF, 0xFF, 0x00))),
("R", attrs.clone().color(Color::rgb(0xFF, 0x7F, 0x00))),
("N", attrs.clone().color(Color::rgb(0xFF, 0x00, 0x00))),
],
&[(
"生活,삶,जिंदगी 😀 FPS",
attrs.color(Color::rgb(0xFF, 0x00, 0x00)),
attrs.clone().color(Color::rgb(0xFF, 0x00, 0x00)),
)],
];
for &line in lines {
for line in lines {
let mut line_text = String::new();
let mut attrs_list = AttrsList::new(attrs);
for &(text, attrs) in line {
let mut attrs_list = AttrsList::new(attrs.clone().build());
for (text, attrs) in line.iter() {
let start = line_text.len();
line_text.push_str(text);
let end = line_text.len();
attrs_list.add_span(start..end, attrs);
attrs_list.add_span(start..end, attrs.clone().build());
}
editor
.buffer_mut()
Expand Down
Loading

0 comments on commit 0bfe062

Please sign in to comment.