Commit Graph

47 Commits

Author SHA1 Message Date
Kenny Levinsen
cca2436ba5 Improve frame callback and commit handling
The few places that required a surface commit relied on render_frame and
render_frame_background to form it form them after they had set up frame
callback events. This would fail if render_frame ran out of buffers and
exited early, as the caller would still wait indefinitely on the frame
callback.

swaylock would quite consistently run out of buffers when rendering
immediately after a configure event, such as when the keypress causing
render also caused outputs to be enabled from idle.

Restructure the render and commit handling slightly so that the whole
frame callback and commit setup is handled by the render code, which now
has a single render entrypoint. This both avoids stalls from lacking
commits, but also fixes the case the configure path to respect frame
callbacks so we do not run out of buffers in the first place.
2024-09-06 19:46:24 -04:00
Sophie Winter
2018673e1d Don't drop the buffer until after surface commit 2023-06-12 14:17:43 +02:00
Manuel Stoeckl
31ebd85fe0 Separate input and auth state
This commit establishes separate state machines for auth state (whether
the password submitted is being verified or is wrong) and input state
(typing indicators and clear message -- things relevant to the state of
the password being typed in, before it is submitted.) This makes it
possible to display the auth state while updating the input state (for
example, show that the previously submitted password is 'verifying' or
'wrong' while typing another.)

The two state machines interact only when submitting a password. There
is some interference with the rendering code -- a 'cleared' message
from the input state machine supersedes verifying/wrong messages from
the auth state machine; although since the 'clear' state has a shorter
timeout than the auth 'invalid' state, this is unlikely to hide the 'wrong'
message.
2023-05-09 12:40:41 +02:00
Manuel Stoeckl
75e837c31a Synchronize highlight position between outputs
This change has the additional benefit of ensuring that the position
of the highlight only changes in reaction to a letter key or
backspace being pressed, and not when the compositor sends a new
configure event or the output needs to be redrawn for some other
reason.
2023-04-02 02:34:19 +02:00
Manuel Stoeckl
1d3e62c67f Stop pooling background surface buffers
The wl_buffers for the background surface only need to be updated
when the output dimensions change. Using the fixed pool of two
buffers to cache these buffers does not help, since if a new buffer
is needed, it will have a different size than whatever buffers were
cached. Furthermore, because the pool has fixed size, it is possible
to run out of buffers if configure events arrive faster than
pool buffers are marked not busy, which can lead to protocol errors
when the background surface is committed after acknowledging a new
size, but without attaching a buffer that matches that size.
2023-03-22 10:56:42 +01:00
Manuel Stoeckl
10ab8b2740 Estimate buffer size in advance for render_frame
The size of the surface used to draw the indicator depends on
the extents of the text being drawn on and under the indicator.

This commit refactors the `render_frame` function so that the surface
size is computed before drawing; before, `render_frame` drew onto a
buffer, estimated the size the buffer should have had, and recursively
called itself to try again with the estimated size, if necessary. This
was done because Cairo's methods to estimate font and text size
require that a cairo_t context object and an associated cairo_surface
already have been set up. Since the surface size depends on the text
size, the natural way to use Cairo would have a circular dependency.

In order to compute sizes _before_ the buffer is created, this commit
adds a 1x1 surface and a matching `test_cairo` context which is set to
the same font and drawing parameters as the buffer that will be
created. Font/text extent measurements should give the same results as
for the final buffer.
2023-01-27 12:19:32 +01:00
Manuel Stoeckl
b4e3a2b0fd Remove overridden surface attachment
The removed lines had no effect, since later in `render_frame`
buffer->buffer is attached to surface->child.
2023-01-27 12:19:32 +01:00
sonny
226244e93c Fix capitalization. 2022-11-21 16:31:11 +01:00
Alexander Orzechowski
5c1b16b957 renderer: work with current buffer locally
No need to store this globally accessible struct member.
2022-11-14 21:06:41 +01:00
Johan Malm
06d22a8dea Remove redundant function render_frames() 2022-03-20 22:54:39 +01:00
Michael Swiger
7ac62ebda1 Prevent attaching and committing the surface twice 2021-07-05 22:56:20 +02:00
Michael Swiger
4088033ff6 Fix indicator buffer not resizing after display powers off 2021-07-05 22:56:20 +02:00
Simon Plakolb
9754241080 Ensure buffer size is multiple of buffer scale
An odd value of fe.height lead to the indicator disappearing. This was
due to the buffer size no longer being a multiple of the buffer scale.
This commit fixes the issue by checking both height and width to be a
multiple of scale.

This is done early to avoid excessive re-calls of create_buffer if the
buffer_height != new_height in render.c line 314 (now 318).
2021-07-05 14:43:26 +02:00
loserMcloser
bac71d9c8d Draw ring and inner fill separately 2021-06-22 19:30:11 +02:00
Elyes HAOUAS
baa1ae99df Fix some typos
Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr>
2021-04-12 21:28:59 +02:00
Simon Ser
9d3da72a39 Use wl_surface.damage_buffer
We incorrectly used the buffer size instead of the surface size.
Let's not bother and just damage the maximum region.
2021-02-17 16:50:38 +01:00
Matt Della
a7404e1096 Added option to adjust ring position via CLI arguments and the config file 2019-11-27 19:53:07 -05:00
Alexander Martin
666ae950bc Adds option to show indicator even if idle 2019-08-04 02:15:49 -04:00
Martin Dørum
080e8356b7 properly fix indicator position 2019-07-20 10:06:33 +03:00
Martin Dørum
25ce4b12bb fix indicator position 2019-06-28 10:27:34 -04:00
Abdelhakim Qbaich
89b214612c Resizable buffer size for the subsurface 2019-06-22 22:36:53 +03:00
Abdelhakim Qbaich
e049fa4868 Minor edits 2019-06-22 22:36:53 +03:00
Peter Kasza
183d1bd549 Add fixed font-size option for indicator
This commit adds a new command line option called --font-size to
specify a fixed font size in the indicator. The default value for
font-size is 0, which means that the text will autoscale. Any other
positive value will result in a fixed text size.
2019-05-05 09:25:59 -06:00
bbgun7
86f4fea55e Added hide keyboard layout option 2019-04-22 10:34:19 -07:00
Geoff Greer
98e5afe364 Fix lock indicator position on hidpi screens. 2019-04-03 01:15:51 -04:00
Anders Nylander
7d5a73b0a9 Decouple the drawing of the background from drawing the indicator.
* Render background only once in main wl_surface
* Render indicator on subsurface
2019-03-20 23:07:31 +02:00
Dominik Bendle
a052a56bc2 Display xkb layout while typing
Displays the current keyboard layout below the unlock indicator if more
than one xkb layout is configured or the show-keyboard-layout option is
given. The text is displayed with a background box.

Adds commandline options for text color, background color and border
color of the box as well.
2019-02-06 01:42:49 +01:00
Dominik Bendle
40e9098a74 Add option show-failed-attempts
Keeps track of unsuccessful authentication attempts via an int counter
in the state struct. Displays on the unlock indicator, but will be
replaced by the Caps Lock text if enabled.
2019-01-29 20:44:32 +01:00
v44r
ecc8402c43 Fix vertical align of text inside the circle 2019-01-28 14:28:08 -05:00
Dominik Bendle
c2b99768e9 Allow setting both background image and colour
The -c/--color option no longer sets BACKGROUND_MODE_SOLID_COLOR (which
disables the background image) and the background color is now set in
all cases. One can still use --scaling solid_color to disable display of
a background image.

As a consequence, there is now only one possible default background
colour (white), regardless of whether a background image is given or not.
2019-01-25 10:30:13 +01:00
Robinhuett
1e7696fceb Add caps lock state to indicator
This implements customization for the indicator as proposed in sway#2788 with comments from sway#3367 in mind.
The default behaviour does not change exept for the caps lock text color.
Since these changes seem to be lost in the split I've remade them.
2019-01-14 16:51:04 +01:00
Drew DeVault
b90637e2a6 Convert swaylock into standalone project 2019-01-13 21:16:47 -05:00
emersion
8191c2147b Replace _XOPEN_SOURCE with _POSIX_C_SOURCE
And make sure we don't define both in the same source file.
2018-11-25 17:19:43 +01:00
Geoff Greer
1ba79a159e swaybar, swaylock, & tree/container: Set cairo font options to render text and lines with subpixel hinting (if available). 2018-09-22 11:34:21 -07:00
Brian Ashworth
77cf57ae14 Implement swaylock customization flags 2018-07-10 21:29:15 -04:00
Bor Grošelj Simić
0978661a1b Fix transparency in background images in swaylock 2018-07-04 12:09:05 +02:00
Bor Grošelj Simić
175c21d36d Fix #1857 2018-07-04 01:53:32 +02:00
emersion
515f03c94c swaylock: implement a proper render loop 2018-05-27 13:39:38 +01:00
emersion
8eca011fa7 swaylock: don't try to render unconfigured surfaces 2018-05-23 22:55:57 +01:00
Ryan Dwyer
3afd535a3b Swaylock: Allow per-output images 2018-05-20 22:54:09 +10:00
Mattias Eriksson
52e2575d19 Improved key handling in swaylock
Make escape clear buffer
Add indicator states for ctrl,shift,super et al
Add CapsLock indicator
2018-04-24 15:40:30 +02:00
Drew DeVault
f39499b139 Address review feedback from @emersion 2018-04-04 18:52:44 -04:00
Drew DeVault
495fcb627a Import stdlib.h and define POSIX macro for rand() 2018-04-04 18:47:49 -04:00
Drew DeVault
2c6703cd41 Move extra roundtrip into password.c 2018-04-04 18:47:49 -04:00
Drew DeVault
61b2e71c0c Add hidpi support to swaylock 2018-04-04 18:47:48 -04:00
Drew DeVault
d9287eb53b R E N D E R I N G 2018-04-04 18:47:48 -04:00
Drew DeVault
3f21cd441b Add password buffer, refactor rendering/surfaces 2018-04-04 18:47:48 -04:00