commit 9ce78850e539e34b2c555c23eb2674f8bf0ec7b7
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Aug 6 00:38:42 2021 +0200

    Generalize FactorySticker - make it possible to draw stickers whose sides are curved.
    Convert the Ivy to use this new functionality.

diff --git a/src/main/java/org/distorted/helpers/FactorySticker.java b/src/main/java/org/distorted/helpers/FactorySticker.java
index 5bc01686..86fea6e2 100644
--- a/src/main/java/org/distorted/helpers/FactorySticker.java
+++ b/src/main/java/org/distorted/helpers/FactorySticker.java
@@ -52,6 +52,8 @@ public class FactorySticker
     REX_S = (float)(1/Math.sqrt(1+4*G*G/(F*F)));
     }
 
+  private float mOX, mOY, mR;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private FactorySticker()
@@ -81,6 +83,129 @@ public class FactorySticker
     return ret;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private float getAngle(float[] angles, int index)
+    {
+    return angles==null ? 0 : angles[index];
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void computeCircleCoords(float lX,float lY, float rX, float rY, float alpha)
+    {
+    float ctg= 1.0f/((float)Math.tan(alpha));
+    mOX = 0.5f*(lX+rX) + ctg*0.5f*(lY-rY);
+    mOY = 0.5f*(lY+rY) - ctg*0.5f*(lX-rX);
+    float dx = mOX-lX;
+    float dy = mOY-lY;
+    mR = (float)Math.sqrt(dx*dx+dy*dy);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// circle1: center (x1,y1) radius r1; circle2: center (x2,y2) radius r2.
+// Guaranteed to intersect in two points. Find the intersection. Which one? the one that's closer
+// to (nearx,neary).
+
+  private void findCircleIntersection(float x1,float y1, float r1, float x2, float y2, float r2, float nearx, float neary )
+    {
+    float dx = x2-x1;
+    float dy = y2-y1;
+    float d = (float)Math.sqrt(dx*dx+dy*dy);
+
+    if( d>0 )
+      {
+      float Dx = dx/d;
+      float Dy = dy/d;
+      float cos = (r1*r1+d*d-r2*r2)/(2*r1*d);
+      float sin = (float)Math.sqrt(1-cos*cos);
+
+      float ox1 = x1 + r1*cos*Dx + r1*sin*Dy;
+      float oy1 = y1 + r1*cos*Dy - r1*sin*Dx;
+      float ox2 = x1 + r1*cos*Dx - r1*sin*Dy;
+      float oy2 = y1 + r1*cos*Dy + r1*sin*Dx;
+
+      dx = nearx-ox1;
+      dy = neary-oy1;
+      float d1 = dx*dx+dy*dy;
+      dx = nearx-ox2;
+      dy = neary-oy2;
+      float d2 = dx*dx+dy*dy;
+
+      if( d1<d2 )
+        {
+        mOX = ox1;
+        mOY = oy1;
+        }
+      else
+        {
+        mOX = ox2;
+        mOY = oy2;
+        }
+      }
+    else
+      {
+      mOX = x1;
+      mOY = y1;
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void drawCurrCurvVertex(Canvas canvas, Paint paint, int left, int top, float r, float stroke, float pX, float pY, float cX, float cY, float nX, float nY, float pA, float cA)
+    {
+    pX = (0.5f+pX)*TEXTURE_HEIGHT;
+    pY = (0.5f-pY)*TEXTURE_HEIGHT;
+    cX = (0.5f+cX)*TEXTURE_HEIGHT;
+    cY = (0.5f-cY)*TEXTURE_HEIGHT;
+    nX = (0.5f+nX)*TEXTURE_HEIGHT;
+    nY = (0.5f-nY)*TEXTURE_HEIGHT;
+
+    computeCircleCoords(pX,pY,cX,cY,pA);
+    float o1x = mOX;
+    float o1y = mOY;
+    float r1  = mR;
+    computeCircleCoords(cX,cY,nX,nY,cA);
+    float o2x = mOX;
+    float o2y = mOY;
+    float r2  = mR;
+
+    float dx = o1x-pX;
+    float dy = o1y-pY;
+    float startA = computeAngle(dy,dx);
+    float sweepA = 2*pA;
+
+    startA *= 180/(Math.PI);
+    sweepA *= 180/(Math.PI);
+
+
+
+android.util.Log.e("D", "o1x="+o1x+" o1y="+o1y+" r1="+r1+" stA="+startA+" swA="+sweepA);
+
+
+    canvas.drawArc( left+o1x-r1, top+o1y-r1, left+o1x+r1, top+o1y+r1, startA, sweepA, false, paint);
+
+    float r3  = r*TEXTURE_HEIGHT + stroke/2;
+    findCircleIntersection(o1x,o1y,r1-r3,o2x,o2y,r2-r3,cX,cY);
+    float o3x = mOX;
+    float o3y = mOY;
+
+    dx = o1x-o3x;
+    dy = o1y-o3y;
+    startA = computeAngle(dy,dx);
+    dx = o2x-o3x;
+    dy = o2y-o3y;
+    float endA = computeAngle(dy,dx);
+
+    sweepA = endA-startA;
+    if( sweepA<0 ) sweepA += 2*Math.PI;
+
+    startA *= 180/(Math.PI);
+    sweepA *= 180/(Math.PI);
+
+    canvas.drawArc( left+o3x-r3, top+o3y-r3, left+o3x+r3, top+o3y+r3, startA, sweepA, false, paint);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private void drawCurrVertex(Canvas canvas, Paint paint, int left, int top, float r, float stroke, float pX, float pY, float cX, float cY, float nX, float nY)
@@ -149,7 +274,7 @@ public class FactorySticker
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC
 
-  public void drawRoundedPolygon(Canvas canvas, Paint paint, int left, int top, float[] vertices, float stroke, int color, float radius)
+  public void drawRoundedPolygon(Canvas canvas, Paint paint, int left, int top, float[] vertices, float[] angles, float stroke, int color, float radius)
     {
     stroke *= TEXTURE_HEIGHT;
 
@@ -173,15 +298,28 @@ public class FactorySticker
     float nextX = vertices[2];
     float nextY = vertices[3];
 
+    float prevA = getAngle(angles,numVertices-1);
+    float currA = getAngle(angles,0);
+
     for(int vert=0; vert<numVertices; vert++)
       {
-      drawCurrVertex(canvas, paint, left, top, radius, stroke, prevX,prevY,currX,currY,nextX,nextY);
+      if( prevA==0 )
+        {
+        drawCurrVertex(canvas, paint, left, top, radius, stroke, prevX,prevY,currX,currY,nextX,nextY);
+        }
+      else
+        {
+        drawCurrCurvVertex(canvas, paint, left, top, radius, stroke, prevX,prevY,currX,currY,nextX,nextY,prevA,currA);
+        }
 
       prevX = currX;
       prevY = currY;
       currX = nextX;
       currY = nextY;
 
+      prevA = currA;
+      currA = getAngle(angles, vert==numVertices-1 ? 0 : vert+1);
+
       if( 2*(vert+2)+1 < length )
         {
         nextX = vertices[2*(vert+2)  ];
@@ -195,85 +333,6 @@ public class FactorySticker
       }
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void drawIvyCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
-    {
-    paint.setAntiAlias(true);
-    paint.setColor(color);
-    paint.setStyle(Paint.Style.FILL);
-    canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
-
-    paint.setColor(COLOR_BLACK);
-    paint.setStyle(Paint.Style.STROKE);
-    paint.setStrokeWidth(IVY_C*stroke*TEXTURE_HEIGHT);
-
-    float tmp1 = ((IVY_D-0.5f)-IVY_M)*IVY_C;
-    float cx1 = TEXTURE_HEIGHT*(tmp1 + 0.5f);
-    float cy1 = TEXTURE_HEIGHT*(0.5f - tmp1);
-
-    float halfL1 = IVY_C*TEXTURE_HEIGHT*(1.0f-2*IVY_D);
-
-    canvas.drawArc( left+cx1-halfL1, top+cy1-halfL1, left+cx1+halfL1, top+cy1+halfL1, 270, 90, false, paint);
-
-    float tmp2 = (+0.5f-IVY_M)*IVY_C;
-    float tmp3 = (-0.5f-IVY_M)*IVY_C;
-
-    float x0 = TEXTURE_HEIGHT*(+tmp2 + 0.5f);
-    float y0 = TEXTURE_HEIGHT*(-tmp3 + 0.5f);
-    float x1 = TEXTURE_HEIGHT*(+tmp2 + 0.5f);
-    float y1 = TEXTURE_HEIGHT*(-tmp2 + 0.5f);
-    float x2 = TEXTURE_HEIGHT*(+tmp3 + 0.5f);
-    float y2 = TEXTURE_HEIGHT*(-tmp2 + 0.5f);
-
-    canvas.drawLine(left+x0,top+y0,left+x1,top+y1,paint);
-    canvas.drawLine(left+x1,top+y1,left+x2,top+y2,paint);
-
-    float tmp4 = ((0.5f-stroke/2-radius/2)-IVY_M)*IVY_C;
-    float cx2 = TEXTURE_HEIGHT*(tmp4 + 0.5f);
-    float cy2 = TEXTURE_HEIGHT*(0.5f - tmp4);
-
-    float halfL2 = IVY_C*TEXTURE_HEIGHT*radius;
-
-    paint.setStrokeWidth(IVY_C*radius*TEXTURE_HEIGHT);
-    canvas.drawArc( left+cx2-halfL2, top+cy2-halfL2, left+cx2+halfL2, top+cy2+halfL2, 270, 90, false, paint);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void drawIvyCenterSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
-    {
-    paint.setAntiAlias(true);
-    paint.setColor(color);
-    paint.setStyle(Paint.Style.FILL);
-    canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
-
-    paint.setColor(COLOR_BLACK);
-    paint.setStyle(Paint.Style.STROKE);
-    paint.setStrokeWidth(stroke*TEXTURE_HEIGHT);
-
-    float cx1 = TEXTURE_HEIGHT*IVY_D;
-    float cy1 = TEXTURE_HEIGHT*(1-IVY_D);
-    float cx2 = TEXTURE_HEIGHT*(1.0f-IVY_D);
-    float cy2 = TEXTURE_HEIGHT*IVY_D;
-
-    float halfL = TEXTURE_HEIGHT*(1.0f - 2*IVY_D);
-
-    canvas.drawArc( left+cx1-halfL, top+cy1-halfL, left+cx1+halfL, top+cy1+halfL, 270, 90, false, paint);
-    canvas.drawArc( left+cx2-halfL, top+cy2-halfL, left+cx2+halfL, top+cy2+halfL,  90, 90, false, paint);
-
-    float tmp = TEXTURE_HEIGHT*(IVY_D+stroke*0.5f+radius*0.5f);
-    float cx3 = tmp;
-    float cy3 = tmp;
-    float cx4 = TEXTURE_HEIGHT - cx3;
-    float cy4 = TEXTURE_HEIGHT - cy3;
-    float halfR = TEXTURE_HEIGHT*radius;
-
-    paint.setStrokeWidth(radius*TEXTURE_HEIGHT);
-    canvas.drawArc( left+cx3-halfR, top+cy3-halfR, left+cx3+halfR, top+cy3+halfR, 180, 90, false, paint);
-    canvas.drawArc( left+cx4-halfR, top+cy4-halfR, left+cx4+halfR, top+cy4+halfR,   0, 90, false, paint);
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void drawRexCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius1, float radius2)
diff --git a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
index 950ce39c..9d65ce42 100644
--- a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
@@ -384,7 +384,7 @@ abstract class TwistyBandagedAbstract extends TwistyObject
     float[] vertices = { -X,-Y, +X,-Y, +X,+Y, -X,+Y};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[color], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, null, S, FACE_COLORS[color], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index 184ba1e4..3ee8710a 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -185,7 +185,7 @@ class TwistyCube extends TwistyObject
     float S = 0.08f;
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index e16f9b36..5824e19a 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -497,7 +497,7 @@ public class TwistyDiamond extends TwistyObject
     float S = 0.07f;
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index e68f1e75..e8821e03 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -219,7 +219,7 @@ public abstract class TwistyDino extends TwistyObject
     float S = 0.05f;
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objects/TwistyHelicopter.java
index a07eed6b..97d45d1e 100644
--- a/src/main/java/org/distorted/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objects/TwistyHelicopter.java
@@ -381,7 +381,7 @@ public class TwistyHelicopter extends TwistyObject
     float S = 0.05f;
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index 826b5494..80c72748 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -396,16 +396,34 @@ public class TwistyIvy extends TwistyObject
     {
     int COLORS = FACE_COLORS.length;
     FactorySticker factory = FactorySticker.getInstance();
-    float S = 0.08f;
-    float R = 0.12f;
 
     if( face<COLORS )
       {
-      factory.drawIvyCornerSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], S, R);
+      float S = 0.03f;
+      float R = 0.02f;
+
+      float ANGLE = (float)(Math.PI/4);
+
+      float A = (+0.5f-IVY_M)*IVY_C;
+      float B = (-0.5f-IVY_M)*IVY_C;
+
+      float[] vertices = new float[] { A, B, A, A, B, A };
+      float[] angles   = new float[] { 0, 0, ANGLE };
+
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], R);
       }
     else
       {
-      factory.drawIvyCenterSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], S, R);
+      float S = 0.08f;
+      float R = 0.06f;
+
+      float ANGLE = (float)(Math.PI/4);
+      float A = 0.50f-IVY_D;
+
+      float[] vertices = new float[] { -A, A, A, -A };
+      float[] angles   = new float[] { ANGLE, ANGLE };
+
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], R);
       }
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistyJing.java b/src/main/java/org/distorted/objects/TwistyJing.java
index d0f413af..9c840fde 100644
--- a/src/main/java/org/distorted/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objects/TwistyJing.java
@@ -384,7 +384,7 @@ public class TwistyJing extends TwistyObject
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyKilominx.java b/src/main/java/org/distorted/objects/TwistyKilominx.java
index d5347a5e..4d85e749 100644
--- a/src/main/java/org/distorted/objects/TwistyKilominx.java
+++ b/src/main/java/org/distorted/objects/TwistyKilominx.java
@@ -646,7 +646,7 @@ public class TwistyKilominx extends TwistyMinx
       float cy = STICKERS[0][3]/CENTER_CORR;
 
       FactorySticker factory = FactorySticker.getInstance();
-      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face%NUM_FACES], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face%NUM_FACES], R);
       canvas.drawCircle(left+(0.5f+cx)*TEXTURE_HEIGHT, top+(0.5f-cy)*TEXTURE_HEIGHT, 0.05f*TEXTURE_HEIGHT, paint);
       }
     else if( variant==0 ) // corner
@@ -654,14 +654,14 @@ public class TwistyKilominx extends TwistyMinx
       float R = 0.10f;
       float S = 0.11f;
       FactorySticker factory = FactorySticker.getInstance();
-      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[1], S, FACE_COLORS[face%COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[1], null, S, FACE_COLORS[face%COLORS], R);
       }
     else  // edge
       {
       float R = 0.10f;
       float S = 0.10f;
       FactorySticker factory = FactorySticker.getInstance();
-      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[2], S, FACE_COLORS[face%COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[2], null, S, FACE_COLORS[face%COLORS], R);
       }
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objects/TwistyMegaminx.java
index bc449022..89b055ca 100644
--- a/src/main/java/org/distorted/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objects/TwistyMegaminx.java
@@ -555,7 +555,7 @@ public class TwistyMegaminx extends TwistyMinx
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index f0c3e7f3..91a5bc7b 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -364,7 +364,7 @@ public class TwistyPyraminx extends TwistyObject
     float S = 0.08f;
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index 97d230e9..4b537315 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -386,7 +386,7 @@ public class TwistyRedi extends TwistyObject
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyRex.java b/src/main/java/org/distorted/objects/TwistyRex.java
index 3adafeea..b3d4f6fb 100644
--- a/src/main/java/org/distorted/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objects/TwistyRex.java
@@ -567,7 +567,7 @@ public class TwistyRex extends TwistyObject
     else if( face<2*COLORS )
       {
       float[] vertices = { -REX_D,0.0f, 0.0f, -REX_D, +REX_D, 0.0f, 0.0f, +REX_D};
-      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S1, FACE_COLORS[face%COLORS], R4);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, null, S1, FACE_COLORS[face%COLORS], R4);
       }
     else
       {
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index 531cd56a..208f44a9 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -586,7 +586,7 @@ public class TwistySkewb extends TwistyObject
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistySquare1.java b/src/main/java/org/distorted/objects/TwistySquare1.java
index 75899c5a..10b62f44 100644
--- a/src/main/java/org/distorted/objects/TwistySquare1.java
+++ b/src/main/java/org/distorted/objects/TwistySquare1.java
@@ -239,7 +239,7 @@ class TwistySquare1 extends TwistySquare
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistySquare2.java b/src/main/java/org/distorted/objects/TwistySquare2.java
index 22491d0d..fafdf34c 100644
--- a/src/main/java/org/distorted/objects/TwistySquare2.java
+++ b/src/main/java/org/distorted/objects/TwistySquare2.java
@@ -244,7 +244,7 @@ class TwistySquare2 extends TwistySquare
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyUltimate.java b/src/main/java/org/distorted/objects/TwistyUltimate.java
index 5a762456..f24dbd96 100644
--- a/src/main/java/org/distorted/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objects/TwistyUltimate.java
@@ -357,7 +357,7 @@ class TwistyUltimate extends TwistyObject
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
