package org.schmivits.airball.display.altitude;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import org.schmivits.airball.base.R;
import org.schmivits.airball.display.DisplayConfiguration;
import org.schmivits.airball.util.ValueModel;
import org.schmivits.airball.widget.Container;
import org.schmivits.airball.widget.FilledPolygon;
import org.schmivits.airball.widget.Rectangle;
import org.schmivits.airball.widget.TiledImage;
import org.schmivits.airball.widget.Widget;
public class AltitudeTape extends Container {
public interface Model {
ValueModel<Float> getAltitude();
}
private final Model mModel;
private final AltitudeTapeCore mTape;
private final Widget mInvalidImage;
/**
* Create an AltitudeTape.
*/
public AltitudeTape(
DisplayConfiguration config,
Resources res, AssetManager assets,
float x, float y, float w, float h,
final Model model) {
mModel = model;
moveTo(x, y);
sizeTo(w, h);
float invalidWidth = (float) Math.floor(w / 8);
mTape = new AltitudeTapeCore(
config, assets,
config.mPointerToScaleOffset, 0f, w - config.mPointerToScaleOffset, h,
new AltitudeTapeCore.Model() {
@Override
public float getAltitude() {
return model.getAltitude().isValid() ? model.getAltitude().getValue() : 0f;
}
});
Widget pointerSymbol = new FilledPolygon(
new float[][]{
{0.0f, 0.0f},
{1.0f, 0.5f},
{0.0f, 1.0f},
},
config.mPointerColor);
pointerSymbol.sizeTo(config.mPointerShapeSize, config.mPointerShapeSize);
Widget pointerLine = new Rectangle(config.mPointerColor);
pointerLine.sizeTo(w, config.mThickLineThickness);
pointerSymbol.moveTo(
0, (getHeight() - pointerSymbol.getHeight()) / 2f);
pointerLine.moveTo(
0, (getHeight() - pointerLine.getHeight()) / 2f);
mInvalidImage = new TiledImage(BitmapFactory.decodeResource(res, R.drawable.error_texture));
mInvalidImage.moveTo(config.mPointerToScaleOffset, 0f);
mInvalidImage.sizeTo(invalidWidth, h);
mChildren.add(mTape);
mChildren.add(mInvalidImage);
mChildren.add(pointerSymbol);
mChildren.add(pointerLine);
}
@Override
protected void drawContents(Canvas canvas) {
if (!mModel.getAltitude().isValid()) {
mInvalidImage.setVisible(true);
mTape.setVisible(false);
} else {
mInvalidImage.setVisible(false);
mTape.setVisible(true);
}
super.drawContents(canvas);
}
}