5S34ANJMEKYNSGROMFRDP22UA2FK2ENSGOBB4MPSHS7PG2BW6DLAC T2MYIZ6BIXHBKWZ3EJIYV65STSDAVKZHAPLTFXF27YBQIJCI7U7AC KLGRQAFUQPJP75NVLS5MZZ3CY4TGNVGB4K2YHQSLYVGAPKCLBLUAC PTQ26KY65NDVZ35EG66SARWRGGYKDJ2BT3EVK4RJFS2J5AQUX6OQC B66IOHMWFZINTWC57Q5OD4YPBVQNBN3YUM3ZKX4MTDKHYGH5JHFAC V2265WPBM2LBE4BGEFB3HYCZXA5C5MJKQ5IVPFWY3ARCVIAYBZGQC CTPHEJ2S7MMSZTNVO4LFEYHMMTKYWB5PC54RMVJHMATN5TY45GPQC T5T2PZSJVBHIPHG7VRXZSH36WGSTR4I44BOI335X4F637E7GUWHAC XKAEHFMZP4PDXPJ2GZTRAJL7SCHJAH7EXRG2TWEBOFVOFUFJQ6RAC HKVKPIIWK6AB4DWCS6SB47RYEXTD4QAQIGDFNQGA3TDJEIAXBZKQC let x_off = gpos[i].x_offset * 32 / upe + metrics.xmin;let y_off = gpos[i].y_offset * 32 / upe - metrics.ymin - metrics.height as i32;
let x_off = gpos[i].x_offset * font_size / upe + metrics.xmin;let y_off = gpos[i].y_offset * font_size / upe - metrics.ymin - metrics.height as i32;
let fg = &face.fg.to_rgba(default_face.fg.to_rgba((255, 255, 255, 0)));let bg = &face.bg.to_rgba(default_face.bg.to_rgba((255, 255, 255, 0)));
let fg = &face.fg.to_rgba(default_face.fg.to_rgba((255, 255, 255, 255)));let bg = &face.bg.to_rgba(default_face.bg.to_rgba((0, 0, 0, 255)));
}pub fn render_line(rs: &mut RenderState,fs: &mut FontState,line: &[json_ui::Atom],default_face: &json_ui::Face,pos: &mut (i32, i32),) -> Result<(), Box<dyn Error>> {let mut ubuf = UnicodeBuffer::new();let mut curr_face = None;let mut curr_font = 0;for atom in line {let face = &atom.face;for c in atom.contents.chars() {let font = fs.faces.iter().position(|i| i.rb_face.glyph_index(c).is_some()).unwrap_or(0);if curr_face != Some(face) || curr_font != font || c == '\n' {ubuf = render_segment(rs,fs,curr_font,curr_face.unwrap_or(face),default_face,ubuf,pos,);curr_face = Some(face);curr_font = font;ubuf.clear();}if c == '\n' {continue;}ubuf.add(c, 2);}}Ok(())
for atom in line {let face = &atom.face;for c in atom.contents.chars() {let font = fs.faces.iter().position(|i| i.rb_face.glyph_index(c).is_some()).unwrap_or(0);if curr_face != Some(face) || curr_font != font || c == '\n' {ubuf = render_segment(rs,fs,curr_font,curr_face.unwrap_or(face),default_face,ubuf,&mut pos,);curr_face = Some(face);curr_font = font;ubuf.clear();}if c == '\n' {continue;}ubuf.add(c, 2);}}
render_line(rs, fs, line, default_face, &mut pos)?;
Key::Named(NamedKey::Space) => Some(add_modifiers("space", state)),Key::Named(NamedKey::Enter) => Some(add_modifiers("ret", state)),Key::Named(NamedKey::Tab) => Some(add_modifiers("tab", state)),Key::Named(NamedKey::Backspace) => Some(add_modifiers("backspace", state)),Key::Named(NamedKey::Delete) => Some(add_modifiers("del", state)),Key::Named(NamedKey::Escape) => Some(add_modifiers("esc", state)),
Key::Named(NamedKey::Space) => Some(add_modifiers("space", state, true)),Key::Named(NamedKey::Enter) => Some(add_modifiers("ret", state, true)),Key::Named(NamedKey::Tab) => Some(add_modifiers("tab", state, true)),Key::Named(NamedKey::Backspace) => Some(add_modifiers("backspace", state, true)),Key::Named(NamedKey::Delete) => Some(add_modifiers("del", state, true)),Key::Named(NamedKey::Escape) => Some(add_modifiers("esc", state, true)),
Key::Named(NamedKey::ArrowUp) => Some(add_modifiers("up", state)),Key::Named(NamedKey::ArrowDown) => Some(add_modifiers("down", state)),Key::Named(NamedKey::ArrowLeft) => Some(add_modifiers("left", state)),Key::Named(NamedKey::ArrowRight) => Some(add_modifiers("right", state)),
Key::Named(NamedKey::ArrowUp) => Some(add_modifiers("up", state, true)),Key::Named(NamedKey::ArrowDown) => Some(add_modifiers("down", state, true)),Key::Named(NamedKey::ArrowLeft) => Some(add_modifiers("left", state, true)),Key::Named(NamedKey::ArrowRight) => Some(add_modifiers("right", state, true)),
Key::Named(NamedKey::PageUp) => Some(add_modifiers("pageup", state)),Key::Named(NamedKey::PageDown) => Some(add_modifiers("pagedown", state)),Key::Named(NamedKey::Home) => Some(add_modifiers("home", state)),Key::Named(NamedKey::End) => Some(add_modifiers("end", state)),Key::Named(NamedKey::Insert) => Some(add_modifiers("ins", state)),
Key::Named(NamedKey::PageUp) => Some(add_modifiers("pageup", state, true)),Key::Named(NamedKey::PageDown) => Some(add_modifiers("pagedown", state, true)),Key::Named(NamedKey::Home) => Some(add_modifiers("home", state, true)),Key::Named(NamedKey::End) => Some(add_modifiers("end", state, true)),Key::Named(NamedKey::Insert) => Some(add_modifiers("ins", state, true)),
Key::Named(NamedKey::F1) => Some(add_modifiers("F1", state)),Key::Named(NamedKey::F2) => Some(add_modifiers("F2", state)),Key::Named(NamedKey::F3) => Some(add_modifiers("F3", state)),Key::Named(NamedKey::F4) => Some(add_modifiers("F4", state)),Key::Named(NamedKey::F5) => Some(add_modifiers("F5", state)),Key::Named(NamedKey::F6) => Some(add_modifiers("F6", state)),Key::Named(NamedKey::F7) => Some(add_modifiers("F7", state)),Key::Named(NamedKey::F8) => Some(add_modifiers("F8", state)),Key::Named(NamedKey::F9) => Some(add_modifiers("F9", state)),Key::Named(NamedKey::F10) => Some(add_modifiers("F10", state)),Key::Named(NamedKey::F11) => Some(add_modifiers("F11", state)),Key::Named(NamedKey::F12) => Some(add_modifiers("F12", state)),
Key::Named(NamedKey::F1) => Some(add_modifiers("F1", state, true)),Key::Named(NamedKey::F2) => Some(add_modifiers("F2", state, true)),Key::Named(NamedKey::F3) => Some(add_modifiers("F3", state, true)),Key::Named(NamedKey::F4) => Some(add_modifiers("F4", state, true)),Key::Named(NamedKey::F5) => Some(add_modifiers("F5", state, true)),Key::Named(NamedKey::F6) => Some(add_modifiers("F6", state, true)),Key::Named(NamedKey::F7) => Some(add_modifiers("F7", state, true)),Key::Named(NamedKey::F8) => Some(add_modifiers("F8", state, true)),Key::Named(NamedKey::F9) => Some(add_modifiers("F9", state, true)),Key::Named(NamedKey::F10) => Some(add_modifiers("F10", state, true)),Key::Named(NamedKey::F11) => Some(add_modifiers("F11", state, true)),Key::Named(NamedKey::F12) => Some(add_modifiers("F12", state, true)),
Key::Character(c) if c == "+" => Some(add_modifiers("plus", state)),Key::Character(c) if c == "-" => Some(add_modifiers("minus", state)),Key::Character(c) if c == "<" => Some(add_modifiers("lt", state)),Key::Character(c) if c == ">" => Some(add_modifiers("lt", state)),Key::Character(c) if state == ModifiersState::empty() || state == ModifiersState::SHIFT => {Some(c.into())}Key::Character(c) => Some(add_modifiers(&c, state)),
Key::Character(c) if c == "+" => Some(add_modifiers("plus", state, false)),Key::Character(c) if c == "-" => Some(add_modifiers("minus", state, false)),Key::Character(c) if c == "<" => Some(add_modifiers("lt", state, false)),Key::Character(c) if c == ">" => Some(add_modifiers("gt", state, false)),Key::Character(c) => Some(add_modifiers(&c, state, false)),
AppMessage::Kakoune(Request::Draw(lines, default_face, _padding_face)) => {self.lines = lines;self.default_face = default_face;if let Some(rs) = &self.render_state {rs.window.request_redraw();
AppMessage::Kakoune(kak) => match kak {Request::Draw(lines, default_face, _padding_face) => {self.lines = lines;self.default_face = default_face;if let Some(rs) = &self.render_state {rs.window.request_redraw();}