Compare commits

..

2 Commits

Author SHA1 Message Date
24679e06dd
libui: Allow not filling the window with a background color every time
All checks were successful
continuous-integration/drone/pr Build is passing
2023-09-16 13:29:42 +02:00
18e3265d14
terminal: Draw directly onto the window canvas 2023-09-16 13:29:22 +02:00
5 changed files with 10 additions and 14 deletions

View File

@ -62,7 +62,7 @@ namespace ui
int m_id;
Canvas m_canvas;
Widget* m_main_widget { nullptr };
Color m_background { ui::BLACK };
Option<Color> m_background {};
Option<int> m_old_mouse_buttons;
};
}

View File

@ -74,7 +74,7 @@ namespace ui
Result<void> Window::draw()
{
m_canvas.fill(m_background);
if (m_background.has_value()) m_canvas.fill(*m_background);
if (m_main_widget) TRY(m_main_widget->draw(m_canvas));
update();
return {};

View File

@ -46,10 +46,8 @@ Result<void> TerminalWidget::init(char* const* args)
m_font = ui::Font::default_font();
m_bold_font = ui::Font::default_bold_font();
m_terminal_canvas = ui::Canvas { .width = m_rect.width,
.height = m_rect.height,
.stride = m_rect.width,
.ptr = (u8*)TRY(calloc_impl(m_rect.width, m_rect.height * sizeof(u32), false)) };
m_terminal_canvas = ui::App::the().main_window()->canvas();
m_terminal_canvas.fill(ui::BLACK);
signal(SIGCHLD, sigchld_handler);
@ -213,13 +211,12 @@ Result<ui::EventResult> TerminalWidget::handle_key_event(const ui::KeyEventReque
return ui::EventResult::DidHandle;
}
Result<void> TerminalWidget::draw(ui::Canvas& canvas)
Result<void> TerminalWidget::draw(ui::Canvas&)
{
canvas.fill((u32*)m_terminal_canvas.ptr, m_terminal_canvas.stride);
return {};
}
Result<void> TerminalWidget::process()
Result<bool> TerminalWidget::process()
{
char buffer[BUFSIZ];
ssize_t nread = read(m_pty, buffer, BUFSIZ);
@ -238,7 +235,7 @@ Result<void> TerminalWidget::process()
if (should_update_cursor || nread > 0) ui::App::the().main_window()->draw();
return {};
return nread == 0;
}
bool TerminalWidget::tick_cursor()

View File

@ -16,7 +16,7 @@ class TerminalWidget : public ui::Widget
Result<void> draw(ui::Canvas& canvas) override;
Result<void> process();
Result<bool> process();
void quit();

View File

@ -11,7 +11,6 @@ Result<int> luna_main(int argc, char** argv)
auto* window = TRY(ui::Window::create(ui::Rect { 150, 150, 640, 400 }));
app.set_main_window(window);
window->set_background(ui::BLACK);
window->set_title("Terminal");
TerminalWidget terminal;
@ -24,8 +23,8 @@ Result<int> luna_main(int argc, char** argv)
while (app.process_events())
{
TRY(terminal.process());
usleep(10000);
bool should_sleep = TRY(terminal.process());
if (should_sleep) usleep(10000);
}
terminal.quit();