void cxSpriteSetTextureAttr(cxAny pview,cxTextureAttr attr) { CX_RETURN(attr == NULL); cxSpriteSetTexture(pview, attr->texture); cxSpriteSetBoxTex(pview, attr->box); // if(cxViewZeroSize(pview)){ cxViewSetSize(pview, attr->size); } }
void cxAtlasUpdateScale9(cxAny pview) { cxAtlas this = pview; CX_RETURN(!this->scale9.enable); CX_ASSERT(!cxViewZeroSize(pview) && this->cxSprite.texture != NULL, "must set texture and size"); cxAtlasClean(pview); cxSize2f size = cxViewSize(this); cxRect4f tr = cxBoxTex2fToRect4f(this->cxSprite.texCoord); cxSize2f tsize = cxSize2fv(this->cxSprite.texture->size.w * tr.w, this->cxSprite.texture->size.h * tr.h); cxFloat txs[]={0.0f, this->scale9.box.l/tsize.w, (tsize.w - this->scale9.box.r)/tsize.w, 1.0f}; cxFloat tys[]={0.0f, this->scale9.box.t/tsize.h, (tsize.h - this->scale9.box.b)/tsize.h, 1.0f}; for(int i=0; i < 4; i++){ txs[i] = txs[i] * tr.w + tr.x; tys[i] = tys[i] * tr.h + tr.y; } cxFloat bxs[]={0.0f, this->scale9.box.l, size.w - this->scale9.box.r, size.w}; cxFloat bys[]={0.0f, this->scale9.box.r, size.h - this->scale9.box.b, size.h}; cxFloat tx1=0,ty1=0,tx2=0,ty2=0; cxFloat bx1=0,by1=0,bx2=0,by2=0; cxFloat offx=0,offy=0; cxColor4f color =cxViewColor(this); for(int i=0; i < 9;i++){ tx1 = txs[i%3]; tx2 = txs[i%3 + 1]; ty1 = tys[i/3]; ty2 = tys[i/3 + 1]; bx1 = bxs[i%3]; bx2 = bxs[i%3 + 1]; by1 = bys[i/3]; by2 = bys[i/3 + 1]; cxFloat hw = (bx2 - bx1)/2.0f; cxFloat hh = (by2 - by1)/2.0f; if(hw == 0 || hh == 0){ continue; } offx = (bx2 - bx1)/2.0f + bx1 - size.w/2.0f; offy = (size.h - (by2 - by1))/2.0f - by1; cxBoxPoint bp; bp.lb.colors = color; bp.lt.colors = color; bp.rb.colors = color; bp.rt.colors = color; bp.lb.vertices = cxVec3fv(-hw + offx, -hh + offy, 0.0f); bp.rb.vertices = cxVec3fv( hw + offx, -hh + offy, 0.0f); bp.lt.vertices = cxVec3fv(-hw + offx, hh + offy, 0.0f); bp.rt.vertices = cxVec3fv( hw + offx, hh + offy, 0.0f); bp.lb.texcoords = cxTex2fv(tx1, ty2); bp.rb.texcoords = cxTex2fv(tx2, ty2); bp.lt.texcoords = cxTex2fv(tx1, ty1); bp.rt.texcoords = cxTex2fv(tx2, ty1); cxAtlasAppend(this, &bp); } }
void cxSpriteSetTextureURL(cxAny pview,cxConstChars url,cxBool useTexSize,cxBool cached) { CX_RETURN(url == NULL); cxSprite this = pview; cxUrlPath path = cxUrlPathParse(url); CX_RETURN(path == NULL); cxTexture texture = cxTextureFactoryLoadFile(path->path); if(cached){ texture = cxTextureFactoryLoadFile(path->path); }else{ texture = cxTextureCreate(path->path); } CX_ASSERT(texture != NULL, "texture load failed %s",path->path); cxSpriteSetTexture(this, texture); //use texture size cxBool uts = cxViewZeroSize(this) || useTexSize; if(path->count > 1){ cxSpriteSetTextureKey(this, path->key, uts); }else if(uts){ cxViewSetSize(this, texture->size); } }