use crate::buf::BufferWk;
use crate::inodify_impl;
use crate::prelude::*;
use crate::ui::canvas::Canvas;
use crate::ui::tree::*;
use crate::ui::viewport::ViewportWk;
use crate::ui::widget::WidgetContext;
use crate::ui::widget::Widgetable;
#[derive(Debug, Clone)]
pub struct WindowContent {
__node: InodeBase,
buffer: BufferWk,
viewport: ViewportWk,
}
inodify_impl!(WindowContent);
impl WindowContent {
pub fn new(
id: NodeId,
ctx: TreeContextWk,
buffer: BufferWk,
viewport: ViewportWk,
) -> Self {
WindowContent {
__node: InodeBase::new(id, ctx),
buffer,
viewport,
}
}
pub fn set_viewport(&mut self, viewport: ViewportWk) {
self.viewport = viewport;
}
}
impl Widgetable for WindowContent {
fn draw(&self, canvas: &mut Canvas, _context: &WidgetContext) {
let actual_shape = self.actual_shape();
let buffer = self.buffer.upgrade().unwrap();
let buffer = lock!(buffer);
let viewport = self.viewport.upgrade().unwrap();
viewport.draw(
buffer.text(),
buffer.syntax(),
buffer.colorscheme(),
&actual_shape,
canvas,
);
}
}