Commit 5544905926ce50e9832f79bcec805b0d26140031 Parent: 2ccab78c3deaed07f7642a92f86be29d684b5435 Author: mcol <mcol@posteo.net> Date: 2020-11-11 22:37:47 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-11-11 22:38:04 +0000 implement desk zooming, bind to M-m and M-n
src/shell.c Modified
@@ -1,6 +1,7 @@ #include <wlr/util/edges.h> #include "config.h" +#include "desk.h" #include "output.h" #include "types.h"
src/output.h Modified
@@ -17,6 +17,7 @@ struct wlr_renderer *renderer; struct view *view; struct timespec *when; + double zoom; }; void render_surface(
src/output.c Modified
@@ -34,10 +34,10 @@ // scale for HiDPI struct wlr_box box = { - .x = x * output->scale, - .y = y * output->scale, - .width = surface->current.width * output->scale, - .height = surface->current.height * output->scale, + .x = x * output->scale * rdata->zoom, + .y = y * output->scale * rdata->zoom, + .width = surface->current.width * output->scale * rdata->zoom, + .height = surface->current.height * output->scale * rdata->zoom, }; // this is where any rendering magic might happen @@ -87,6 +87,7 @@ .view = view, .renderer = renderer, .when = &now, + .zoom = desk->zoom, }; wlr_xdg_surface_for_each_surface( view->surface, render_surface, &rdata
src/input.c Modified
@@ -128,6 +128,8 @@ break; case CURSOR_PAN: + dx /= server->current_desk->zoom; + dy /= server->current_desk->zoom; wl_list_for_each(view, &server->current_desk->views, link) { view->x += dx; view->y += dy; @@ -191,6 +193,9 @@ server->seat, event->time_msec, event->orientation, event->delta, event->delta_discrete, event->source ); + if (server->cursor_mode == CURSOR_PAN) { + zoom_desk(server->current_desk, event->delta); + } } @@ -241,6 +246,14 @@ save_pan(server->current_desk); break; + case XKB_KEY_M: + zoom_desk(server->current_desk, -1); + break; + + case XKB_KEY_N: + zoom_desk(server->current_desk, 1); + break; + default: return false; }
src/desk.h Modified
@@ -9,6 +9,7 @@ void prev_desk(struct server *server); void reset_pan(struct desk *desk); void save_pan(struct desk *desk); +void zoom_desk(struct desk *desk, int dir); struct wallpaper { struct wlr_texture *texture; @@ -23,6 +24,7 @@ struct wallpaper *wallpaper; double panned_x, panned_y; int index; + double zoom; }; #endif
src/desk.c Modified
@@ -15,6 +15,7 @@ assign_colour("#5D479D", desk->background); desk->wallpaper = NULL; desk->index = num_desks; + desk->zoom = 1; num_desks++; } @@ -66,9 +67,17 @@ view->y -= desk->panned_y; } desk->panned_x = desk->panned_y = 0; + desk->zoom = 1; } void save_pan(struct desk *desk) { desk->panned_x = desk->panned_y = 0; } + + +void zoom_desk(struct desk *desk, int dir) { + /* dir > 0 ? zoom in : zoom out */ + double f = dir > 0 ? 1.015 : 1/1.015; + desk->zoom *= f; +}