Super dictionary optimization

This commit is contained in:
2026-08-09 14:24:59 +03:00
parent e2133ce91a
commit 4676b0eeef
3 changed files with 147 additions and 69 deletions
+84 -62
View File
@@ -338,71 +338,84 @@ impl DictionaryState {
continue;
}
let mut line = Row::new().width(Length::Fill).align_y(Center);
line = line.push(
checkbox(self.include_map[i])
.label("")
.spacing(15)
.on_toggle(move |b| Include(i, b)),
);
line = line.push(
text_input("Слово", &word.key)
.size(ACCENT_FONT_SIZE)
.width(Length::Fill)
.on_input(move |string| SetKey(i, string))
.on_submit(SubmitWord(i))
.style(|x, status| {
let mut default_style = default(x, status);
default_style.border.radius = 0.0.into();
default_style
}),
);
line = line.push(
text_input("Перевод", &word.value)
.size(ACCENT_FONT_SIZE)
.width(Length::Fill)
.on_input(move |string| SetValue(i, string))
.on_submit(SubmitWord(i))
.style(|x, status| {
let mut default_style = default(x, status);
default_style.border.radius = 0.0.into();
default_style
}),
);
line = line.push(
text_input("Теги", &word.tags)
.size(ACCENT_FONT_SIZE)
.width(Length::Fill)
.on_input(move |string| SetTags(i, string))
.on_submit(SubmitWord(i))
.style(|x, status| {
let mut default_style = default(x, status);
default_style.border.radius = 0.0.into();
default_style
}),
);
let line_button = || {
let action = WordAction(i);
if word.id == 0 {
return button("-").on_press(action).style(|_x, _status| Style {
background: None,
text_color: Color::BLACK,
border: Border::default(),
shadow: Shadow::default(),
snap: false,
});
}
button("").on_press(WordAction(i)).width(15)
let word_line_data = WordLineState{
is_included: self.include_map[i],
key: word.key.clone(),
value: word.value.clone(),
tags: word.tags.clone(),
id: word.id,
};
line = line.push(line_button()).push(space().width(10));
let lazy_line = lazy(word_line_data, move |data| {
let mut line = Row::new().width(Length::Fill).align_y(Center);
line = line.push(
checkbox(data.is_included)
.label("")
.spacing(15)
.on_toggle(move |b| Include(i, b)),
);
col = col.push(line);
line = line.push(
text_input("Слово", &data.key)
.size(ACCENT_FONT_SIZE)
.width(Length::Fill)
.on_input(move |string| SetKey(i, string))
.on_submit(SubmitWord(i))
.style(|x, status| {
let mut default_style = default(x, status);
default_style.border.radius = 0.0.into();
default_style
}),
);
line = line.push(
text_input("Перевод", &data.value)
.size(ACCENT_FONT_SIZE)
.width(Length::Fill)
.on_input(move |string| SetValue(i, string))
.on_submit(SubmitWord(i))
.style(|x, status| {
let mut default_style = default(x, status);
default_style.border.radius = 0.0.into();
default_style
}),
);
line = line.push(
text_input("Теги", &data.tags)
.size(ACCENT_FONT_SIZE)
.width(Length::Fill)
.on_input(move |string| SetTags(i, string))
.on_submit(SubmitWord(i))
.style(|x, status| {
let mut default_style = default(x, status);
default_style.border.radius = 0.0.into();
default_style
}),
);
let line_button = || {
let action = WordAction(i);
if data.id == 0 {
return button("-").on_press(action).style(|_x, _status| Style {
background: None,
text_color: Color::BLACK,
border: Border::default(),
shadow: Shadow::default(),
snap: false,
});
}
button("").on_press(WordAction(i)).width(15)
};
line = line.push(line_button()).push(space().width(10));
line
});
col = col.push(lazy_line);
}
println!("Words rendering time: {:?}", time.elapsed());
@@ -573,3 +586,12 @@ pub fn app_data_dir() -> PathBuf {
dir
}
#[derive(Hash, PartialEq, Eq)]
struct WordLineState{
is_included: bool,
key: String,
value: String,
tags: String,
id: u32
}