package org.itsnat.droid.impl.xmlinflater.drawable.classtree;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import org.itsnat.droid.impl.dom.DOMAttr;
import org.itsnat.droid.impl.dom.drawable.DOMElemDrawable;
import org.itsnat.droid.impl.util.NamespaceUtil;
import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChildRoot;
import org.itsnat.droid.impl.xmlinflater.BitmapUtil;
import org.itsnat.droid.impl.xmlinflater.XMLInflaterContext;
import org.itsnat.droid.impl.xmlinflater.drawable.AttrDrawableContext;
import org.itsnat.droid.impl.xmlinflater.drawable.ClassDescDrawableMgr;
import org.itsnat.droid.impl.xmlinflater.drawable.attr.AttrDescDrawable_BitmapDrawable_tileMode;
import org.itsnat.droid.impl.xmlinflater.shared.GravityUtil;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodBoolean;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodNameMultiple;
/**
* Created by jmarranz on 10/11/14.
*/
public class ClassDescBitmapDrawable extends ClassDescElementDrawableBased<BitmapDrawable>
{
public ClassDescBitmapDrawable(ClassDescDrawableMgr classMgr,ClassDescElementDrawableBased<? super BitmapDrawable> parent)
{
super(classMgr,"bitmap",parent);
}
@Override
public ElementDrawableChildRoot createElementDrawableChildRoot(DOMElemDrawable rootElem, AttrDrawableContext attrCtx)
{
XMLInflaterContext xmlInflaterContext = attrCtx.getXMLInflaterContext();
Context ctx = xmlInflaterContext.getContext();
DOMAttr attrSrc = rootElem.getDOMAttribute(NamespaceUtil.XMLNS_ANDROID, "src");
Bitmap bitmap = BitmapUtil.getBitmap(attrSrc.getResourceDesc(),xmlInflaterContext.getBitmapDensityReference(), ctx, classMgr.getXMLInflaterRegistry());
return new ElementDrawableChildRoot(new BitmapDrawable(ctx.getResources(),bitmap));
}
@Override
public boolean isAttributeIgnored(BitmapDrawable resource, String namespaceURI, String name)
{
if (super.isAttributeIgnored(resource,namespaceURI,name))
return true;
return NamespaceUtil.XMLNS_ANDROID.equals(namespaceURI) && name.equals("src");
}
@Override
public Class<BitmapDrawable> getDrawableOrElementDrawableClass()
{
return BitmapDrawable.class;
}
@SuppressWarnings("unchecked")
protected void init()
{
super.init();
// el atributo src se define en otro lugar
addAttrDescAN(new AttrDescReflecMethodBoolean(this, "antialias", "setAntiAlias", false));
addAttrDescAN(new AttrDescReflecMethodBoolean(this, "dither", true));
addAttrDescAN(new AttrDescReflecMethodBoolean(this, "filter", "setFilterBitmap", true));
addAttrDescAN(new AttrDescReflecMethodNameMultiple<ClassDescBitmapDrawable, BitmapDrawable, AttrDrawableContext>(this, "gravity", GravityUtil.nameValueMap, "fill"));
// android:mipMap parece que es level 17
// android:src se procesa en tiempo de creación
addAttrDescAN(new AttrDescDrawable_BitmapDrawable_tileMode(this, "tileMode"));
//addAttrDescAN(new AttrDescDrawable_BitmapDrawable_tileMode(this,"tileModeX")); // API level 21
//addAttrDescAN(new AttrDescDrawable_BitmapDrawable_tileMode(this,"tileModeY")); // API level 21
}
}