diff --git a/defaults/defaults b/defaults/defaults index 38d34704..7deda18a 100644 --- a/defaults/defaults +++ b/defaults/defaults @@ -77,3 +77,4 @@ wrap_resistance=10 wrap_windows=true wrap_workspaces=false zoom_desktop=true +zoom_desktop_pixelated=false diff --git a/src/compositor.c b/src/compositor.c index 4ebbf9ab..53dfdb55 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -3300,7 +3300,8 @@ recenter_zoomed_area (ScreenInfo *screen_info, int x_root, int y_root) screen_info->transform.matrix[1][2] = (yp << 16); } - if (zf > (1 << 14) && zf < (1 << 16)) + if (!screen_info->params->zoom_desktop_pixelated + && zf > (1 << 14) && zf < (1 << 16)) { #ifdef HAVE_EPOXY if (screen_info->use_glx) @@ -4193,8 +4194,16 @@ void compositorZoomIn (ScreenInfo *screen_info, XfwmEventButton *event) { #ifdef HAVE_COMPOSITOR - screen_info->transform.matrix[0][0] -= 4096; - screen_info->transform.matrix[1][1] -= 4096; + if (screen_info->params->zoom_desktop_pixelated) + { + screen_info->transform.matrix[0][0] >>= 1; + screen_info->transform.matrix[1][1] >>= 1; + } + else + { + screen_info->transform.matrix[0][0] -= 4096; + screen_info->transform.matrix[1][1] -= 4096; + } if (screen_info->transform.matrix[0][0] < (1 << 10)) { @@ -4229,8 +4238,16 @@ compositorZoomOut (ScreenInfo *screen_info, XfwmEventButton *event) /* don't do anything if the user disabled the zoom feature */ if (screen_info->zoomed) { - screen_info->transform.matrix[0][0] += 4096; - screen_info->transform.matrix[1][1] += 4096; + if (screen_info->params->zoom_desktop_pixelated) + { + screen_info->transform.matrix[0][0] <<= 1; + screen_info->transform.matrix[1][1] <<= 1; + } + else + { + screen_info->transform.matrix[0][0] += 4096; + screen_info->transform.matrix[1][1] += 4096; + } if (screen_info->transform.matrix[0][0] >= (1 << 16)) { diff --git a/src/settings.c b/src/settings.c index ccb14319..2c23c2ca 100644 --- a/src/settings.c +++ b/src/settings.c @@ -746,6 +746,7 @@ loadSettings (ScreenInfo *screen_info) {"wrap_windows", NULL, G_TYPE_BOOLEAN, TRUE}, {"wrap_workspaces", NULL, G_TYPE_BOOLEAN, TRUE}, {"zoom_desktop", NULL, G_TYPE_BOOLEAN, TRUE}, + {"zoom_desktop_pixelated", NULL, G_TYPE_BOOLEAN, TRUE}, {NULL, NULL, G_TYPE_INVALID, FALSE} }; @@ -850,6 +851,8 @@ loadSettings (ScreenInfo *screen_info) getBoolValue ("wrap_workspaces", rc); screen_info->params->zoom_desktop = getBoolValue ("zoom_desktop", rc); + screen_info->params->zoom_desktop_pixelated = + getBoolValue ("zoom_desktop_pixelated", rc); screen_info->params->wrap_layout = getBoolValue ("wrap_layout", rc); @@ -1301,6 +1304,10 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_ { screen_info->params->zoom_desktop = g_value_get_boolean (value); } + else if (!strcmp (name, "zoom_desktop_pixelated")) + { + screen_info->params->zoom_desktop_pixelated = g_value_get_boolean (value); + } else if (!strcmp (name, "wrap_windows")) { screen_info->params->wrap_windows = g_value_get_boolean (value); diff --git a/src/settings.h b/src/settings.h index f20c6db4..e359ddd7 100644 --- a/src/settings.h +++ b/src/settings.h @@ -245,6 +245,7 @@ struct _XfwmParams gboolean wrap_windows; gboolean wrap_workspaces; gboolean zoom_desktop; + gboolean zoom_desktop_pixelated; }; gboolean loadSettings (ScreenInfo *);