use gtk4::cairo::Context;
use gtk4::pango;
use super::cairo_rgb;
use crate::primitives::completions::{Completions, CompletionsLayout};
use crate::theme::Theme;
pub fn draw_completions(
cr: &Context,
pango_layout: &pango::Layout,
completions: &Completions,
layout: &CompletionsLayout,
theme: &Theme,
) {
let bounds = layout.bounds;
if bounds.width <= 0.0 || bounds.height <= 0.0 {
return;
}
let popup_x = bounds.x as f64;
let popup_y = bounds.y as f64;
let popup_w = bounds.width as f64;
let popup_h = bounds.height as f64;
let (r, g, b) = cairo_rgb(theme.completion_bg);
cr.set_source_rgb(r, g, b);
cr.rectangle(popup_x, popup_y, popup_w, popup_h);
cr.fill().ok();
let (r, g, b) = cairo_rgb(theme.completion_border);
cr.set_source_rgb(r, g, b);
cr.set_line_width(1.0);
cr.rectangle(popup_x, popup_y, popup_w, popup_h);
cr.stroke().ok();
for vis in &layout.visible_items {
let Some(item) = completions.items.get(vis.item_idx) else {
continue;
};
let item_x = vis.bounds.x as f64;
let item_y = vis.bounds.y as f64;
let item_w = vis.bounds.width as f64;
let item_h = vis.bounds.height as f64;
if vis.item_idx == completions.selected_idx {
let (r, g, b) = cairo_rgb(theme.completion_selected_bg);
cr.set_source_rgb(r, g, b);
cr.rectangle(item_x, item_y, item_w, item_h);
cr.fill().ok();
}
let (r, g, b) = cairo_rgb(theme.completion_fg);
cr.set_source_rgb(r, g, b);
let label = item
.label
.spans
.first()
.map(|s| s.text.as_str())
.unwrap_or("");
let display = format!(" {label}");
pango_layout.set_text(&display);
pango_layout.set_attributes(None);
cr.move_to(item_x, item_y);
super::painted_text::show_layout(cr, pango_layout);
}
}