commit 29bc084f757ff93dcccd584f8002a89dc0f6288e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Aug 6 13:48:19 2021 +0200

    Convert the last 'special' case, the Rex edge sticker, to the generic sticker mechanism.

diff --git a/src/main/java/org/distorted/helpers/FactorySticker.java b/src/main/java/org/distorted/helpers/FactorySticker.java
index 8f6a6025..4e15cda6 100644
--- a/src/main/java/org/distorted/helpers/FactorySticker.java
+++ b/src/main/java/org/distorted/helpers/FactorySticker.java
@@ -24,31 +24,12 @@ import android.graphics.Paint;
 
 import static org.distorted.objects.TwistyObject.TEXTURE_HEIGHT;
 import static org.distorted.objects.TwistyObject.COLOR_BLACK;
-import static org.distorted.objects.TwistyRex.REX_D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class FactorySticker
   {
-  private static final float SQ2 = (float)Math.sqrt(2);
-  private static final float REX_X,REX_R,REX_B,REX_A, REX_P, REX_T, REX_C, REX_S;
   private static FactorySticker mThis;
-
-  static
-    {
-    float F = REX_D*SQ2;
-    float G = (1-REX_D)*SQ2/2;
-
-    REX_X = (0.5f-REX_D*REX_D)/(2*REX_D);
-    REX_R = (float)Math.sqrt(2*REX_X*REX_X+0.5f);
-    REX_B = (float) ((180/Math.PI)*(2*Math.asin( Math.sqrt(REX_D*REX_D-REX_D+0.5f) / (2*REX_R) )));
-    REX_A = (float) ((180/Math.PI)*Math.acos(REX_X/REX_R)) - 45;
-    REX_P = 45 + REX_B/2 + REX_A;
-    REX_T = (float) ( Math.tan( (Math.PI/180)*(45-REX_P/2) ) );
-    REX_C = (float)(REX_R/Math.cos((Math.PI/180)*REX_B/2) );
-    REX_S = (float)(1/Math.sqrt(1+4*G*G/(F*F)));
-    }
-
   private float mOX, mOY, mR;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -149,7 +130,7 @@ public class FactorySticker
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  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)
+  private void drawCurrCurveV(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;
@@ -268,7 +249,7 @@ public class FactorySticker
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC
 
-  public void drawRoundedPolygon(Canvas canvas, Paint paint, int left, int top, float[] vertices, float[] angles, 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[] radii)
     {
     stroke *= TEXTURE_HEIGHT;
 
@@ -299,11 +280,11 @@ public class FactorySticker
       {
       if( prevA==0 )
         {
-        drawCurrVertex(canvas, paint, left, top, radius, stroke, prevX,prevY,currX,currY,nextX,nextY);
+        drawCurrVertex(canvas, paint, left, top, radii[vert], stroke, prevX,prevY,currX,currY,nextX,nextY);
         }
       else
         {
-        drawCurrCurvVertex(canvas, paint, left, top, radius, stroke, prevX,prevY,currX,currY,nextX,nextY,prevA,currA);
+        drawCurrCurveV(canvas, paint, left, top, radii[vert], stroke, prevX,prevY,currX,currY,nextX,nextY,prevA,currA);
         }
 
       prevX = currX;
@@ -326,97 +307,4 @@ public class FactorySticker
         }
       }
     }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void drawRexCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius1, float radius2)
-    {
-
-/*
-    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 F = REX_D*SQ2;
-    float G = (1-REX_D)*SQ2/2;
-
-    float cx1 = left + (0.5f-F/2)*TEXTURE_HEIGHT;
-    float cx2 = left + (0.5f+F/2)*TEXTURE_HEIGHT;
-    float cy  = top  + (0.5f+G/3)*TEXTURE_HEIGHT;
-
-    canvas.drawLine(cx1, cy, cx2, cy, paint);
-
-    float X   = REX_C-F/2;
-    float R1  = TEXTURE_HEIGHT*(REX_R + 0.5f*stroke);
-    float cx3 = left + (0.5f-X)*TEXTURE_HEIGHT;
-    float cx4 = left + (0.5f+X)*TEXTURE_HEIGHT;
-
-    canvas.drawArc( cx3-R1, cy-R1, cx3+R1, cy+R1, 360-REX_B/2, REX_B/2, false ,paint);
-    canvas.drawArc( cx4-R1, cy-R1, cx4+R1, cy+R1, 180        , REX_B/2, false ,paint);
-
-    float cx5 = left + (0.5f+F/2-radius2)*TEXTURE_HEIGHT;
-    float cx6 = left + (0.5f-F/2+radius2)*TEXTURE_HEIGHT;
-    float cy1 = top  + (0.5f+G/3-radius2)*TEXTURE_HEIGHT;
-    float R2  = TEXTURE_HEIGHT*radius2;
-
-    canvas.drawArc( cx5-R2, cy1-R2, cx5+R2, cy1+R2,  0, 90, false ,paint);
-    canvas.drawArc( cx6-R2, cy1-R2, cx6+R2, cy1+R2, 90, 90, false ,paint);
-
-    float cx7 = left + 0.5f*TEXTURE_HEIGHT;
-    float cy2 = top  + (0.5f-2*G/3 + radius1/REX_S)*TEXTURE_HEIGHT;
-    float R3  = TEXTURE_HEIGHT*(radius1 + 0.5f*stroke);
-    canvas.drawArc( cx7-R3, cy2-R3, cx7+R3, cy2+R3, 270-(90-REX_B/2), 180-REX_B, false ,paint);
-*/
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void drawRexEdgeSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
-    {
-    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);
-
-    final float D = ( 0.5f - (0.5f-REX_D)/3);
-    float cx1 = left+ TEXTURE_HEIGHT*(0.5f-REX_X);
-    float cy1 = top + TEXTURE_HEIGHT*(0.5f+REX_X+D);
-    float cx2 = left+ TEXTURE_HEIGHT*(0.5f+REX_X);
-    float R1  = TEXTURE_HEIGHT*REX_R;
-
-    canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 315-REX_A-REX_B, REX_B, false ,paint);
-    canvas.drawArc( cx2-R1, cy1-R1, cx2+R1, cy1+R1, 225+REX_A      , REX_B, false ,paint);
-
-    float CORR_Y = radius/12;
-    float CORR_A = 10;
-    float sin = (float)Math.sin(Math.PI*REX_P/180);
-    float cx = left + 0.5f*TEXTURE_HEIGHT;
-    float cy = top  + ( 0.5f + 2*(0.5f-REX_D)/3 -CORR_Y -radius/sin )*TEXTURE_HEIGHT;
-    float R2  = TEXTURE_HEIGHT*radius;
-
-    canvas.drawArc( cx-R2, cy-R2, cx+R2, cy+R2, 90-(REX_P-CORR_A), 2*(REX_P-CORR_A), false ,paint);
-
-    float F = 0.1f;
-    float G = 0.6f;
-    float R3  = TEXTURE_HEIGHT*radius*G*0.9f;
-    float X = G*radius/REX_T;
-    float cx4 = left + X*TEXTURE_HEIGHT;
-    float cx3 = left + (1-X)*TEXTURE_HEIGHT;
-    float cy3 = top + (0.5f - (0.5f-REX_D)/3 + G*radius - F*stroke)*TEXTURE_HEIGHT;
-
-    canvas.drawArc( cx3-R3, cy3-R3, cx3+R3, cy3+R3, 270           , 90+REX_P, false ,paint);
-    canvas.drawArc( cx4-R3, cy3-R3, cx4+R3, cy3+R3, 270-(90+REX_P), 90+REX_P, false ,paint);
-
-    float cy5 = top + D*TEXTURE_HEIGHT;
-
-    paint.setStrokeWidth((1-2*F)*stroke*TEXTURE_HEIGHT);
-    canvas.drawLine(left, cy5, left+TEXTURE_HEIGHT, cy5, paint);
-    }
   }
diff --git a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
index 9d65ce42..2fb1c1c5 100644
--- a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
@@ -378,13 +378,14 @@ abstract class TwistyBandagedAbstract extends TwistyObject
     float MAX = Math.max(X,Y);
     float R = 0.10f / MAX;
     float S = 0.08f / MAX;
+    float[] RS = new float[] {R,R,R,R};
     X /= (2*MAX);
     Y /= (2*MAX);
 
     float[] vertices = { -X,-Y, +X,-Y, +X,+Y, -X,+Y};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, null, S, FACE_COLORS[color], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, null, S, FACE_COLORS[color], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index 3ee8710a..90f51580 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -183,9 +183,10 @@ class TwistyCube extends TwistyObject
     {
     float R = 0.10f;
     float S = 0.08f;
+    float[] RS = new float[] {R,R,R,R};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index 5824e19a..ff06df4b 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -495,9 +495,10 @@ public class TwistyDiamond extends TwistyObject
     {
     float R = 0.06f;
     float S = 0.07f;
+    float[] RS = new float[] {R,R,R};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index e8821e03..01bd39a5 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -217,9 +217,10 @@ public abstract class TwistyDino extends TwistyObject
     {
     float R = 0.025f;
     float S = 0.05f;
+    float[] RS = new float[] {R,R,R};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objects/TwistyHelicopter.java
index 97d45d1e..20d14b1c 100644
--- a/src/main/java/org/distorted/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objects/TwistyHelicopter.java
@@ -379,9 +379,10 @@ public class TwistyHelicopter extends TwistyObject
     {
     float R = 0.03f;
     float S = 0.05f;
+    float[] RS = new float[] {R,R,R};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index 80c72748..568ed720 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -401,6 +401,7 @@ public class TwistyIvy extends TwistyObject
       {
       float S = 0.03f;
       float R = 0.02f;
+      float[] RS = new float[] {0,R,0};
 
       float ANGLE = (float)(Math.PI/4);
 
@@ -410,12 +411,13 @@ public class TwistyIvy extends TwistyObject
       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);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], RS);
       }
     else
       {
       float S = 0.08f;
       float R = 0.06f;
+      float[] RS = new float[] {R,R};
 
       float ANGLE = (float)(Math.PI/4);
       float A = 0.50f-IVY_D;
@@ -423,7 +425,7 @@ public class TwistyIvy extends TwistyObject
       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);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], RS);
       }
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistyJing.java b/src/main/java/org/distorted/objects/TwistyJing.java
index 9c840fde..745c2149 100644
--- a/src/main/java/org/distorted/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objects/TwistyJing.java
@@ -375,16 +375,17 @@ public class TwistyJing extends TwistyObject
     int COLORS = FACE_COLORS.length;
     int stickerType = face/COLORS;
     float R,S;
+    float[] RS;
 
     switch(stickerType)
       {
-      case 0:  R = 0.05f; S = 0.06f; break;
-      case 1:  R = 0.03f; S = 0.03f; break;
-      default: R = 0.05f; S = 0.05f; break;
+      case 0:  R = 0.05f; S = 0.06f; RS = new float[] {R,R,R,R}; break;
+      case 1:  R = 0.03f; S = 0.03f; RS = new float[] {R,R,R,R}; break;
+      default: R = 0.05f; S = 0.05f; RS = new float[] {R,R,R  }; break;
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyKilominx.java b/src/main/java/org/distorted/objects/TwistyKilominx.java
index 4d85e749..97cf63c5 100644
--- a/src/main/java/org/distorted/objects/TwistyKilominx.java
+++ b/src/main/java/org/distorted/objects/TwistyKilominx.java
@@ -642,26 +642,29 @@ public class TwistyKilominx extends TwistyMinx
       {
       float R = 0.10f;
       float S = 0.09f;
+      float[] RS = new float[] {R,R,R,R};
       float cx = STICKERS[0][2]/CENTER_CORR;
       float cy = STICKERS[0][3]/CENTER_CORR;
 
       FactorySticker factory = FactorySticker.getInstance();
-      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face%NUM_FACES], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face%NUM_FACES], RS);
       canvas.drawCircle(left+(0.5f+cx)*TEXTURE_HEIGHT, top+(0.5f-cy)*TEXTURE_HEIGHT, 0.05f*TEXTURE_HEIGHT, paint);
       }
     else if( variant==0 ) // corner
       {
       float R = 0.10f;
       float S = 0.11f;
+      float[] RS = new float[] {R,R,R,R};
       FactorySticker factory = FactorySticker.getInstance();
-      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[1], null, S, FACE_COLORS[face%COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[1], null, S, FACE_COLORS[face%COLORS], RS);
       }
     else  // edge
       {
       float R = 0.10f;
       float S = 0.10f;
+      float[] RS = new float[] {R,R,R,R};
       FactorySticker factory = FactorySticker.getInstance();
-      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[2], null, S, FACE_COLORS[face%COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[2], null, S, FACE_COLORS[face%COLORS], RS);
       }
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objects/TwistyMegaminx.java
index 89b055ca..9ce0393e 100644
--- a/src/main/java/org/distorted/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objects/TwistyMegaminx.java
@@ -535,27 +535,28 @@ public class TwistyMegaminx extends TwistyMinx
     {
     int COLORS = FACE_COLORS.length;
     float R,S;
+    float[] RS;
     int index,variant = face/COLORS;
 
-    if( variant==0 ) { R = 0.08f; S = 0.10f; index = 0; }
+    if( variant==0 ) { R = 0.08f; S = 0.10f; index = 0; RS = new float[] {R,R,R,R}; }
     else
       {
       int numLayers = getNumLayers();
 
       if( variant < (numLayers+1)/2 )
         {
-        if( numLayers==3 ) { R = 0.12f; S = 0.12f; index = 1; }
+        if( numLayers==3 ) { R = 0.12f; S = 0.12f; index = 1; RS = new float[] {R,R,R,R}; }
         else
           {
-          if( variant==1 ) { R = 0.12f; S = 0.12f; index = 2; }
-          else             { R = 0.08f; S = 0.08f; index = 3; }
+          if( variant==1 ) { R = 0.12f; S = 0.12f; index = 2; RS = new float[] {R,R,R,R}; }
+          else             { R = 0.08f; S = 0.08f; index = 3; RS = new float[] {R,R,R,R}; }
           }
         }
-      else { R = 0.10f; S = 0.07f; index = 4; }
+      else { R = 0.10f; S = 0.07f; index = 4; RS = new float[] {R,R,R,R,R}; }
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index 91a5bc7b..c67a1cc1 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -362,9 +362,10 @@ public class TwistyPyraminx extends TwistyObject
     {
     float R = 0.06f;
     float S = 0.08f;
+    float[] RS = new float[] {R,R,R};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], null, S, FACE_COLORS[face], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index 4b537315..71c54abc 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -384,9 +384,9 @@ public class TwistyRedi extends TwistyObject
       case 1:  R = 0.06f; S = 0.06f; break;
       default: R = 0.00f; S = 0.00f; break;
       }
-
+    float[] RS = new float[] {R,R,R,R};
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyRex.java b/src/main/java/org/distorted/objects/TwistyRex.java
index c9fad8f0..fd120dca 100644
--- a/src/main/java/org/distorted/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objects/TwistyRex.java
@@ -558,26 +558,36 @@ public class TwistyRex extends TwistyObject
       {
       float S = 0.05f;
       float R = 0.02f;
+      float[] RS = new float[] {R,R,R};
       float ANGLE = (float)(Math.PI/15);
       float F = REX_D*SQ2;
       float G = (1-REX_D)*SQ2/2;
       float[] vertices = new float[] { F/2, -G/3, -F/2, -G/3, 0, 2*G/3 };
       float[] angles   = new float[] { -ANGLE/2, ANGLE, ANGLE };
 
-      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], RS);
       }
     else if( face<2*COLORS )
       {
       float S = 0.035f;
       float R = 0.040f;
+      float[] RS = new float[] {R,R,R,R};
       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, null, S, FACE_COLORS[face%COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, null, S, FACE_COLORS[face%COLORS], RS);
       }
     else
       {
-      float S = 0.051f;
-      float R = 0.070f;
-      factory.drawRexEdgeSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], S, R);
+      float S = 0.045f;
+      float R = 0.060f;
+      float[] RS = new float[] {0,0,R};
+
+      float ANGLE = (float)(Math.PI/20);
+      float F = 1.0f;
+      float G = 0.5f-REX_D;
+      float[] vertices = new float[] { -F/2, G/3, F/2, G/3, 0, -2*G/3 };
+      float[] angles   = new float[] { ANGLE/10, -ANGLE, -ANGLE };
+
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, angles, S, FACE_COLORS[face%COLORS], RS);
       }
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index 208f44a9..9483cf91 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -575,18 +575,19 @@ public class TwistySkewb extends TwistyObject
   void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
     int COLORS = FACE_COLORS.length;
-    float R=0.0f,S=0.0f;
-    int index=0, cubitType = face/COLORS;
+    float R,S;
+    float[] RS;
+    int index, cubitType = face/COLORS;
 
     switch(cubitType)
       {
-      case 0: R = 0.025f; S = 0.045f; index= 0; break;
-      case 1: R = 0.025f; S = 0.035f; index= 0; break;
-      case 2: R = 0.055f; S = 0.035f; index= 1; break;
+      case 0 : R = 0.025f; S = 0.045f; index= 0; RS = new float[] {R,R,R  }; break;
+      case 1 : R = 0.025f; S = 0.035f; index= 0; RS = new float[] {R,R,R  }; break;
+      default: R = 0.055f; S = 0.035f; index= 1; RS = new float[] {R,R,R,R}; break;
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[index], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistySquare1.java b/src/main/java/org/distorted/objects/TwistySquare1.java
index 10b62f44..bb9f7272 100644
--- a/src/main/java/org/distorted/objects/TwistySquare1.java
+++ b/src/main/java/org/distorted/objects/TwistySquare1.java
@@ -226,20 +226,21 @@ class TwistySquare1 extends TwistySquare
     int COLORS = FACE_COLORS.length;
     int stickerType = face/COLORS;
     float R,S;
+    float[] RS;
 
     switch(stickerType)
       {
-      case 0:  R = 0.06f; S = 0.05f; break;
-      case 1:  R = 0.04f; S = 0.04f; break;
-      case 2:  R = 0.11f; S = 0.09f; break;
-      case 3:  R = 0.03f; S = 0.05f; break;
-      case 4:  R = 0.11f; S = 0.08f; break;
-      case 5:  R = 0.08f; S = 0.08f; break;
-      default: R = 0.00f; S = 0.00f; break;
+      case 0:  R = 0.06f; S = 0.05f; RS= new float[] {R,R,R,R}; break;
+      case 1:  R = 0.04f; S = 0.04f; RS= new float[] {R,R,R,R}; break;
+      case 2:  R = 0.11f; S = 0.09f; RS= new float[] {R,R,R,R}; break;
+      case 3:  R = 0.03f; S = 0.05f; RS= new float[] {R,R,R  }; break;
+      case 4:  R = 0.11f; S = 0.08f; RS= new float[] {R,R,R,R}; break;
+      case 5:  R = 0.08f; S = 0.08f; RS= new float[] {R,R,R,R}; break;
+      default: R = 0.00f; S = 0.00f; RS= new float[] {R,R,R,R}; break;
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistySquare2.java b/src/main/java/org/distorted/objects/TwistySquare2.java
index fafdf34c..e3e77b05 100644
--- a/src/main/java/org/distorted/objects/TwistySquare2.java
+++ b/src/main/java/org/distorted/objects/TwistySquare2.java
@@ -231,20 +231,21 @@ class TwistySquare2 extends TwistySquare
     int COLORS = FACE_COLORS.length;
     int stickerType = face/COLORS;
     float R,S;
+    float[] RS;
 
     switch(stickerType)
       {
-      case 0:  R = 0.060f; S = 0.05f; break;
-      case 1:  R = 0.040f; S = 0.04f; break;
-      case 2:  R = 0.110f; S = 0.09f; break;
-      case 3:  R = 0.030f; S = 0.05f; break;
-      case 4:  R = 0.110f; S = 0.08f; break;
-      case 5:  R = 0.025f; S = 0.06f; break;
-      default: R = 0.000f; S = 0.00f; break;
+      case 0:  R = 0.060f; S = 0.05f; RS= new float[] {R,R,R,R}; break;
+      case 1:  R = 0.040f; S = 0.04f; RS= new float[] {R,R,R,R}; break;
+      case 2:  R = 0.110f; S = 0.09f; RS= new float[] {R,R,R,R}; break;
+      case 3:  R = 0.030f; S = 0.05f; RS= new float[] {R,R,R  }; break;
+      case 4:  R = 0.110f; S = 0.08f; RS= new float[] {R,R,R,R}; break;
+      case 5:  R = 0.025f; S = 0.06f; RS= new float[] {R,R,R  }; break;
+      default: R = 0.000f; S = 0.00f; RS= new float[] {R,R,R,R}; break;
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyUltimate.java b/src/main/java/org/distorted/objects/TwistyUltimate.java
index f24dbd96..59d75bf4 100644
--- a/src/main/java/org/distorted/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objects/TwistyUltimate.java
@@ -347,17 +347,18 @@ class TwistyUltimate extends TwistyObject
     int COLORS = FACE_COLORS.length;
     int stickerType = face/COLORS;
     float R,S;
+    float[] RS;
 
     switch(stickerType)
       {
-      case 0:  R = 0.08f; S = 0.07f; break;
-      case 1:  R = 0.13f; S = 0.09f; break;
-      case 2:  R = 0.11f; S = 0.08f; break;
-      default: R = 0.00f; S = 0.00f; break;
+      case 0:  R = 0.08f; S = 0.07f; RS= new float[] {R,R,R,R,R}; break;
+      case 1:  R = 0.13f; S = 0.09f; RS= new float[] {R,R,R,R  }; break;
+      case 2:  R = 0.11f; S = 0.08f; RS= new float[] {R,R,R,R  }; break;
+      default: R = 0.00f; S = 0.00f; RS= new float[] {R,R,R,R  }; break;
       }
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[stickerType], null, S, FACE_COLORS[face%COLORS], RS);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
