diff --git a/pysollib/games/mahjongg/mahjongg.py b/pysollib/games/mahjongg/mahjongg.py
index 19e47f43..863fab62 100644
--- a/pysollib/games/mahjongg/mahjongg.py
+++ b/pysollib/games/mahjongg/mahjongg.py
@@ -389,8 +389,13 @@ class AbstractMahjonggGame(Game):
             d_x = cs.SHADOW_XOFFSET
             d_y = cs.SHADOW_YOFFSET
             if self.preview:
+                size_cap, r = 100, 2
+                if l.CW // r > size_cap or l.CH // r > size_cap:
+                    r = max(l.CW, l.CH) // size_cap
+
                 # Fixme
-                dx, dy, d_x, d_y = dx//2, dy//2, d_x//2, d_y//2
+                dx, dy, d_x, d_y = dx // r, dy // r, d_x // r, d_y // r
+
             self._delta_x, self._delta_y = dx, -dy
         else:
             dx = 3
diff --git a/pysollib/games/mahjongg/shisensho.py b/pysollib/games/mahjongg/shisensho.py
index 839a15f4..fff764c2 100644
--- a/pysollib/games/mahjongg/shisensho.py
+++ b/pysollib/games/mahjongg/shisensho.py
@@ -323,6 +323,10 @@ class AbstractShisenGame(AbstractMahjonggGame):
             d_x = 0
             d_y = 0
             self._delta_x, self._delta_y = 0, 0
+        # TODO - This should be moved to subsample logic in the future.
+        if self.preview > 1:
+            d_x /= 2
+            d_y /= 2
 
         font = self.app.getFont("canvas_default")