Andreas Kling
10387beda7
Implement basic support for POSIX-style select().
...
Now we can block on both the PTY *and* the GUI event stream in Terminal.
2019-01-16 00:09:58 +01:00
Andreas Kling
46181cf023
Oops, finish WindowServer rename.
2019-01-15 21:46:15 +01:00
Andreas Kling
52c004eb53
Add internal locking to DoubleBuffer.
2019-01-15 21:43:38 +01:00
Andreas Kling
e42f090ed3
Rename WindowComposer -> WindowServer.
...
I keep referring to it as the windowing server anyway.
2019-01-15 21:16:04 +01:00
Andreas Kling
d0137f0e96
Terminal: optimize repaints a bunch.
...
We track dirty character cells + pending whole-terminal scrolls.
This drastically reduces the number of pixels pushed.
2019-01-15 10:23:15 +01:00
Andreas Kling
e452303c66
Allow character devices to block write attempts until there is more space.
2019-01-15 09:17:22 +01:00
Andreas Kling
49b63281a0
Make it possible for a process to switch controlling terminals.
...
Via the TIOCSCTTY and TIOCNOTTY ioctls.
2019-01-15 08:49:24 +01:00
Andreas Kling
10308c6434
Let's not require TERM=ansi for tgetent() to work.
2019-01-15 08:32:53 +01:00
Andreas Kling
6f61eb4a87
Slap an InterruptDisabler on gui$invalidate_window().
...
This is obviously not a permanent solution but it works now to allow
the windowing system to withstand invalidation spam.
2019-01-15 08:23:13 +01:00
Andreas Kling
14712ad9c5
Let's do dword-at-a-time memcpy() and memset() in userspace as well.
...
Also fix a dumb bug that showed up when I was memsetting something other
than zeroes.
2019-01-15 08:14:44 +01:00
Andreas Kling
a8e42bacf4
Minor Terminal tweaks.
2019-01-15 07:57:30 +01:00
Andreas Kling
d14ec951ea
Terminal: Add some inset and line spacing.
...
This is starting to feel vaguely usable! :^)
2019-01-15 07:39:51 +01:00
Andreas Kling
c24f543a57
Terminal: basic ANSI color support.
2019-01-15 07:30:24 +01:00
Andreas Kling
78696236d3
Add very basic KeyDown events to the GUI event stream.
...
The Terminal program now hosts an interactive shell. :^)
2019-01-15 06:51:00 +01:00
Andreas Kling
c0ef060a7c
Let's just assume we have 32MB of physical memory to work with.
...
I should eventually figure out the exact amount of memory but not now.
2019-01-15 06:48:36 +01:00
Andreas Kling
2f74c2f430
Add basic PTY support.
...
For now, there are four hard-coded PTYs: /dev/pt{m,s}[0123]
Use this in the Terminal to open a pty pair and spawn a shell.
2019-01-15 06:30:19 +01:00
Andreas Kling
ecb4ab0943
Add Terminal/.gitignore
2019-01-15 04:49:01 +01:00
Andreas Kling
dfff2996d2
Factor out individual glyph drawing into Painter::draw_glyph().
2019-01-15 04:44:47 +01:00
Andreas Kling
6d8043767e
Start working on a graphical Terminal program.
2019-01-15 04:30:55 +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
bfef4afa6a
So long SDL stuff. You were a nice bootstrapping environment.
2019-01-14 15:30:37 +01:00
Andreas Kling
0c5ecd303c
Share GraphicsBitmaps between the windowing server and the client process.
...
This is pretty cool. :^)
GraphicsBitmaps are now mapped into both the server and the client address
space (usually at different addresses but that doesn't matter.)
Added a GUI syscall for getting a window's backing store, and another one
for invalidating a window so that the server redraws it.
2019-01-14 15:25:34 +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
b4da4e8fbd
Always inline the locks.
2019-01-14 14:14:30 +01:00
Andreas Kling
11331e9639
Add Vector::take_first().
2019-01-14 02:49:30 +01:00
Andreas Kling
973ff14180
Make QtCreator stop complaining about the ASSERT macro.
2019-01-14 00:35:07 +01:00
Andreas Kling
e7b1101f62
TTY::write() should return the number of bytes written.
2019-01-14 00:19:03 +01:00
Andreas Kling
cc0be2e78a
Keep back and front painters around in WindowManager.
...
The internal state never changes in some meaningful way for these (at this time.)
2019-01-13 07:41:31 +01:00
Andreas Kling
0ead888821
gui$create_widget() shouldn't try to make button corners opaque.
2019-01-13 07:33:10 +01:00
Andreas Kling
9053027dc0
Flush the old and new cursor rects in a single rect.
2019-01-13 07:23:07 +01:00
Andreas Kling
8e96cba7ef
Make a nice bitmap cursor.
...
It's rendered as two CharacterBitmaps right now because I don't have a good
primitive for this and I wanted it right away. I should add 2-color bitmaps..
Also make a neat little effect where the cursor becomes inverted on press.
2019-01-13 07:17:12 +01:00
Andreas Kling
1d914cbd84
Minor GUI API things + make Button corners properly transparent.
2019-01-13 06:26:20 +01:00
Andreas Kling
f7261d7b26
Let's use the existing Rect and Color types in the GUI API.
...
Any type that doesn't depend on indirect data can probably be used here.
2019-01-13 05:31:07 +01:00
Andreas Kling
b2d86b7597
Add basic GUI API for creating labels and buttons.
2019-01-13 05:03:17 +01:00
Andreas Kling
17c7bf01a5
Fix Userland build.
2019-01-13 04:31:16 +01:00
Andreas Kling
8f8c8d1ca3
Start working on a GUI kernel API.
2019-01-13 02:02:34 +01:00
Andreas Kling
becc2c7fa5
Make GraphicsBitmaps be Region-backed when running in the kernel.
...
This is a lot better than having them in kmalloc memory. I'm gonna need
a way to keep track of which process owns which bitmap eventually,
maybe through some sort of resource keying system. We'll see.
2019-01-13 00:29:32 +01:00
Andreas Kling
e4cb9b2985
Have WindowManager::invalidate() unite dirty rects that intersect each other.
...
This is kinda primitive but it avoids double-draw when slowly dragging stuff.
2019-01-13 00:04:23 +01:00
Andreas Kling
c43903eebd
Don't use dword-by-dword memset/memcpy if the addresses are unaligned.
...
Also don't enable the large kmalloc catcher by default.
2019-01-12 23:36:08 +01:00
Andreas Kling
3ac977f50b
Paper over a race in DoubleBuffer.
...
I'm still somewhat okay throwing InterruptDisabler at races as they screw me.
Eventually I'm gonna have to devise a different strategy though.
2019-01-12 23:23:35 +01:00
Andreas Kling
2e2d883c09
Print process name and PID when kmalloc() panics.
2019-01-12 21:48:41 +01:00
Andreas Kling
edc827077e
Optimize WindowManager::flush() with fast_dword_copy().
2019-01-12 21:45:45 +01:00
Andreas Kling
6b4e88b515
Give GraphicsBitmap a member for the pitch.
2019-01-12 21:29:05 +01:00
Andreas Kling
6cc8c3799a
Make FrameBuffer::flush() a no-op when building outside of SDL.
2019-01-12 21:22:54 +01:00
Andreas Kling
4e9bcd3092
Draw the cursor *after* flushing all dirty rects.
2019-01-12 21:02:08 +01:00
Andreas Kling
defd899b38
Remove FrameBuffer::blit() since it was superseded by Painter::blit().
2019-01-12 20:59:09 +01:00
Andreas Kling
f2551c45ab
Add fast dword-sized copy and fill to the Painter code.
2019-01-12 20:56:09 +01:00
Andreas Kling
24b2cadb82
Make the kernel's memcpy() and memset() go fast with dword copies.
...
Also I learned that the ABI allows us to assume DF=0 on function entry.
2019-01-12 18:14:40 +01:00
Andreas Kling
20156f9ec5
Fix broken focus rects (due to yet another Rect semantics bug.)
2019-01-12 17:34:47 +01:00
Andreas Kling
c0c1c88f9b
ListBox: Fix item rect inconsistency between paints and clicks.
2019-01-12 17:29:29 +01:00