wlt: terminal: zoom font on ctrl+plus/minus
We now create the next bigger/smaller font on ctrl+plus/minus keyboard input. This is currently done by integer-steps but may be changed to smaller steps. You can currently use the DPI values to control the step-size, even though this is an ugly hack. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
a610e02057
commit
1072b8cb76
@ -60,6 +60,7 @@ struct wlt_terminal {
|
||||
struct ev_fd *pty_fd;
|
||||
bool pty_open;
|
||||
|
||||
struct kmscon_font_attr font_attr;
|
||||
struct kmscon_font *font_normal;
|
||||
unsigned int cols;
|
||||
unsigned int rows;
|
||||
@ -312,6 +313,8 @@ static bool widget_key(struct wlt_widget *widget, unsigned int mask,
|
||||
{
|
||||
struct wlt_terminal *term = data;
|
||||
uint32_t ucs4;
|
||||
struct kmscon_font *font;
|
||||
int ret;
|
||||
|
||||
if (handled || state != WL_KEYBOARD_KEY_STATE_PRESSED)
|
||||
return false;
|
||||
@ -343,6 +346,43 @@ static bool widget_key(struct wlt_widget *widget, unsigned int mask,
|
||||
return true;
|
||||
}
|
||||
|
||||
if (SHL_HAS_BITS(mask, SHL_CONTROL_MASK) &&
|
||||
sym == XKB_KEY_plus) {
|
||||
if (term->font_attr.points + 1 < term->font_attr.points)
|
||||
return true;
|
||||
|
||||
++term->font_attr.points;
|
||||
ret = kmscon_font_find(&font, &term->font_attr,
|
||||
wlt_conf.font_engine);
|
||||
if (ret) {
|
||||
--term->font_attr.points;
|
||||
log_error("cannot create font");
|
||||
} else {
|
||||
kmscon_font_unref(term->font_normal);
|
||||
term->font_normal = font;
|
||||
wlt_window_schedule_redraw(term->wnd);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (SHL_HAS_BITS(mask, SHL_CONTROL_MASK) &&
|
||||
sym == XKB_KEY_minus) {
|
||||
if (term->font_attr.points - 1 < 1)
|
||||
return true;
|
||||
|
||||
--term->font_attr.points;
|
||||
ret = kmscon_font_find(&font, &term->font_attr,
|
||||
wlt_conf.font_engine);
|
||||
if (ret) {
|
||||
++term->font_attr.points;
|
||||
log_error("cannot create font");
|
||||
} else {
|
||||
kmscon_font_unref(term->font_normal);
|
||||
term->font_normal = font;
|
||||
wlt_window_schedule_redraw(term->wnd);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (tsm_vte_handle_keyboard(term->vte, sym, mask, ucs4)) {
|
||||
tsm_screen_sb_reset(term->scr);
|
||||
wlt_window_schedule_redraw(term->wnd);
|
||||
@ -395,7 +435,6 @@ int wlt_terminal_new(struct wlt_terminal **out, struct wlt_window *wnd)
|
||||
{
|
||||
struct wlt_terminal *term;
|
||||
int ret;
|
||||
struct kmscon_font_attr attr = { "", 0, 20, false, false, 0, 0 };
|
||||
|
||||
if (!out || !wnd)
|
||||
return -EINVAL;
|
||||
@ -409,12 +448,18 @@ int wlt_terminal_new(struct wlt_terminal **out, struct wlt_window *wnd)
|
||||
term->cols = 80;
|
||||
term->rows = 24;
|
||||
|
||||
attr.ppi = wlt_conf.font_ppi;
|
||||
attr.points = wlt_conf.font_size;
|
||||
strncpy(attr.name, wlt_conf.font_name, KMSCON_FONT_MAX_NAME - 1);
|
||||
attr.name[KMSCON_FONT_MAX_NAME - 1] = 0;
|
||||
term->font_attr.ppi = wlt_conf.font_ppi;
|
||||
term->font_attr.points = wlt_conf.font_size;
|
||||
term->font_attr.bold = false;
|
||||
term->font_attr.italic = false;
|
||||
term->font_attr.width = 0;
|
||||
term->font_attr.height = 0;
|
||||
strncpy(term->font_attr.name, wlt_conf.font_name,
|
||||
KMSCON_FONT_MAX_NAME - 1);
|
||||
term->font_attr.name[KMSCON_FONT_MAX_NAME - 1] = 0;
|
||||
|
||||
ret = kmscon_font_find(&term->font_normal, &attr, wlt_conf.font_engine);
|
||||
ret = kmscon_font_find(&term->font_normal, &term->font_attr,
|
||||
wlt_conf.font_engine);
|
||||
if (ret) {
|
||||
log_error("cannot create font");
|
||||
goto err_free;
|
||||
|
Loading…
x
Reference in New Issue
Block a user