Index: uspace/lib/memgfx/src/memgc.c
===================================================================
--- uspace/lib/memgfx/src/memgc.c	(revision dbef30fb1faefbb940d9c7275e085e71216fe08b)
+++ uspace/lib/memgfx/src/memgc.c	(revision bc492d58e31efe00937971d94404811b78f0fb51)
@@ -284,5 +284,4 @@
 	gfx_rect_t drect;
 	gfx_coord2_t offs;
-	gfx_coord2_t dim;
 	gfx_coord_t x, y;
 	pixelmap_t smap;
@@ -305,11 +304,8 @@
 	gfx_rect_translate(&offs, &srect, &drect);
 
-	gfx_coord2_subtract(&drect.p1, &drect.p0, &dim);
-
-	assert(mbm->rect.p0.x == 0);
-	assert(mbm->rect.p0.y == 0);
-	assert(mbm->alloc.pitch == mbm->rect.p1.x * (int)sizeof(uint32_t));
-	smap.width = mbm->rect.p1.x;
-	smap.height = mbm->rect.p1.y;
+	assert(mbm->alloc.pitch == (mbm->rect.p1.x - mbm->rect.p0.x) *
+	    (int)sizeof(uint32_t));
+	smap.width = mbm->rect.p1.x - mbm->rect.p0.x;
+	smap.height = mbm->rect.p1.y - mbm->rect.p0.y;
 	smap.data = mbm->alloc.pixels;
 
@@ -324,6 +320,7 @@
 		for (y = drect.p0.y; y < drect.p1.y; y++) {
 			for (x = drect.p0.x; x < drect.p1.x; x++) {
-				pixel = pixelmap_get_pixel(&smap, x - offs.x,
-				    y - offs.y);
+				pixel = pixelmap_get_pixel(&smap,
+				    x - mbm->rect.p0.x - offs.x,
+				    y - mbm->rect.p0.y - offs.y);
 				pixelmap_put_pixel(&dmap, x, y, pixel);
 			}
@@ -332,6 +329,7 @@
 		for (y = drect.p0.y; y < drect.p1.y; y++) {
 			for (x = drect.p0.x; x < drect.p1.x; x++) {
-				pixel = pixelmap_get_pixel(&smap, x - offs.x,
-				    y - offs.y);
+				pixel = pixelmap_get_pixel(&smap,
+				    x - mbm->rect.p0.x - offs.x,
+				    y - mbm->rect.p0.y - offs.y);
 				if (pixel != mbm->key_color)
 					pixelmap_put_pixel(&dmap, x, y, pixel);
