nvim_gtk/nvim/
repaint_mode.rs1use crate::ui_model::{ModelRect, ModelRectVec};
2
3#[derive(Clone, Debug)]
4pub enum RepaintMode {
5 Nothing,
6 All,
7 AreaList(ModelRectVec),
8 Area(ModelRect),
9}
10
11impl RepaintMode {
12 pub fn join(self, mode: RepaintMode) -> RepaintMode {
13 match (self, mode) {
14 (RepaintMode::Nothing, m) => m,
15 (m, RepaintMode::Nothing) => m,
16 (RepaintMode::All, _) => RepaintMode::All,
17 (_, RepaintMode::All) => RepaintMode::All,
18 (RepaintMode::Area(mr1), RepaintMode::Area(mr2)) => {
19 let mut vec = ModelRectVec::new(mr1);
20 vec.join(&mr2);
21 RepaintMode::AreaList(vec)
22 }
23 (RepaintMode::AreaList(mut target), RepaintMode::AreaList(source)) => {
24 for s in &source.list {
25 target.join(s);
26 }
27 RepaintMode::AreaList(target)
28 }
29 (RepaintMode::AreaList(mut list), RepaintMode::Area(l2)) => {
30 list.join(&l2);
31 RepaintMode::AreaList(list)
32 }
33 (RepaintMode::Area(l1), RepaintMode::AreaList(mut list)) => {
34 list.join(&l1);
35 RepaintMode::AreaList(list)
36 }
37 }
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_mode() {
47 let mode = RepaintMode::Area(ModelRect::point(1, 1));
48 let mode = mode.join(RepaintMode::Nothing);
49
50 match mode {
51 RepaintMode::Area(ref rect) => {
52 assert_eq!(1, rect.top);
53 assert_eq!(1, rect.bot);
54 assert_eq!(1, rect.left);
55 assert_eq!(1, rect.right);
56 }
57 _ => panic!("mode is worng"),
58 }
59 }
60}