(metadata: &Metadata, stdout: &Stdout, node: &mut Node, view: &mut NodeView, top_offset: isize)
| 182 | Ok(if pending { 1 } else { 0 }) |
| 183 | } |
| 184 | pub fn draw_node(metadata: &Metadata, stdout: &Stdout, node: &mut Node, view: &mut NodeView, top_offset: isize) -> Result<bool> { |
| 185 | // calculate new view and height of node |
| 186 | let new_view = NodeView::new(node, metadata, top_offset); |
| 187 | let char_height = metadata.char_height; |
| 188 | let theight = node.range.1 - node.range.0; |
| 189 | |
| 190 | let (pos, crop) = match (&view, &new_view) { |
| 191 | (NodeView::UpperBorder(_, _) | NodeView::LowerBorder(_, _) | NodeView::Hidden, NodeView::Visible(pos, _)) => |
| 192 | (*pos, None), |
| 193 | (NodeView::Hidden, NodeView::LowerBorder(pos, height)) => |
| 194 | (*pos, Some((height * char_height, 0))), |
| 195 | (NodeView::LowerBorder(_, height_old), NodeView::LowerBorder(pos, height)) if height_old < height => |
| 196 | (*pos, Some((height * char_height, 0))), |
| 197 | (NodeView::Hidden, NodeView::UpperBorder(y, height)) => |
| 198 | (0, Some((height * char_height, y * char_height))), |
| 199 | (NodeView::UpperBorder(y_old, _), NodeView::UpperBorder(y, height)) if y < y_old => |
| 200 | (0, Some((height * char_height, y * char_height))), |
| 201 | _ => return Ok(false), |
| 202 | }; |
| 203 | |
| 204 | let dim = NodeDim { |
| 205 | height: theight * char_height, |
| 206 | crop |
| 207 | }; |
| 208 | |
| 209 | if let Some(buf) = node.get_sixel(dim) { |
| 210 | // bail out if an error happened during conversion |
| 211 | let mut buf = buf?; |
| 212 | |
| 213 | //dbg!(&metadata.winpos.0, &metadata.winpos.1); |
| 214 | let mut wbuf = format!("\x1b[s\x1b[{};{}H", pos + metadata.winpos.0, metadata.winpos.1).into_bytes(); |
| 215 | //for _ in 0..(node.range.1-node.range.0 - 1) { |
| 216 | // wbuf.extend_from_slice(b"\x1b[B\x1b[K"); |
| 217 | //} |
| 218 | |
| 219 | //wbuf.append(&mut format!("\x1b[{};{}H", pos + metadata.winpos.0, metadata.winpos.1).into_bytes()); |
| 220 | //dbg!(&buf.len()); |
| 221 | wbuf.append(&mut buf); |
| 222 | //wbuf.append(&mut format!("\x1b[{};{}H", metadata.viewport.0, metadata.winpos.1).into_bytes()); |
| 223 | //wbuf.append(&mut format!("\x1b[?80h\x1bP100;1q\"1;1;2000;50\"1;1;2000;50\x1b[u\x1b\\").into_bytes()); |
| 224 | //wbuf.extend_from_slice(b"\x1b[u"); |
| 225 | wbuf.extend_from_slice(b"\x1b[u"); |
| 226 | |
| 227 | { |
| 228 | let outer_lock = stdout.lock(); |
| 229 | let mut stdout = unsafe { File::from_raw_fd(1) }; |
| 230 | let mut idx = 0; |
| 231 | while idx < wbuf.len() { |
| 232 | match stdout.write(&wbuf[idx..]) { |
| 233 | Ok(n) => idx += n, |
| 234 | Err(_) => {/*eprintln!("{}", err);*/}, |
| 235 | } |
| 236 | } |
| 237 | std::mem::forget(stdout); |
| 238 | drop(outer_lock); |
| 239 | } |
| 240 | |
| 241 | Ok(false) |
nothing calls this directly
no test coverage detected