void Scale9Sprite::setBlendFunc(const BlendFunc &blendFunc) { _blendFunc = blendFunc; applyBlendFunc(); }
bool Scale9Sprite::updateWithSprite(Sprite* sprite, const Rect& textureRect, bool rotated, const Vec2 &offset, const Size &originalSize, const Rect& capInsets) { GLubyte opacity = getOpacity(); Color3B color = getColor(); // Release old sprites this->cleanupSlicedSprites(); _protectedChildren.clear(); updateBlendFunc(sprite?sprite->getTexture():nullptr); if(nullptr != sprite) { if (nullptr == sprite->getSpriteFrame()) { return false; } if (nullptr == _scale9Image) { _scale9Image = sprite; _scale9Image->retain(); } else { _scale9Image->setSpriteFrame(sprite->getSpriteFrame()); } } if (!_scale9Image) { return false; } SpriteFrame *spriteFrame = _scale9Image->getSpriteFrame(); if (!spriteFrame) { return false; } Rect rect(textureRect); Size size(originalSize); _capInsets = capInsets; // If there is no given rect if ( rect.equals(Rect::ZERO) ) { // Get the texture size as original Size textureSize = _scale9Image->getTexture()->getContentSize(); rect = Rect(0, 0, textureSize.width, textureSize.height); } if( size.equals(Size::ZERO) ) { size = rect.size; } // Set the given rect's size as original size _spriteRect = rect; _offset = offset; _spriteFrameRotated = rotated; _originalSize = size; _preferredSize = size; _capInsetsInternal = capInsets; if (_scale9Enabled) { this->createSlicedSprites(); } applyBlendFunc(); this->setContentSize(size); if (_spritesGenerated) { // Restore color and opacity this->setOpacity(opacity); this->setColor(color); } _spritesGenerated = true; return true; }
bool Scale9Sprite::updateWithSprite(Sprite* sprite, const Rect& textureRect, bool rotated, const Vec2 &offset, const Size &originalSize, const Rect& capInsets) { // Release old sprites this->cleanupSlicedSprites(); updateBlendFunc(sprite?sprite->getTexture():nullptr); if(nullptr != sprite) { if (nullptr == sprite->getSpriteFrame()) { return false; } if (nullptr == _scale9Image) { _scale9Image = sprite; _scale9Image->retain(); } else { _scale9Image->setSpriteFrame(sprite->getSpriteFrame()); } } else { CC_SAFE_RELEASE_NULL(_scale9Image); } if (!_scale9Image) { return false; } Rect rect(textureRect); Size size(originalSize); // If there is no given rect if ( rect.equals(Rect::ZERO) ) { // Get the texture size as original Size textureSize = _scale9Image->getTexture()->getContentSize(); rect = Rect(0, 0, textureSize.width, textureSize.height); } if( size.equals(Size::ZERO) ) { size = rect.size; } // Set the given rect's size as original size _spriteRect = rect; _spriteFrameRotated = rotated; _originalSize = size; _preferredSize = size; _offset = offset; _capInsetsInternal = capInsets; if (_scale9Enabled) { _scale9Image->setAnchorPoint(Vec2::ZERO); _scale9Image->setPosition(Vec2::ZERO); _sliceSpriteDirty = true; } applyBlendFunc(); if (getGLProgramState()) { _scale9Image->setGLProgramState(getGLProgramState()); } else { this->setState(_brightState); } if(this->_isPatch9) { size.width = size.width - 2; size.height = size.height - 2; } this->setContentSize(size); return true; }