package zenproject.meditation.android.sketch.painting.ink; import com.juankysoriano.rainbow.utils.RainbowMath; import zenproject.meditation.android.ContextRetriever; import zenproject.meditation.android.R; import zenproject.meditation.android.preferences.BrushOptionsPreferences; public class InkDropSizeLimiter { private static final float RADIUS_MIN = ContextRetriever.INSTANCE.getResources().getDimension(R.dimen.ink_drop_min_radius); private static final float RADIUS_MAX = ContextRetriever.INSTANCE.getResources().getDimension(R.dimen.ink_drop_max_radius); private static final float PERCENTAGE_MIN = 0; private static final float PERCENTAGE_MAX = 100; private static final float SCALE_FACTOR = 3; private final BrushOptionsPreferences brushOptionsPreferences; public static InkDropSizeLimiter newInstance(BrushOptionsPreferences brushOptionsPreferences) { return new InkDropSizeLimiter(brushOptionsPreferences); } protected InkDropSizeLimiter(BrushOptionsPreferences brushOptionsPreferences) { this.brushOptionsPreferences = brushOptionsPreferences; } public float getMinimumRadius() { return RainbowMath.max(RADIUS_MIN, getRadius() / calculateRadiusFactorForMinimum()); } public float getRadius() { return constrain(RainbowMath.map(brushOptionsPreferences.getBrushSizePercentage(), PERCENTAGE_MIN, PERCENTAGE_MAX, RADIUS_MIN, RADIUS_MAX)); } private float constrain(float radius) { return Math.min(RADIUS_MAX, Math.max(RADIUS_MIN, radius)); } private float calculateRadiusFactorForMinimum() { return SCALE_FACTOR; } public float getMaximumRadius() { return Math.min(RADIUS_MAX, getRadius()); } }