Compare commits

..

No commits in common. "24679e06ddf2c933593b9f00b53f0fe9df2aa573" and "ea3907d0120d8fd208a9da7e8bc6380442e99333" have entirely different histories.

5 changed files with 14 additions and 10 deletions

View File

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

View File

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

View File

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

View File

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

View File

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