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;
    }
Exemplo n.º 3
0
    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;
    }