-        first_draw = self._previous_area.x1 == self._previous_area.x2
-        hidden = self._hidden_tilegrid or self._hidden_by_parent
-        if not first_draw and hidden:
-            self._previous_area.x2 = self._previous_area.x1
-        elif self._moved or first_draw:
-            self._current_area.copy_into(self._previous_area)
-
-        self._moved = False
-        self._full_change = False
-        self._partial_change = False
-        if isinstance(self._pixel_shader, (Palette, ColorConverter)):
-            self._pixel_shader._finish_refresh()  # pylint: disable=protected-access
-        if isinstance(self._bitmap, (Bitmap, Shape)):
-            self._bitmap._finish_refresh()  # pylint: disable=protected-access
+        if not self._needs_refresh:
+            first_draw = self._previous_area.x1 == self._previous_area.x2
+            hidden = self._hidden_tilegrid or self._hidden_by_parent
+            if not first_draw and hidden:
+                self._previous_area.x2 = self._previous_area.x1
+            elif self._moved or first_draw:
+                self._current_area.copy_into(self._previous_area)
+
+            self._moved = False
+            self._full_change = False
+            self._partial_change = False
+            if isinstance(self._pixel_shader, (Palette, ColorConverter)):
+                self._pixel_shader._finish_refresh()  # pylint: disable=protected-access
+            if isinstance(self._bitmap, Bitmap):
+                self._bitmap._finish_refresh()  # pylint: disable=protected-access