switch to enum
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp
index 7b7533c..8233fa4 100644
--- a/include/rive/artboard.hpp
+++ b/include/rive/artboard.hpp
@@ -66,7 +66,13 @@
         void onDirty(ComponentDirt dirt) override;
 
         bool advance(double elapsedSeconds);
-        void draw(Renderer* renderer, bool drawBackground = true);
+        
+        enum class DrawOption {
+            kNormal,
+            kHideBG,
+            kHideFG,
+        };
+        void draw(Renderer* renderer, DrawOption = DrawOption::kNormal);
 
         CommandPath* clipPath() const { return m_ClipPath; }
         CommandPath* backgroundPath() const { return m_BackgroundPath; }
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 0bbca01..f060d11 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -452,7 +452,7 @@
     return updateComponents();
 }
 
-void Artboard::draw(Renderer* renderer, bool drawBackground)
+void Artboard::draw(Renderer* renderer, DrawOption option)
 {
     renderer->save();
     if (clip())
@@ -468,7 +468,7 @@
         renderer->transform(artboardTransform);
     }
 
-    if (drawBackground)
+    if (option != DrawOption::kHideBG)
     {
         for (auto shapePaint : m_ShapePaints)
         {
@@ -476,14 +476,17 @@
         }
     }
 
-    for (auto drawable = m_FirstDrawable; drawable != nullptr;
-         drawable = drawable->prev)
+    if (option != DrawOption::kHideFG)
     {
-        if (drawable->isHidden())
+        for (auto drawable = m_FirstDrawable; drawable != nullptr;
+             drawable = drawable->prev)
         {
-            continue;
+            if (drawable->isHidden())
+            {
+                continue;
+            }
+            drawable->draw(renderer);
         }
-        drawable->draw(renderer);
     }
 
     renderer->restore();