Move magnifier config into rc.xml

This commit is contained in:
Simon Long 2024-05-15 19:19:51 +01:00
parent 8d5bfe1e0e
commit 50066161b0
8 changed files with 86 additions and 58 deletions

View file

@ -909,6 +909,39 @@ situation.
option has been exposed for unusual use-cases. It is equivalent to option has been exposed for unusual use-cases. It is equivalent to
Openbox's `<hideDelay>`. Default is 250 ms. 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.
*<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 ## ENVIRONMENT VARIABLES
*XCURSOR_THEME* and *XCURSOR_SIZE* are supported to set cursor theme *XCURSOR_THEME* and *XCURSOR_SIZE* are supported to set cursor theme

View file

@ -277,33 +277,12 @@ elements are not listed here, but are supported.
*window.inactive.border.color*. This is obsolete, but supported for *window.inactive.border.color*. This is obsolete, but supported for
backward compatibility as some themes still contain it. backward compatibility as some themes still contain it.
*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.border.width* *magnifier.border.width*
Width of magnifier window border in pixels. Default is 1. Width of magnifier window border in pixels. Default is 1.
*magnifier.border.color* *magnifier.border.color*
Color of the magnfier window border. Default is #ff0000 (red). Color of the magnfier window border. Default is #ff0000 (red).
*magnifier.init-scale*
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.
*magnifier.increment*
Step by which magnification changes on each call to 'ZoomIn' or
'ZoomOut'. Default is 0.2.
*magnifier.filter*
Set to 1 to apply a bilinear filter to the magnified image.
Set to 0 to use nearest-neighbour. Default is 1 - bilinear filtered.
# BUTTONS # BUTTONS
The images used for the titlebar icons are referred to as buttons. The images used for the titlebar icons are referred to as buttons.

View file

@ -589,4 +589,23 @@
<menu> <menu>
<ignoreButtonReleasePeriod>250</ignoreButtonReleasePeriod> <ignoreButtonReleasePeriod>250</ignoreButtonReleasePeriod>
</menu> </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</initScale>
<increment>0.2</increment>
<useFilter>true</useFilter>
</magnifier>
</labwc_config> </labwc_config>

View file

@ -140,6 +140,13 @@ struct rcxml {
/* Menu */ /* Menu */
unsigned int menu_ignore_button_release_period; unsigned int menu_ignore_button_release_period;
/* Magnifier */
int mag_width;
int mag_height;
int mag_scale;
float mag_increment;
bool mag_filter;
}; };
extern struct rcxml rc; extern struct rcxml rc;

View file

@ -141,13 +141,8 @@ struct theme {
int osd_window_switcher_item_height; int osd_window_switcher_item_height;
/* magnifier */ /* magnifier */
int mag_scale;
int mag_width;
int mag_height;
float mag_border_color[4]; float mag_border_color[4];
int mag_border_width; int mag_border_width;
int mag_filter;
float mag_increment;
}; };
struct server; struct server;

View file

@ -1036,6 +1036,16 @@ entry(xmlNode *node, char *nodename, char *content)
} }
} else if (!strcasecmp(nodename, "ignoreButtonReleasePeriod.menu")) { } else if (!strcasecmp(nodename, "ignoreButtonReleasePeriod.menu")) {
rc.menu_ignore_button_release_period = atoi(content); rc.menu_ignore_button_release_period = atoi(content);
} else if (!strcasecmp(nodename, "width.magnifier")) {
rc.mag_width = atoi(content);
} else if (!strcasecmp(nodename, "height.magnifier")) {
rc.mag_height = atoi(content);
} else if (!strcasecmp(nodename, "initScale.magnifier")) {
rc.mag_scale = atoi(content);
} else if (!strcasecmp(nodename, "increment.magnifier")) {
set_float(content, &rc.mag_increment);
} else if (!strcasecmp(nodename, "useFilter.magnifier")) {
set_bool(content, &rc.mag_filter);
} }
} }
@ -1242,6 +1252,12 @@ rcxml_init(void)
rc.workspace_config.min_nr_workspaces = 1; rc.workspace_config.min_nr_workspaces = 1;
rc.menu_ignore_button_release_period = 250; rc.menu_ignore_button_release_period = 250;
rc.mag_width = 400;
rc.mag_height = 400;
rc.mag_scale = 2;
rc.mag_increment = 0.2;
rc.mag_filter = true;
} }
static void static void

View file

@ -49,7 +49,7 @@ magnify(struct output *output, struct wlr_buffer *output_buffer, struct wlr_box
wlr_output_layout_output_coords(server->output_layout, output->wlr_output, &ox, &oy); wlr_output_layout_output_coords(server->output_layout, output->wlr_output, &ox, &oy);
ox *= output->wlr_output->scale; ox *= output->wlr_output->scale;
oy *= output->wlr_output->scale; oy *= output->wlr_output->scale;
if (theme->mag_width == -1 || theme->mag_height == -1) { if (rc.mag_width == -1 || rc.mag_height == -1) {
fullscreen = true; fullscreen = true;
} }
if ((ox < 0 || oy < 0 || ox >= output_buffer->width || oy >= output_buffer->height) if ((ox < 0 || oy < 0 || ox >= output_buffer->width || oy >= output_buffer->height)
@ -58,7 +58,7 @@ magnify(struct output *output, struct wlr_buffer *output_buffer, struct wlr_box
} }
if (mag_scale == 0.0) { if (mag_scale == 0.0) {
mag_scale = theme->mag_scale; mag_scale = rc.mag_scale;
} }
if (fullscreen) { if (fullscreen) {
@ -67,10 +67,10 @@ magnify(struct output *output, struct wlr_buffer *output_buffer, struct wlr_box
x = 0; x = 0;
y = 0; y = 0;
} else { } else {
width = theme->mag_width + 1; width = rc.mag_width + 1;
height = theme->mag_height + 1; height = rc.mag_height + 1;
x = ox - (theme->mag_width / 2.0); x = ox - (rc.mag_width / 2.0);
y = oy - (theme->mag_height / 2.0); y = oy - (rc.mag_height / 2.0);
} }
double cropped_width = width; double cropped_width = width;
double cropped_height = height; double cropped_height = height;
@ -201,7 +201,7 @@ magnify(struct output *output, struct wlr_buffer *output_buffer, struct wlr_box
.dst_box = dst_box, .dst_box = dst_box,
.alpha = NULL, .alpha = NULL,
.clip = NULL, .clip = NULL,
.filter_mode = theme->mag_filter ? WLR_SCALE_FILTER_BILINEAR .filter_mode = rc.mag_filter ? WLR_SCALE_FILTER_BILINEAR
: WLR_SCALE_FILTER_NEAREST, : WLR_SCALE_FILTER_NEAREST,
}; };
wlr_render_pass_add_texture(tmp_render_pass, &opts); wlr_render_pass_add_texture(tmp_render_pass, &opts);
@ -266,18 +266,17 @@ void
magnify_set_scale(struct server *server, enum magnify_dir dir) magnify_set_scale(struct server *server, enum magnify_dir dir)
{ {
struct output *output = output_nearest_to_cursor(server); struct output *output = output_nearest_to_cursor(server);
struct theme *theme = server->theme;
if (dir == MAGNIFY_INCREASE) { if (dir == MAGNIFY_INCREASE) {
if (magnify_on) { if (magnify_on) {
mag_scale += theme->mag_increment; mag_scale += rc.mag_increment;
} else { } else {
magnify_on = true; magnify_on = true;
mag_scale = 1.0 + theme->mag_increment; mag_scale = 1.0 + rc.mag_increment;
} }
} else { } else {
if (magnify_on && mag_scale > 1.0 + theme->mag_increment) { if (magnify_on && mag_scale > 1.0 + rc.mag_increment) {
mag_scale -= theme->mag_increment; mag_scale -= rc.mag_increment;
} else { } else {
magnify_on = false; magnify_on = false;
} }

View file

@ -573,13 +573,8 @@ theme_builtin(struct theme *theme, struct server *server)
theme->snapping_overlay_edge.border_color[0][0] = FLT_MIN; theme->snapping_overlay_edge.border_color[0][0] = FLT_MIN;
/* magnifier */ /* magnifier */
theme->mag_scale = 2;
theme->mag_width = 400;
theme->mag_height = 400;
parse_hexstr("#ff0000", theme->mag_border_color); parse_hexstr("#ff0000", theme->mag_border_color);
theme->mag_border_width = 1; theme->mag_border_width = 1;
theme->mag_filter = true;
theme->mag_increment = 0.2;
} }
static void static void
@ -836,27 +831,12 @@ entry(struct theme *theme, const char *key, const char *value)
parse_hexstrs(value, theme->snapping_overlay_edge.border_color); parse_hexstrs(value, theme->snapping_overlay_edge.border_color);
} }
if (match_glob(key, "magnifier.init-scale")) {
theme->mag_scale = atoi(value);
}
if (match_glob(key, "magnifier.width")) {
theme->mag_width = atoi(value);
}
if (match_glob(key, "magnifier.height")) {
theme->mag_height = atoi(value);
}
if (match_glob(key, "magnifier.border.width")) { if (match_glob(key, "magnifier.border.width")) {
theme->mag_border_width = atoi(value); theme->mag_border_width = atoi(value);
} }
if (match_glob(key, "magnifier.border.color")) { if (match_glob(key, "magnifier.border.color")) {
parse_hexstr(value, theme->mag_border_color); parse_hexstr(value, theme->mag_border_color);
} }
if (match_glob(key, "magnifier.filter")) {
theme->mag_filter = atoi(value);
}
if (match_glob(key, "magnifier.increment")) {
set_float(value, &theme->mag_increment);
}
} }
static void static void