commit dfbb340a720b11d9f008a23d80398b2db11bf479
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Aug 27 13:51:21 2020 +0100

    Fix: nwo we need to explicitly set mesh center to negative Z if we want to GLOW a flat object.

diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index c9c52089..8d0dfa89 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -164,6 +164,10 @@ public abstract class RubikObject extends DistortedNode
     mEffects.apply(mQuatEffect);
     mEffects.apply(mScaleEffect);
 
+    // Now postprocessed effects (the glow when you solve an object) require component centers. In
+    // order for the center to be in front of the object, we need to set the center to be behind it.
+    getMesh().setComponentCenter(0,0,0,-0.1f);
+
     attach( new DistortedNode(mTexture,mEffects,mMesh) );
 
     setupPosition(moves);
diff --git a/src/main/java/org/distorted/states/RubikStatePlay.java b/src/main/java/org/distorted/states/RubikStatePlay.java
index d929d032..ec639d53 100644
--- a/src/main/java/org/distorted/states/RubikStatePlay.java
+++ b/src/main/java/org/distorted/states/RubikStatePlay.java
@@ -24,6 +24,7 @@ import android.content.SharedPreferences;
 import android.graphics.drawable.BitmapDrawable;
 import android.os.Build;
 import android.os.Bundle;
+import android.util.DisplayMetrics;
 import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -73,6 +74,7 @@ public class RubikStatePlay extends RubikStateAbstract implements AdapterView.On
   private AppCompatSpinner mLevelSpinner;
   private ArrayAdapter<String> mSpinnerAdapter;
   private int mLevelValue;
+  private int mBarHeight;
   private float mButtonSize, mTitleSize, mMenuItemSize, mMenuTextSize;
 
   private ArrayList<Move> mMoves;
@@ -285,8 +287,6 @@ public class RubikStatePlay extends RubikStateAbstract implements AdapterView.On
     mMenuButton.setPadding(padding,0,padding,0);
     mMenuButton.setImageResource(icon);
 
-    final int barHeight = act.getScreenHeightInPixels()/10;
-
     mMenuButton.setOnClickListener( new View.OnClickListener()
       {
       @Override
@@ -294,7 +294,14 @@ public class RubikStatePlay extends RubikStateAbstract implements AdapterView.On
         {
         if( act.getPreRender().canPlay() )
           {
-          mMenuPopup.showAsDropDown(view, 0, -mMenuLayoutHeight-barHeight, Gravity.LEFT);
+          if( mBarHeight<=0 )
+            {
+            DisplayMetrics displaymetrics = new DisplayMetrics();
+            act.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
+            mBarHeight=displaymetrics.heightPixels/10;
+            }
+
+          mMenuPopup.showAsDropDown(view, 0, -mMenuLayoutHeight-mBarHeight, Gravity.LEFT);
           mMenuPopup.update(view, mMenuLayoutWidth, mMenuLayoutHeight);
           }
         }
