Commit graph

27 commits

Author SHA1 Message Date
Andreas Kling
e655aebd70 Window: Update coding style. 2019-01-16 13:50:24 +01:00
Andreas Kling
b673c1a77d Build Painter & friends into LibC. Use it in the GUI test app. 2019-01-14 20:02:51 +01:00
Andreas Kling
b0e3f73375 Start refactoring the windowing system to use an event loop.
Userspace programs can now open /dev/gui_events and read a stream of GUI_Event
structs one at a time.

I was stuck on a stupid problem where we'd reenter Scheduler::yield() due to
having one of the has_data_available_for_reading() implementations using locks.
2019-01-14 14:42:49 +01:00
Andreas Kling
bac9aa90dd Update Painter class to the new coding style. 2019-01-12 17:02:54 +01:00
Andreas Kling
f6d2c3ed87 Hook everything up to run the GUI on top of the kernel.
Okay things kinda sorta work. Both Bochs and QEMU now boot into GUI mode.
There's a ton of stuff that doesn't make sense and so many things to rework.

Still it's quite cool to have made it this far. :^)
2019-01-10 23:19:29 +01:00
Andreas Kling
ceb373cf71 More window manager hacking. FocusIn/FocusOut events. 2019-01-09 05:40:04 +01:00
Andreas Kling
cfd76ade73 Stop recomposing the window hierarchy after every dang widget paint. 2019-01-09 04:46:16 +01:00
Andreas Kling
9963da9005 Start refactoring graphics system to have per-window backing stores.
It was fun for everyone to share a single framebuffer but it was also
kinda really awful. Let's move towards having a "GraphicsBitmap" as the
backing store for each Window.

This is going to need a lot of refactoring so let's get started.
2019-01-09 02:06:04 +01:00
Andreas Kling
fc1facf5c0 Let widget have a font() instead of using Font::defaultFont() everywhere. 2018-10-14 13:06:05 +02:00
Andreas Kling
959a1b0750 Close the MsgBox when clicking the OK button.
This feels vaguely crashy. I haven't tested window/widget destruction
before so there's sure to be bugs.
2018-10-14 01:23:01 +02:00
Andreas Kling
3ebea05996 Add a simple MsgBox() :^) 2018-10-14 00:21:42 +02:00
Andreas Kling
a3fb19fe9c Use fooEvent() type names for the virtual event handlers. 2018-10-13 22:51:50 +02:00
Andreas Kling
6f1b384cde More work on focus.
ListBox now renders differently depending on focus state.
2018-10-13 20:59:25 +02:00
Andreas Kling
1929cb6b71 Implement basic focus. 2018-10-13 17:52:47 +02:00
Andreas Kling
e16d145cb4 Some color cleanup. 2018-10-12 23:02:23 +02:00
Andreas Kling
6f9e0e3876 After moving a window, try to repaint a bit less.
Only repaint windows that intersect either the old or the new rect.
Also only repaint those rects in the root widget.
2018-10-12 19:39:48 +02:00
Andreas Kling
16576112b0 Add a CheckBox widget. 2018-10-12 14:16:40 +02:00
Andreas Kling
c7463aad11 Add a CBitmap class. The C is for Courage. 2018-10-12 12:49:45 +02:00
Andreas Kling
73895ce043 Add a clock widget. 2018-10-12 12:18:59 +02:00
Andreas Kling
6f6f9bd84d Window contents move along with the window! 2018-10-12 02:41:27 +02:00
Andreas Kling
64127e0637 Very hacky support for dragging a window around. 2018-10-12 02:24:05 +02:00
Andreas Kling
415c4b90c5 Start adding a Window class. 2018-10-12 01:03:22 +02:00
Andreas Kling
a4491e9630 More hacking on Widgets. 2018-10-11 16:52:40 +02:00
Andreas Kling
ab5266b924 Rage hacking on TerminalWidget.
There's some really hideous plumbing with globals going on here, but my
priority right now is getting a basic VT100 terminal emulator working.
2018-10-11 12:33:03 +02:00
Andreas Kling
f337616741 More hacking on Widgets. 2018-10-11 01:48:09 +02:00
Andreas Kling
6f37429f57 Intense hacking on Widgets. 2018-10-10 16:49:36 +02:00
Andreas Kling
8c84f9749e Start working on a Widgets library. 2018-10-10 15:12:38 +02:00