Ray Strode [Sun, 10 Dec 2023 15:18:30 +0000 (10:18 -0500)]
utils: Rework UTF-8 handling
ply_utf8_character_get_size currently has this odd argument at
the end that is often just set to PLY_UTF8_MAX_CHARACTER_SIZE
and also the function returns magic values for cases where it
can't figure out the size because the byte isn't a leading
byte or is otherwise not valid UTF-8.
That means that API has a nuance to it that makes the code hard
to follow at a light read.
This commit attempts to improve the situation by dropping the
extra argument, and adds a way to get the type separate from the
size for clarity.
At the same time, this commit updates all the callers to use the
new API. There are two cases where the callers are trying to
remove the last character from a UTF-8 string, so this commit
adds a new function to consolidate that logic as well.
nerdopolis [Wed, 6 Dec 2023 02:12:37 +0000 (21:12 -0500)]
ply-terminal-emulator: Require a fixed upfront column count
Some commands really do need to know how wide the terminal is to operate correctly. Without
it long lines don't wrap right and other badness can happen.
This commit addresses the problem by changing the terminal to take both a `number_of_rows`
and `number_of_columns` argument at construct time instead of just a `maximum_line_count`.
In order to properly implement that change, this commit also adds new api to `ply_rich_text_t`
to specify which parts of a run of rich text is read-only and which parts of the run can be
modified.
Changes in this commit were made with assistance from Ray Strode
Ray Strode [Mon, 4 Dec 2023 12:54:41 +0000 (07:54 -0500)]
ply-input-device: Handle SYN events
If the kernel falls behind a stream of input events, we currently
drop them on the floor.
It seems unlikely that this could ever happen theorhetically since we only
process keyboard events (versus, say, a high frequency stream of pointer
events, or a complex stylus device with inter-related events coming in,
in batches). Nonetheless, there is a report that suggests key events
may be getting dropped.
This commit adds support for handling the backlogged event case, and
hopefully address the bug report.
Hans de Goede [Tue, 15 Aug 2023 17:25:21 +0000 (19:25 +0200)]
drm: Guess device-scale when using simpledrm
When displaying on a simpledrm kms device the physical dimensions
of the screen are unknown. Use the heuristics from ply_get_device_scale ()
to guess the device scale to avoid rendering things too small
on 4K screens.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede [Tue, 15 Aug 2023 16:41:29 +0000 (18:41 +0200)]
drm: Add check if the driver used is simpledrm
Add a check to see if the driver used is simpledrm,
this is a preparation patch for adding support to set
device_scale based on heuristics when using simpledrm.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede [Tue, 15 Aug 2023 16:42:46 +0000 (18:42 +0200)]
drm: Initialize rotation local variable
Initialize rotation local variable to fix the following
false positive compiler warning:
src/plugins/renderers/drm/plugin.c: In function ‘get_primary_plane_rotation’:
src/plugins/renderers/drm/plugin.c:485:31: warning: ‘rotation’ may be used uninitialized [-Wmaybe-uninitialized]
485 | *rotation_ret = rotation;
| ~~~~~~~~~~~~~~^~~~~~~~~~
src/plugins/renderers/drm/plugin.c:419:18: note: ‘rotation’ was declared here
419 | uint64_t rotation;
| ^~~~~~~~
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede [Mon, 14 Aug 2023 14:50:22 +0000 (16:50 +0200)]
drm: Use first output for panel info if there is no builtin display
The two-step renderer uses ply_renderer_get_panel_properties() to get
the device-scale used for the builtin panel, assuming this is most likely
light-up by the firmware on boot and that this is thus also displaying
the bgrt boot splash shown by the firmware at boot.
It needs to know the device-scale for this output so that if hi-dpi
(device-scale=2) rendering is used on the output it can also set
device-scale=2 on the ply_pixel_buffer() used for the bgrt background
so that the pixel-buffer code knows the splash is pre-scaled and
doesn't double it in size making it twice as big as original.
ATM this doubling in size of the splash is exactly what happens
when using a desktop with a hidpi monitor because the drm plugin
does not provide any "panel" properties in this case.
To avoid this fall-back to using the properties of the first
enumerated (connected) output for get_panel_properties().
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede [Tue, 15 Aug 2023 10:23:05 +0000 (12:23 +0200)]
i18n: Check for NL plymouth.mo file instead of /usr/share/locale existence
setlocale () does not work when there is no locale info for
the selected LANG / LC_MESSAGES. But it does cache the set
LANG / LC_MESSAGES and on subsequent setlocale () calls with
the same LANG / LC_MESSAGES it does not recheck for the locale info.
Thus if the initrd does not have translations then the setlocale ()
call should be delayed to after the chroot so that e.g.
the "Installing Updates..." text, which only is shown after
the chroot, gets translated properly.
So far we have been checking the /usr/share/locale dir exists,
but it is possible that some initrd generators may create
that without the necessary locale info being available.
Instead check for the NL plymouth.mo file, assuming that
if that is available we have all the necessary locale info.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede [Tue, 15 Aug 2023 10:16:47 +0000 (12:16 +0200)]
meson: Fix PLYMOUTH_LOCALE_DIRECTORY and PLYMOUTH_DRM_ESCROW_DIRECTORY defines
After the conversion to meson to following CFLAGS were passed:
-DPLYMOUTH_LOCALE_DIRECTORY="share/locale"
-DPLYMOUTH_DRM_ESCROW_DIRECTORY="libexec/plymouth"
Note the missing "/usr/" prefix.
Fix these so that the locale check and drm-escrow binary work
again.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Tomás Pinho [Fri, 2 Jun 2023 12:13:34 +0000 (13:13 +0100)]
script: adds a new native GetCapslockState function to lib-plymouth
Allows Plymouth Script-based themes to query the Capslock state
directly to act on it by showing an icon or message.
Takes in Ray's suggestions and base the implemention around the keyboard
type instead, delegating to the renderer/terminal renderer types instead.
Timo Teräs [Wed, 22 Mar 2023 11:49:47 +0000 (13:49 +0200)]
script: fix deletion of sprites after full refresh
The node pointer is reused in the if (data->full_refresh) block
causing the following sprite list walking to fail. Fix this by
moving the sprite list first node getting next to the while loop
where it belongs.