Index: uspace/srv/hid/compositor/compositor.c
===================================================================
--- uspace/srv/hid/compositor/compositor.c	(revision c62a82757f97403f2ba31f76aafdf68ae74e4003)
+++ uspace/srv/hid/compositor/compositor.c	(revision b3222a3e98db5673c67e51e12f2286c411f5f8ec)
@@ -84,4 +84,6 @@
 static sysarg_t coord_origin;
 static pixel_t bg_color;
+static filter_t filter = filter_bilinear;
+static unsigned int filter_index = 1;
 
 typedef struct {
@@ -408,5 +410,5 @@
 
 			source_init(&source);
-			source_set_filter(&source, filter_nearest);
+			source_set_filter(&source, filter);
 			drawctx_init(&context, vp->surface);
 			drawctx_set_compose(&context, compose_over);
@@ -442,5 +444,6 @@
 
 					source_set_transform(&source, transform);
-					source_set_texture(&source, win->surface, false);
+					source_set_texture(&source, win->surface,
+					    PIXELMAP_EXTEND_TRANSPARENT_SIDES);
 					source_set_alpha(&source, PIXEL(win->opacity, 0, 0, 0));
 
@@ -1818,10 +1821,11 @@
 	    key == KC_O || key == KC_P);
 	bool kconsole_switch = (mods & KM_ALT) && (key == KC_M);
-
-	bool filter = (type == KEY_RELEASE) && (win_transform || win_resize ||
+	bool filter_switch = (mods & KM_ALT) && (key == KC_Y);
+
+	bool key_filter = (type == KEY_RELEASE) && (win_transform || win_resize ||
 	    win_opacity || win_close || win_switch || viewport_move ||
-	    viewport_change || kconsole_switch);
-
-	if (filter) {
+	    viewport_change || kconsole_switch || filter_switch);
+
+	if (key_filter) {
 		/* no-op */
 	} else if (win_transform) {
@@ -2091,4 +2095,15 @@
 		if (console_kcon())
 			active = false;
+	} else if (filter_switch) {
+		filter_index++;
+		if (filter_index > 1)
+			filter_index = 0;
+		if (filter_index == 0) {
+			filter = filter_nearest;
+		}
+		else {
+			filter = filter_bilinear;
+		}
+		comp_damage(0, 0, UINT32_MAX, UINT32_MAX);
 	} else {
 		window_event_t *event = (window_event_t *) malloc(sizeof(window_event_t));
