package com.himamis.retex.renderer.android.graphics;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Bitmap;
import android.graphics.PointF;
import android.graphics.RectF;
public class ScaleStack {
private List<Float> mScaleStackX;
private List<Float> mScaleStackY;
public ScaleStack() {
mScaleStackX = new ArrayList<Float>();
mScaleStackX.add(1.0f);
mScaleStackY = new ArrayList<Float>();
mScaleStackY.add(1.0f);
}
public void appendScale(float sx, float sy) {
float x = scaleX(sx);
float y = scaleY(sy);
mScaleStackX.set(getScaleStackXTopIndex(), x);
mScaleStackY.set(getScaleStackYTopIndex(), y);
}
public float getScaleX() {
return mScaleStackX.get(getScaleStackXTopIndex());
}
public float getScaleY() {
return mScaleStackY.get(getScaleStackYTopIndex());
}
public void pushScaleValues() {
mScaleStackX.add(getScaleX());
mScaleStackY.add(getScaleY());
}
public void popScaleValues() {
mScaleStackX.remove(getScaleStackXTopIndex());
mScaleStackY.remove(getScaleStackYTopIndex());
}
private int getScaleStackXTopIndex() {
return mScaleStackX.size() - 1;
}
private int getScaleStackYTopIndex() {
return mScaleStackY.size() - 1;
}
public float scaleX(float x) {
return x * getScaleX();
}
public float scaleY(float y) {
return y * getScaleY();
}
public float scaleFontSize(float size) {
return Math.min(getScaleX(), getScaleY()) * size;
}
public RectF scaleRectF(RectF rect) {
rect.bottom *= getScaleY();
rect.top *= getScaleY();
rect.left *= getScaleX();
rect.right *= getScaleX();
return rect;
}
public PointF scalePointF(PointF point) {
point.x *= getScaleX();
point.y *= getScaleY();
return point;
}
public Bitmap scaleBitmap(Bitmap bitmap) {
int scaledWidth = Math.round(scaleX(bitmap.getWidth()));
int scaledHeight = Math.round(scaleY(bitmap.getHeight()));
return Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight,
false);
}
}