introduce ColorInt
diff --git a/include/rive/math/color.hpp b/include/rive/math/color.hpp
index 2cd3676..94bf314 100644
--- a/include/rive/math/color.hpp
+++ b/include/rive/math/color.hpp
@@ -89,4 +89,4 @@
         float a() const { return m_Buffer[3]; }
     };
 } // namespace rive
-#endif
\ No newline at end of file
+#endif
diff --git a/include/rive/renderer.hpp b/include/rive/renderer.hpp
index 9992de3..db35ebb 100644
--- a/include/rive/renderer.hpp
+++ b/include/rive/renderer.hpp
@@ -1,6 +1,7 @@
 #ifndef _RIVE_RENDERER_HPP_
 #define _RIVE_RENDERER_HPP_
 
+#include "rive/shapes/paint/color.hpp"
 #include "rive/command_path.hpp"
 #include "rive/layout.hpp"
 #include "rive/math/aabb.hpp"
@@ -26,7 +27,7 @@
     {
     public:
         virtual void style(RenderPaintStyle style) = 0;
-        virtual void color(unsigned int value) = 0;
+        virtual void color(ColorInt value) = 0;
         virtual void thickness(float value) = 0;
         virtual void join(StrokeJoin value) = 0;
         virtual void cap(StrokeCap value) = 0;
@@ -34,7 +35,7 @@
 
         virtual void linearGradient(float sx, float sy, float ex, float ey) = 0;
         virtual void radialGradient(float sx, float sy, float ex, float ey) = 0;
-        virtual void addStop(unsigned int color, float stop) = 0;
+        virtual void addStop(ColorInt color, float stop) = 0;
         virtual void completeGradient() = 0;
         virtual ~RenderPaint() {}
     };
@@ -172,4 +173,4 @@
     extern RenderPaint* makeRenderPaint();
     extern RenderImage* makeRenderImage();
 } // namespace rive
-#endif
\ No newline at end of file
+#endif
diff --git a/include/rive/shapes/paint/color.hpp b/include/rive/shapes/paint/color.hpp
index 298f714..740c7ba 100644
--- a/include/rive/shapes/paint/color.hpp
+++ b/include/rive/shapes/paint/color.hpp
@@ -1,27 +1,30 @@
 #ifndef _RIVE_PAINT_COLOR_HPP_
 #define _RIVE_PAINT_COLOR_HPP_
 #include <cmath>
+#include <cstdint>
 
 namespace rive
 {
-    unsigned int colorARGB(int a, int r, int g, int b);
+    using ColorInt = uint32_t;
 
-    unsigned int colorRed(unsigned int value);
+    ColorInt colorARGB(int a, int r, int g, int b);
 
-    unsigned int colorGreen(unsigned int value);
+    unsigned int colorRed(ColorInt value);
 
-    unsigned int colorBlue(unsigned int value);
+    unsigned int colorGreen(ColorInt value);
 
-    unsigned int colorAlpha(unsigned int value);
+    unsigned int colorBlue(ColorInt value);
+
+    unsigned int colorAlpha(ColorInt value);
 
     float colorOpacity(unsigned int value);
 
-    unsigned int colorWithAlpha(unsigned int value, unsigned int a);
+    ColorInt colorWithAlpha(ColorInt value, unsigned int a);
 
-    unsigned int colorWithOpacity(unsigned int value, float opacity);
+    ColorInt colorWithOpacity(ColorInt value, float opacity);
 
-    unsigned int colorModulateOpacity(unsigned int value, float opacity);
+    ColorInt colorModulateOpacity(ColorInt value, float opacity);
 
-    unsigned int colorLerp(unsigned int from, unsigned int to, float mix);
+    ColorInt colorLerp(ColorInt from, ColorInt to, float mix);
 } // namespace rive
 #endif
diff --git a/src/shapes/paint/color.cpp b/src/shapes/paint/color.cpp
index 6de2d06..06fbd52 100644
--- a/src/shapes/paint/color.cpp
+++ b/src/shapes/paint/color.cpp
@@ -10,43 +10,43 @@
                0xFFFFFFFF;
     }
 
-    unsigned int colorRed(unsigned int value)
+    unsigned int colorRed(ColorInt value)
     {
         return (0x00ff0000 & value) >> 16;
     }
 
-    unsigned int colorGreen(unsigned int value)
+    unsigned int colorGreen(ColorInt value)
     {
         return (0x0000ff00 & value) >> 8;
     }
 
-    unsigned int colorBlue(unsigned int value)
+    unsigned int colorBlue(ColorInt value)
     {
         return (0x000000ff & value) >> 0;
     }
 
-    unsigned int colorAlpha(unsigned int value)
+    unsigned int colorAlpha(ColorInt value)
     {
         return (0xff000000 & value) >> 24;
     }
 
-    float colorOpacity(unsigned int value)
+    float colorOpacity(ColorInt value)
     {
         return (float)colorAlpha(value) / 0xFF;
     }
 
-    unsigned int colorWithAlpha(unsigned int value, unsigned int a)
+    ColorInt colorWithAlpha(ColorInt value, unsigned int a)
     {
         return colorARGB(
             a, colorRed(value), colorGreen(value), colorBlue(value));
     }
 
-    unsigned int colorWithOpacity(unsigned int value, float opacity)
+    ColorInt colorWithOpacity(ColorInt value, float opacity)
     {
         return colorWithAlpha(value, std::round(255.0 * opacity));
     }
 
-    unsigned int colorModulateOpacity(unsigned int value, float opacity)
+    ColorInt colorModulateOpacity(ColorInt value, float opacity)
     {
         return colorWithAlpha(
             value, std::round(255.0f * colorOpacity(value) * opacity));
@@ -57,11 +57,11 @@
         return a * (1.0f - mix) + b * mix;
     }
 
-    unsigned int colorLerp(unsigned int from, unsigned int to, float mix)
+    ColorInt colorLerp(ColorInt from, ColorInt to, float mix)
     {
         return colorARGB(lerp(colorAlpha(from), colorAlpha(to), mix),
                          lerp(colorRed(from), colorRed(to), mix),
                          lerp(colorGreen(from), colorGreen(to), mix),
                          lerp(colorBlue(from), colorBlue(to), mix));
     }
-} // namespace rive
\ No newline at end of file
+} // namespace rive
diff --git a/src/shapes/paint/linear_gradient.cpp b/src/shapes/paint/linear_gradient.cpp
index 1b36f39..77ae49d 100644
--- a/src/shapes/paint/linear_gradient.cpp
+++ b/src/shapes/paint/linear_gradient.cpp
@@ -132,8 +132,7 @@
         return true;
     }
     for (const auto stop : m_Stops) {
-        unsigned alpha = stop->colorValue() >> 24;  // helper for this?
-        if (alpha != 0xFF) {
+        if (colorAlpha(stop->colorValue()) != 0xFF) {
             return true;
         }
     }
diff --git a/src/shapes/paint/solid_color.cpp b/src/shapes/paint/solid_color.cpp
index 6278ebc..377888e 100644
--- a/src/shapes/paint/solid_color.cpp
+++ b/src/shapes/paint/solid_color.cpp
@@ -27,12 +27,11 @@
         return;
     }
     renderPaint()->color(
-        colorModulateOpacity((unsigned int)colorValue(), renderOpacity()));
+        colorModulateOpacity(colorValue(), renderOpacity()));
 }
 
 void SolidColor::colorValueChanged() { renderOpacityChanged(); }
 
 bool SolidColor::internalIsTranslucent() const {
-    unsigned alpha = colorValue() >> 24;
-    return alpha != 0xFF;
+    return colorAlpha(colorValue()) != 0xFF;
 }