package org.osmdroid.bonuspack.kml;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.IOException;
import java.io.Writer;
/**
* Handling of KML IconStyle hotSpot
* @author M.Kergall
*/
public class HotSpot implements Parcelable {
public enum Units {
fraction, pixels, insetPixels;
private static Units[] allValues = values();
public static Units fromOrdinal(int n) {return allValues[n];}
}
public float mx, my;
public Units mXUnits, mYUnits;
public Units getUnits(String sUnits){
if ("fraction".equals(sUnits))
return Units.fraction;
else if ("pixels".equals(sUnits))
return Units.pixels;
else if ("insetPixels".equals(sUnits))
return Units.insetPixels;
else
return Units.fraction;
}
public String getUnits(Units units){
return ""+units;
}
public HotSpot(){
mx = 0.5f;
my = 0.5f;
mXUnits = Units.fraction;
mYUnits = Units.fraction;
}
public HotSpot(float x, float y, String xunits, String yunits){
mx = x;
my = y;
mXUnits = getUnits(xunits);
mYUnits = getUnits(yunits);
}
public float get(float dim, Units units, float iconSize){
switch (units){
case fraction:
return dim;
case pixels:
return dim/iconSize;
case insetPixels:
return (iconSize-dim)/iconSize;
default:
return dim;
}
}
public float getX(float iconSize){
return get(mx, mXUnits, iconSize);
}
public float getY(float iconSize){
return get(my, mYUnits, iconSize);
}
public void writeAsKML(Writer writer){
try {
writer.write("<hotSpot x=\"" + mx + "\" y=\"" + my + "\" "
+ "xunits=\"" + getUnits(mXUnits) + "\" "
+ "yunits=\"" + getUnits(mYUnits) + "\"/>\n");
} catch (IOException e) {
e.printStackTrace();
}
}
//Parcelable implementation ------------
@Override public int describeContents() { return 0; }
@Override public void writeToParcel(Parcel out, int flags) {
out.writeFloat(mx);
out.writeFloat(my);
out.writeInt(mXUnits.ordinal());
out.writeInt(mYUnits.ordinal());
}
public static final Creator<HotSpot> CREATOR = new Creator<HotSpot>() {
@Override
public HotSpot createFromParcel(Parcel in) {
return new HotSpot(in);
}
@Override
public HotSpot[] newArray(int size) {
return new HotSpot[size];
}
};
public HotSpot(Parcel in){
mx = in.readFloat();
my = in.readFloat();
mXUnits = Units.fromOrdinal(in.readInt());
mYUnits = Units.fromOrdinal(in.readInt());
}
}