diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 2d587ad..38e6d5a 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -109,7 +109,7 @@
 
     // Drawing
     /** True if the entire keyboard needs to be dimmed. */
-    private boolean mNeedsToDimBackground;
+    private boolean mNeedsToDimEntireKeyboard;
     /** Whether the keyboard bitmap buffer needs to be redrawn before it's blitted. **/
     private boolean mBufferNeedsUpdate;
     /** True if all keys should be drawn */
@@ -455,13 +455,16 @@
         final KeyDrawParams params = mKeyDrawParams;
 
         if (mInvalidateAllKeys || mInvalidatedKeys.isEmpty()) {
-            mInvalidatedKeysRect.set(0, 0, getWidth(), getHeight());
+            mInvalidatedKeysRect.set(0, 0, width, height);
             canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE);
             canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
             // Draw all keys.
             for (final Key key : mKeyboard.mKeys) {
                 onDrawKey(key, canvas, paint, params);
             }
+            if (mNeedsToDimEntireKeyboard) {
+                drawDimRectangle(canvas, mInvalidatedKeysRect, mBackgroundDimAlpha, paint);
+            }
         } else {
             // Draw invalidated keys.
             for (final Key key : mInvalidatedKeys) {
@@ -471,24 +474,20 @@
                 canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE);
                 canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
                 onDrawKey(key, canvas, paint, params);
+                if (mNeedsToDimEntireKeyboard) {
+                    drawDimRectangle(canvas, mInvalidatedKeysRect, mBackgroundDimAlpha, paint);
+                }
             }
         }
 
-        // Overlay a dark rectangle to dim the entire keyboard
-        if (mNeedsToDimBackground) {
-            paint.setColor(Color.BLACK);
-            paint.setAlpha(mBackgroundDimAlpha);
-            canvas.drawRect(0, 0, width, height, paint);
-        }
-
         mInvalidatedKeys.clear();
         mInvalidatedKeysRect.setEmpty();
         mInvalidateAllKeys = false;
     }
 
     public void dimEntireKeyboard(boolean dimmed) {
-        final boolean needsRedrawing = mNeedsToDimBackground != dimmed;
-        mNeedsToDimBackground = dimmed;
+        final boolean needsRedrawing = mNeedsToDimEntireKeyboard != dimmed;
+        mNeedsToDimEntireKeyboard = dimmed;
         if (needsRedrawing) {
             invalidateAllKeys();
         }
@@ -809,6 +808,13 @@
         canvas.translate(-x, -y);
     }
 
+    // Overlay a dark rectangle to dim.
+    private static void drawDimRectangle(Canvas canvas, Rect rect, int alpha, Paint paint) {
+        paint.setColor(Color.BLACK);
+        paint.setAlpha(alpha);
+        canvas.drawRect(rect, paint);
+    }
+
     public Paint newDefaultLabelPaint() {
         final Paint paint = new Paint();
         paint.setAntiAlias(true);
