Age | Commit message (Collapse) | Author |
|
|
|
This improves start-up performance for large windows.
|
|
|
|
Currently the clipping region is still a plain rectangle bounded by the
outer rounded rectangle. A rounded rectangle clip would be nice, but
unfortunately Cairo leaves antialiasing artifacts if we do this.
|
|
Tofi now uses Harfbuzz if a file is passed to --font-name, and Pango
otherwise.
|
|
The scale factor is now only used to scale font sizes, not all Cairo
drawing operations. This makes pixel-sized options correct.
|
|
There are too many really to use single-character args, so the next step
should be a config file.
|
|
- Split the compgen and history sorting parts of compgen(), for future
dmenu-like work.
- Add a separate tofi-compgen executable.
- Remove harfbuzz-glib usage, as we shouldn't be doing any complicated
unicode stuff.
|
|
We don't actually need to initialise our second Cairo context / surface
until after the first one has been painted to the screen. This commit
therefore delays this initialisation (or at least the expensive memcpy),
granting a significant reduction in startup time.
The downside is that main() and entry_init() are now tied together
somewhat, but hopefully the comments help.
|
|
By pointing Cairo at the mmap-ed file used to create wl_shm buffers, we
can eliminate a memcpy() on every draw, providing a decent speedup
(especially for large window sizes).
This comes at the expense of having to keep track of two Cairo contexts,
one for each of our two buffers used for double buffering. Additionally,
a single memcpy() is still required for initialisation of the second
buffer, so the startup latency isn't affected much.
|
|
|
|
Rather than using cairo_paint() and re-drawing the middle of the window
multiple times, use cairo_rectangle() + cairo_stroke(). This especially
helps for large (e.g. fullscreen) windows.
|
|
Another source of slow startup is initialising Pango. If the user
supplies a ttf file, we can skip any Pango stuff and use Harfbuzz
directly with Cairo to do our font rendering, providing a large speedup.
|
|
eglInitialize() is slow (~50-100ms), and uses a fair amount of memory
(~100 MB). For such a small, simple program that just wants to launch as
quickly as possible, wl_shm performs better.
|
|
- Remove the background image and libpng dependency
- Add a prompt
- Add xmalloc with out-of-memory handling
- Add beginnings of a rofi-like run cache
|
|
The subsurface was playing havoc with layer shell stuff, and I don't
think any potential efficiency gain is worth the complicated code to
work out how big the subsurface should be. Instead, the entry code now
just draws directly onto the main surface.
Damage information should be passed to glTexSubImage2D() in future, to
avoid redrawing the entire window every keypress.
|
|
|
|
|
|
|
|
Initialising Pango makes up a large portion of the startup time, and we
can achieve neater rendering with pure Cairo if we're just drawing
circles anyway. Therefore, this commit avoids loading Pango if no
options which require it are specified (such as --font-name or
--password-character). This reduces startup time with no background
image to ~40ms on my machine (2015 MacBook Pro).
|
|
|
|
Also fix some memory leaks.
|
|
Useable, but very barebones — not even any error message reporting.
|
|
This speeds up Pango initialisation, which is by far the slowest part.
|
|
|
|
|