mirror of https://github.com/axmolengine/axmol.git
blending function for Scale9Sprite
This commit is contained in:
parent
e792b6aa9a
commit
8270355ad6
|
@ -158,6 +158,56 @@ namespace ui {
|
||||||
auto sprite = Sprite::createWithTexture(batchnode->getTexture());
|
auto sprite = Sprite::createWithTexture(batchnode->getTexture());
|
||||||
return init(sprite, rect, false, capInsets);
|
return init(sprite, rect, false, capInsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Scale9Sprite::setBlendFunc(const BlendFunc &blendFunc)
|
||||||
|
{
|
||||||
|
_blendFunc = blendFunc;
|
||||||
|
applyBlendFunc();
|
||||||
|
}
|
||||||
|
const BlendFunc &Scale9Sprite::getBlendFunc() const
|
||||||
|
{
|
||||||
|
return _blendFunc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Scale9Sprite::updateBlendFunc(Texture2D *texture)
|
||||||
|
{
|
||||||
|
|
||||||
|
// it is possible to have an untextured sprite
|
||||||
|
if (! texture || ! texture->hasPremultipliedAlpha())
|
||||||
|
{
|
||||||
|
_blendFunc = BlendFunc::ALPHA_NON_PREMULTIPLIED;
|
||||||
|
setOpacityModifyRGB(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
|
||||||
|
setOpacityModifyRGB(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Scale9Sprite::applyBlendFunc()
|
||||||
|
{
|
||||||
|
if(_scale9Image)
|
||||||
|
_scale9Image->setBlendFunc(_blendFunc);
|
||||||
|
if(_topLeftSprite)
|
||||||
|
_topLeftSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_topSprite)
|
||||||
|
_topSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_topRightSprite)
|
||||||
|
_topRightSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_leftSprite)
|
||||||
|
_leftSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_centerSprite)
|
||||||
|
_centerSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_rightSprite)
|
||||||
|
_rightSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_bottomLeftSprite)
|
||||||
|
_bottomLeftSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_bottomSprite)
|
||||||
|
_bottomSprite->setBlendFunc(_blendFunc);
|
||||||
|
if(_bottomRightSprite)
|
||||||
|
_bottomRightSprite->setBlendFunc(_blendFunc);
|
||||||
|
}
|
||||||
|
|
||||||
bool Scale9Sprite::updateWithBatchNode(cocos2d::SpriteBatchNode *batchnode, const cocos2d::Rect &originalRect, bool rotated, const cocos2d::Rect &capInsets)
|
bool Scale9Sprite::updateWithBatchNode(cocos2d::SpriteBatchNode *batchnode, const cocos2d::Rect &originalRect, bool rotated, const cocos2d::Rect &capInsets)
|
||||||
{
|
{
|
||||||
|
@ -193,6 +243,8 @@ namespace ui {
|
||||||
this->cleanupSlicedSprites();
|
this->cleanupSlicedSprites();
|
||||||
_protectedChildren.clear();
|
_protectedChildren.clear();
|
||||||
|
|
||||||
|
updateBlendFunc(sprite?sprite->getTexture():nullptr);
|
||||||
|
|
||||||
if(nullptr != sprite)
|
if(nullptr != sprite)
|
||||||
{
|
{
|
||||||
if (nullptr == sprite->getSpriteFrame())
|
if (nullptr == sprite->getSpriteFrame())
|
||||||
|
@ -255,6 +307,8 @@ namespace ui {
|
||||||
this->createSlicedSprites();
|
this->createSlicedSprites();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
applyBlendFunc();
|
||||||
|
|
||||||
this->setContentSize(size);
|
this->setContentSize(size);
|
||||||
|
|
||||||
if (_spritesGenerated)
|
if (_spritesGenerated)
|
||||||
|
|
|
@ -45,7 +45,7 @@ namespace ui {
|
||||||
* Then you could call any methods of Sprite class with the return pointers.
|
* Then you could call any methods of Sprite class with the return pointers.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class CC_GUI_DLL Scale9Sprite : public Node
|
class CC_GUI_DLL Scale9Sprite : public Node, public cocos2d::BlendProtocol
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -243,6 +243,25 @@ namespace ui {
|
||||||
virtual bool init(Sprite* sprite, const Rect& rect, bool rotated, const Vec2 &offset, const Size &originalSize, const Rect& capInsets);
|
virtual bool init(Sprite* sprite, const Rect& rect, bool rotated, const Vec2 &offset, const Size &originalSize, const Rect& capInsets);
|
||||||
CC_DEPRECATED_ATTRIBUTE virtual bool initWithBatchNode(SpriteBatchNode* batchnode, const Rect& rect, bool rotated, const Rect& capInsets);
|
CC_DEPRECATED_ATTRIBUTE virtual bool initWithBatchNode(SpriteBatchNode* batchnode, const Rect& rect, bool rotated, const Rect& capInsets);
|
||||||
CC_DEPRECATED_ATTRIBUTE virtual bool initWithBatchNode(SpriteBatchNode* batchnode, const Rect& rect, const Rect& capInsets);
|
CC_DEPRECATED_ATTRIBUTE virtual bool initWithBatchNode(SpriteBatchNode* batchnode, const Rect& rect, const Rect& capInsets);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the source blending function.
|
||||||
|
*
|
||||||
|
* @param blendFunc A structure with source and destination factor to specify pixel arithmetic,
|
||||||
|
* e.g. {GL_ONE, GL_ONE}, {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}.
|
||||||
|
* @js NA
|
||||||
|
* @lua NA
|
||||||
|
*/
|
||||||
|
virtual void setBlendFunc(const BlendFunc &blendFunc) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the blending function that is currently being used.
|
||||||
|
*
|
||||||
|
* @return A BlendFunc structure with source and destination factor which specified pixel arithmetic.
|
||||||
|
* @js NA
|
||||||
|
* @lua NA
|
||||||
|
*/
|
||||||
|
virtual const BlendFunc &getBlendFunc() const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates and returns a new sprite object with the specified cap insets.
|
* Creates and returns a new sprite object with the specified cap insets.
|
||||||
|
@ -383,6 +402,8 @@ namespace ui {
|
||||||
void createSlicedSprites();
|
void createSlicedSprites();
|
||||||
void cleanupSlicedSprites();
|
void cleanupSlicedSprites();
|
||||||
void adjustScale9ImagePosition();
|
void adjustScale9ImagePosition();
|
||||||
|
void applyBlendFunc();
|
||||||
|
void updateBlendFunc(Texture2D *texture);
|
||||||
/**
|
/**
|
||||||
* Sorts the children array once before drawing, instead of every time when a child is added or reordered.
|
* Sorts the children array once before drawing, instead of every time when a child is added or reordered.
|
||||||
* This approach can improves the performance massively.
|
* This approach can improves the performance massively.
|
||||||
|
@ -408,6 +429,7 @@ namespace ui {
|
||||||
Sprite* _bottomRightSprite;
|
Sprite* _bottomRightSprite;
|
||||||
|
|
||||||
bool _scale9Enabled;
|
bool _scale9Enabled;
|
||||||
|
BlendFunc _blendFunc;
|
||||||
|
|
||||||
Size _topLeftSize;
|
Size _topLeftSize;
|
||||||
Size _centerSize;
|
Size _centerSize;
|
||||||
|
|
Loading…
Reference in New Issue