Index: uspace/lib/memgfx/src/memgc.c
===================================================================
--- uspace/lib/memgfx/src/memgc.c	(revision 7470d97aaec04abd08ce2ad450cda9e6ff912bd4)
+++ uspace/lib/memgfx/src/memgc.c	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
@@ -372,4 +372,5 @@
 	gfx_rect_t srect;
 	gfx_rect_t drect;
+	gfx_rect_t crect;
 	gfx_coord2_t offs;
 	gfx_coord_t x, y;
@@ -393,5 +394,6 @@
 	gfx_rect_translate(&offs, &srect, &drect);
 
-	/* XXX Clip destination rectangle?! */
+	/* Clip destination rectangle */
+	gfx_rect_clip(&drect, &mbm->mgc->clip_rect, &crect);
 
 	assert(mbm->alloc.pitch == (mbm->rect.p1.x - mbm->rect.p0.x) *
@@ -412,6 +414,6 @@
 	} else if ((mbm->flags & bmpf_color_key) == 0) {
 		/* Simple copy */
-		for (y = drect.p0.y; y < drect.p1.y; y++) {
-			for (x = drect.p0.x; x < drect.p1.x; x++) {
+		for (y = crect.p0.y; y < crect.p1.y; y++) {
+			for (x = crect.p0.x; x < crect.p1.x; x++) {
 				pixel = pixelmap_get_pixel(&smap,
 				    x - mbm->rect.p0.x - offs.x,
@@ -422,6 +424,6 @@
 	} else if ((mbm->flags & bmpf_colorize) == 0) {
 		/* Color key */
-		for (y = drect.p0.y; y < drect.p1.y; y++) {
-			for (x = drect.p0.x; x < drect.p1.x; x++) {
+		for (y = crect.p0.y; y < crect.p1.y; y++) {
+			for (x = crect.p0.x; x < crect.p1.x; x++) {
 				pixel = pixelmap_get_pixel(&smap,
 				    x - mbm->rect.p0.x - offs.x,
@@ -433,6 +435,6 @@
 	} else {
 		/* Color key & colorization */
-		for (y = drect.p0.y; y < drect.p1.y; y++) {
-			for (x = drect.p0.x; x < drect.p1.x; x++) {
+		for (y = crect.p0.y; y < crect.p1.y; y++) {
+			for (x = crect.p0.x; x < crect.p1.x; x++) {
 				pixel = pixelmap_get_pixel(&smap,
 				    x - mbm->rect.p0.x - offs.x,
@@ -445,5 +447,5 @@
 	}
 
-	mem_gc_invalidate_rect(mbm->mgc, &drect);
+	mem_gc_invalidate_rect(mbm->mgc, &crect);
 	return EOK;
 }
