Christopher Dumas
c72953cf06
WindowServer: Clang-Format
2019-06-06 18:35:00 +02:00
Robin Burchell
ab004f73bf
Painter: Reduce the number of draw_text overloads to only involve StringView
...
No more char + int sequences, as that's literally what StringView is for.
2019-06-03 20:27:05 +02:00
Robin Burchell
1024dfa81a
StringViewize a bunch of things -- mostly LibGUI
2019-06-03 20:27:05 +02:00
Christopher Dumas
da9c70598f
centered backgrounds are now an option
2019-05-27 21:40:53 +02:00
Christopher Dumas
aa50e5bb13
tiled backgrounds no longer has strange off-by-one pixel errors
2019-05-27 21:40:53 +02:00
Christopher Dumas
c23882dde1
can now tile background and made sure the IRC choose server popup still works
2019-05-27 21:40:53 +02:00
Andreas Kling
641d55c7ef
Painter: Always optimize with -O3.
...
Use a GCC #pragma to always optimize the Painter code with -O3.
This code is performance critical and hotter than anything else in the
system, and this helps quite a bit.
The 2x, 3x and 4x upscaling fast paths benefit greatly from this.
2019-05-11 17:00:46 +02:00
Andreas Kling
788fb7699b
Painter: Simplify the draw_scaled_bitmap() fast path for integer scale.
...
Iterate over the source image instead of the destination image, and blow it
up pixel by pixel. This code will only run for upscaling so we don't need
to worry about anything else.
2019-05-11 16:55:30 +02:00
Andreas Kling
1652cb7db9
Painter: Fix typo in 4x scaling fast path.
2019-05-11 16:00:25 +02:00
Andreas Kling
e2c2a4c6d7
Painter: Add a fast path for draw_scaled_bitmap() with integer scale.
...
When both the x and y scale factors are integers, we can avoid a whole bunch
of the pixel lookups in the source image.
This makes 2x scaling a 320x200 bitmap another ~25% faster. :^)
2019-05-11 05:34:20 +02:00
Andreas Kling
91a4b60d66
Painter: Templatize the inner loop of draw_scaled_bitmap().
...
Use templates to specialize draw_scaled_bitmap() so we don't have to blend()
for source without alpha, and also inline the GraphicsBitmap::get_pixel()
logic so we don't have to branch on the bitmap format on every iteration.
This is another ~30% speedup on top of the previous changes. :^)
2019-05-11 03:53:28 +02:00
Andreas Kling
e491dd2125
Painter: Improve draw_scaled_bitmap() performance.
...
- Removed extra bounds checking.
- Converted it to use integer math for the scale factors.
- Using blend() for everything.
Patch contributed by "pd"
2019-05-11 02:55:42 +02:00
Andreas Kling
e8d395b14d
Painter: Support diagonal lines with dy>dx, and apply clipping as well.
2019-05-07 17:01:55 +02:00
Andreas Kling
1af9b6f102
Painter: Remove unused draw_focus_rect().
2019-05-07 16:17:28 +02:00
Andreas Kling
61e3ecec79
GraphicsBitmap: Add a new "Indexed8" format that uses a 256-entry palette.
...
These bitmaps should only be used as a source bitmap, we won't support
painting into them using Painter. You can however manipulate the raw
pixel data. :^)
2019-05-06 19:32:56 +02:00
Andreas Kling
cec16105cc
Make sure all GraphicsBitmap scanlines are 16-byte aligned.
...
This is a prerequisite for some optimizations.
2019-05-06 14:04:54 +02:00
Andreas Kling
f3aec1a0d9
Painter: Re-enable diagonal draw_line().
...
This code still needs clipping, but the basic concept works. It was disabled
since before the kernel had floating point support.
2019-05-04 23:40:52 +02:00
Andreas Kling
f61549ca5f
Make better use of geometry class helpers in some places.
2019-04-16 13:58:02 +02:00
Andreas Kling
a082738f04
SharedGraphics: Move PainterStateSaver out of line.
2019-04-16 01:01:03 +02:00
Andreas Kling
476c43ab22
Painter: Add alpha-blending support to blit_dimmed().
2019-04-12 02:50:28 +02:00
Andreas Kling
5e0577a042
Introduce LibCore and move GElapsedTimer => CElapsedTimer.
...
I need a layer somewhere between AK (usable both by userspace and kernel)
and LibGUI (usable by userspace except WindowServer.) So here's LibCore.
2019-04-10 16:14:44 +02:00
Andreas Kling
30e2d62c38
WindowServer: Factor out some parts of compose().
...
The main compositing loop was getting pretty unwieldy. Break out some parts
into functions so it's more understandable.
2019-04-10 13:51:47 +02:00
Andreas Kling
4abffa4dbe
GSpinBox: Put nice little arrow glyphs on the buttons.
2019-04-10 01:37:08 +02:00
Andreas Kling
4533539e8a
Painter: Add text elision support (only right-hand side supported.)
...
Some window titles didn't fit on the taskbar buttons, so I needed a way
to collapse the remaining part of the text into "..."
2019-04-04 15:19:04 +02:00
Andreas Kling
f249c40aaa
Rename Painter::set_clip_rect() to add_clip_rect().
...
It was confusing to see multiple calls to set_foo() in a row. Since this is
an intersecting operation, let's call it add_clip_rect() instead.
2019-03-29 15:01:54 +01:00
Andreas Kling
9fa21fa585
LibGUI: Add a GPainter class that inherits from Painter.
...
This gets rid of the last little piece of LibGUI knowledge in Painter.
2019-03-28 17:19:56 +01:00
Andreas Kling
86570d3b1a
SharedGraphics: Add Painter::draw_scaled_bitmap().
...
It's just a simple nearest-neighbor scale with alpha blending but it gets
the job done.
2019-03-22 04:20:10 +01:00
Andreas Kling
4e451c1e92
Add client-side double buffering of window backing stores.
...
This prevents flicker and looks rather good. The main downside is that
resizing gets even more sluggish. That's the price we pay for now.
2019-03-17 04:23:54 +01:00
Andreas Kling
ffe4522316
SharedGraphics: Allow passing a Font to text drawing functions.
...
This way we don't have to juggle around with calls to Painter::set_font()
which simplifies a bunch of places.
2019-03-09 21:24:12 +01:00
Andreas Kling
f7097d21f6
SharedGraphics: Give painter a state stack and save()/restore() operations.
...
This will make some painting code a lot less confusing since there's no
need to manually undo translations, clips, etc.
2019-03-09 16:48:02 +01:00
Andreas Kling
ce35cddb1b
GTextEditor: Let's use a Vector for the line backing store.
...
I'm eventually gonna want to replace this with something more clever,
like a automagically splicing vector or something, but for now, at least
we move away from immutable Strings.
2019-03-07 14:35:32 +01:00
Andreas Kling
7f6c81d90f
Implement basic support for variable-width fonts.
...
Also add a nice new font called Katica. It's not used anywhere yet but
I'm definitely itching to start using it. :^)
2019-03-06 12:52:41 +01:00
Andreas Kling
0a86366c71
Make a preparation pass for variable-width fonts.
2019-03-06 11:03:10 +01:00
Andreas Kling
91031346e5
Kernel: More signal handling improvements.
...
Finally fixed the weird flaky crashing when resizing Terminal windows.
It was because we were dispatching a signal to "current" from the scheduler.
Yet another thing I dislike about even having a "current" process while
we're in the scheduler. Not sure yet how to fix this.
Let the signal handler's kernel stack be a kmalloc() allocation for now.
Once we can do allocation of consecutive physical pages in the supervisor
memory region, we can use that for all types of kernel stacks.
2019-03-05 12:52:35 +01:00
Andreas Kling
ef4d517429
LibGUI: Tweak focus appearance and add it to GTableView.
2019-03-04 10:12:09 +01:00
Andreas Kling
fd428d6ed3
SharedGraphics: Make Painter clipping work with translated clip origin.
2019-02-28 18:57:36 +01:00
Andreas Kling
9624b54703
More moving towards using signed types.
...
I'm still feeling this out, but I am starting to like the general idea.
2019-02-25 22:06:55 +01:00
Andreas Kling
901b7d5d91
Fix a bunch of compiler warnings. Not all, but a lot.
2019-02-25 19:05:51 +01:00
Andreas Kling
15fb917f28
Convert more RetainPtr use to Retained.
2019-02-25 16:04:08 +01:00
Andreas Kling
fa02d2a39b
Rework the rendering model so that clients instantiate backing stores.
...
This makes interactive resizing work a lot better, althought it's still not
perfect. There are still glitches and unpleasant flashes of zeroed memory.
2019-02-20 22:08:14 +01:00
Andreas Kling
b704d3d295
LibGUI: Add a GToolBar class that can be populated with GActions.
...
The same action can be added to both a menu and a toolbar.
Use this to put a toolbar into FileManager. This is pretty neat. :^)
2019-02-20 02:39:46 +01:00
Andreas Kling
9b71307d49
WindowServer: Support windows with alpha channels. And per-WSWindow opacity.
...
This patch also adds a Format concept to GraphicsBitmap. For now there are
only two formats: RGB32 and RGBA32. Windows with alpha channel have their
backing stores created in the RGBA32 format.
Use this to make Terminal windows semi-transparent for that comfy rice look.
There is one problem here, in that window compositing overdraw incurs
multiple passes of blending of the same pixels. This leads to a mismatch in
opacity which is obviously not good. I will work on this in a later patch.
The alpha blending is currently straight C++. It should be relatively easy
to optimize this using SSE instructions.
For now I'm just happy with the cute effect. :^)
2019-02-19 01:42:53 +01:00
Andreas Kling
10d6f9ce31
SharedGraphics: Removed some unused stuff from Font.
2019-02-17 00:36:55 +01:00
Andreas Kling
640360e958
Move WindowServer to userspace.
...
This is a monster patch that required changing a whole bunch of things.
There are performance and stability issues all over the place, but it works.
Pretty cool, I have to admit :^)
2019-02-17 00:13:47 +01:00
Andreas Kling
4ea28bf0a5
Kernel: Add a simple shared memory API for two processes only.
...
And use this to implement shared bitmaps between WindowServer and clients.
2019-02-16 12:13:43 +01:00
Andreas Kling
022f7790db
Use modern C++ attributes instead of __attribute__ voodoo.
...
This is quite nice, although I wish [[gnu::always_inline]] implied inline.
Also "gnu::" is kind of a wart, but whatcha gonna do.
2019-02-15 12:30:48 +01:00
Andreas Kling
29c49356e3
WindowServer: Rename GUI_Foo to WSAPI_Foo.
2019-02-15 09:17:18 +01:00
Andreas Kling
f529b845ec
WindowServer: Convert entire API to be message-based.
...
One big step towards userspace WindowServer. :^)
2019-02-14 01:21:32 +01:00
Andreas Kling
7ce15f1c54
Fix some compilation warnings.
2019-02-12 12:11:22 +01:00
Andreas Kling
ddd580c30f
SharedGraphics: Tighten clip when blitting without alpha.
...
Also don't try to clean up the Painter's window backing store in ~Painter()
if we don't actually have a window backing store.
2019-02-10 11:45:02 +01:00