Add screen magnifier

This adds a screen magnifier which can be controlled with the
`ZoomIn` / `ZoomOut` and `ToggleMagnify` actions.

It scales up part of the rendered framebuffer so the magnification
may end up looking blurry depending on the magnification scale.

PR #1774
This commit is contained in:
Simon Long 2024-05-15 23:07:23 +01:00 committed by GitHub
parent ad15c0474d
commit 8ba066a1a5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 473 additions and 1 deletions

View file

@ -264,6 +264,18 @@ Actions are used in menus and keyboard/mouse bindings.
decorations (including those for which the server-side titlebar has been
hidden) are not eligible for shading.
*<action name="ToggleMagnify">*
Toggle the screen magnifier on or off at the last magnification level
used.
*<action name="ZoomIn">*++
*<action name="ZoomOut">*
Increase or decrease the magnification level for the screen magnifier.
If the magnifier is currently off, ZoomIn will enable it at the lowest
magnification, equal to (1 + the magnifier increment set in the theme).
If the magnifier is on and at the lowest magnification, ZoomOut will
turn it off.
*<action name="None" />*
If used as the only action for a binding: clear an earlier defined
binding.

View file

@ -909,6 +909,39 @@ situation.
option has been exposed for unusual use-cases. It is equivalent to
Openbox's `<hideDelay>`. Default is 250 ms.
## MAGNIFIER
```
<magnifier>
<width>400</width>
<height>400</height>
<initScale>2</initScale>
<increment>0.2</increment>
<useFilter>true</useFilter>
</magnifier>
```
*<magnifier><width>*
Width of magnifier window in pixels. Default is 400.
Set to -1 to use fullscreen magnifier.
*<magnifier><height>*
Height of magnifier window in pixels. Default is 400.
Set to -1 to use fullscreen magnifier.
*<magnifier><initScale>*
Initial number of times by which magnified image is scaled. Value
is the default at boot; can be modified at run-time in a keyboard
or mouse binding by calling 'ZoomIn' or 'ZoomOut'. Default is x2.0.
*<magnifier><increment>*
Step by which magnification changes on each call to 'ZoomIn' or
'ZoomOut'. Default is 0.2.
*<magnifier><useFilter>* [yes|no|default]
Whether to apply a bilinear filter to the magnified image, or
just to use nearest-neighbour. Default is true - bilinear filtered.
## ENVIRONMENT VARIABLES
*XCURSOR_THEME* and *XCURSOR_SIZE* are supported to set cursor theme

View file

@ -277,6 +277,12 @@ elements are not listed here, but are supported.
*window.inactive.border.color*. This is obsolete, but supported for
backward compatibility as some themes still contain it.
*magnifier.border.width*
Width of magnifier window border in pixels. Default is 1.
*magnifier.border.color*
Color of the magnfier window border. Default is #ff0000 (red).
# BUTTONS
The images used for the titlebar icons are referred to as buttons.

View file

@ -589,4 +589,23 @@
<menu>
<ignoreButtonReleasePeriod>250</ignoreButtonReleasePeriod>
</menu>
<!--
Magnifier settings
'width' sets the width in pixels of the magnifier window.
'height' sets the height in pixels of the magnifier window.
'initScale' sets the initial magnification factor at boot.
'increment' sets the amount by which the magnification factor
changes when 'ZoomIn' or 'ZoomOut' are called.
'useFilter' sets whether to use a bilinear filter on the magnified
output or simply to take nearest pixel.
-->
<magnifier>
<width>400</width>
<height>400</height>
<initScale>2.0</initScale>
<increment>0.2</increment>
<useFilter>true</useFilter>
</magnifier>
</labwc_config>