diff --git a/src/com/android/launcher3/icons/LauncherIcons.java b/src/com/android/launcher3/icons/LauncherIcons.java
index 59fff62..5c6debe 100644
--- a/src/com/android/launcher3/icons/LauncherIcons.java
+++ b/src/com/android/launcher3/icons/LauncherIcons.java
@@ -16,7 +16,12 @@
 
 package com.android.launcher3.icons;
 
+import static android.graphics.Color.BLACK;
+
+import static com.android.launcher3.graphics.ThemeManager.PREF_ICON_SHAPE;
+
 import android.content.Context;
+import android.graphics.Canvas;
 import android.graphics.Path;
 import android.graphics.Rect;
 import android.graphics.drawable.AdaptiveIconDrawable;
@@ -26,6 +31,7 @@
 
 import com.android.launcher3.Flags;
 import com.android.launcher3.InvariantDeviceProfile;
+import com.android.launcher3.LauncherPrefs;
 import com.android.launcher3.graphics.IconShape;
 import com.android.launcher3.graphics.ThemeManager;
 import com.android.launcher3.pm.UserCache;
@@ -41,6 +47,12 @@
  */
 public class LauncherIcons extends BaseIconFactory implements AutoCloseable {
 
+    private static final float SEVEN_SIDED_COOKIE_SCALE = 72f / 80f;
+    private static final float FOUR_SIDED_COOKIE_SCALE = 72f / 83.4f;
+    private static final float VERY_SUNNY_SCALE = 72f / 92f;
+    private static final float DEFAULT_ICON_SCALE = 1f;
+
+
     private static final MainThreadInitializedObject<Pool> POOL =
             new MainThreadInitializedObject<>(Pool::new);
 
@@ -87,6 +99,36 @@
     }
 
     @Override
+    protected void drawAdaptiveIcon(
+            @NonNull Canvas canvas,
+            @NonNull AdaptiveIconDrawable drawable,
+            @NonNull Path overridePath
+    ) {
+        if (!Flags.enableLauncherIconShapes()) {
+            super.drawAdaptiveIcon(canvas, drawable, overridePath);
+            return;
+        }
+        String shapeKey = LauncherPrefs.get(mContext).get(PREF_ICON_SHAPE);
+        float iconScale = switch (shapeKey) {
+            case "seven_sided_cookie" -> SEVEN_SIDED_COOKIE_SCALE;
+            case "four_sided_cookie" -> FOUR_SIDED_COOKIE_SCALE;
+            case "sunny" -> VERY_SUNNY_SCALE;
+            default -> DEFAULT_ICON_SCALE;
+        };
+        canvas.clipPath(overridePath);
+        canvas.drawColor(BLACK);
+        canvas.save();
+        canvas.scale(iconScale, iconScale, canvas.getWidth() / 2f, canvas.getHeight() / 2f);
+        if (drawable.getBackground() != null) {
+            drawable.getBackground().draw(canvas);
+        }
+        if (drawable.getForeground() != null) {
+            drawable.getForeground().draw(canvas);
+        }
+        canvas.restore();
+    }
+
+    @Override
     public void close() {
         recycle();
     }
