void MyControlButton::setBlendFunc(){
    BlendFunc blend = {GL_SRC_ALPHA , GL_ONE};
    
    _bgSprite = ui::Scale9Sprite::createWithSpriteFrame(getBackgroundSprite()->getSprite()->getSpriteFrame());
    for (Node *  child : _bgSprite->_protectedChildren) {
        ((Sprite*)child)->setBlendFunc(blend);
    }
    setBackgroundSpriteForState(_bgSprite, Control::State::HIGH_LIGHTED);
}
 virtual void needsLayout(void)
 {
     if (!_parentInited) {
         return;
     }
     // Hide the background and the label
     if (getTitleLabel() != nullptr) {
         getTitleLabel()->setVisible(false);
     }
     if (getBackgroundSprite()) {
         getBackgroundSprite()->setVisible(false);
     }
     // Update anchor of all labels
     this->setLabelAnchorPoint(this->_labelAnchorPoint);
     
     // Update the label to match with the current state
     _currentTitle = getTitleForState(_state);
     
     _currentTitleColor = getTitleColorForState(_state);
     
     this->setTitleLabel(getTitleLabelForState(_state));
     
     LabelProtocol* label = dynamic_cast<LabelProtocol*>(getTitleLabel());
     if (label && !_currentTitle.empty())
     {
         label->setString(_currentTitle);
     }
     
     if (getTitleLabel())
     {
         getTitleLabel()->setColor(_currentTitleColor);
     }
     if (getTitleLabel() != nullptr)
     {
         getTitleLabel()->setPosition(Point (getContentSize().width / 2, getContentSize().height / 2));
     }
     
     // Update the background sprite
     this->setBackgroundSprite(this->getBackgroundSpriteForState(_state));
     if (getBackgroundSprite() != nullptr)
     {
         getBackgroundSprite()->setPosition(Point (getContentSize().width / 2, getContentSize().height / 2));
     }
     
     // Get the title label size
     Size titleLabelSize;
     if (getTitleLabel() != nullptr)
     {
         titleLabelSize = getTitleLabel()->getBoundingBox().size;
     }
     
     // Adjust the background image if necessary
     if (_doesAdjustBackgroundImage)
     {
         // Add the margins
         if (getBackgroundSprite() != nullptr)
         {
             getBackgroundSprite()->setContentSize(Size(titleLabelSize.width + _marginH * 2, titleLabelSize.height + _marginV * 2));
         }
     }
     else
     {
         //TODO: should this also have margins if one of the preferred sizes is relaxed?
         if (getBackgroundSprite() != nullptr)
         {
             Size preferredSize = getBackgroundSprite()->getPreferredSize();
             if (preferredSize.width <= 0)
             {
                 preferredSize.width = titleLabelSize.width;
             }
             if (preferredSize.height <= 0)
             {
                 preferredSize.height = titleLabelSize.height;
             }
             
             getBackgroundSprite()->setContentSize(preferredSize);
         }
     }
     
     // Set the content size
     Rect rectTitle;
     if (getTitleLabel() != nullptr)
     {
         rectTitle = getTitleLabel()->getBoundingBox();
     }
     Rect rectBackground;
     if (getBackgroundSprite() != nullptr)
     {
         rectBackground = getBackgroundSprite()->getBoundingBox();
     }
     
     Rect maxRect = ControlUtils::RectUnion(rectTitle, rectBackground);
     if (_maxSize.width > 0 && maxRect.size.width > _maxSize.width)
         maxRect.size.width = _maxSize.width;
     
     if (_maxSize.height > 0 && maxRect.size.height > _maxSize.height)
         maxRect.size.height = _maxSize.height;
     
     if (titleLabelSize.width > maxRect.size.width - _horizonPadding * 2)
         maxRect.size.width += _horizonPadding * 2;
     
     if (titleLabelSize.height > maxRect.size.height - _verticalPadding * 2)
         maxRect.size.height += _verticalPadding * 2;
     
     setContentSize(Size(maxRect.size.width, maxRect.size.height));
     
     if (getTitleLabel() != nullptr)
     {
         getTitleLabel()->setPosition(Point(getContentSize().width/2, getContentSize().height/2));
         // Make visible the background and the label
         getTitleLabel()->setVisible(true);
     }
     
     if (getBackgroundSprite() != nullptr)
     {
         getBackgroundSprite()->setPosition(Point(getContentSize().width/2, getContentSize().height/2));
         getBackgroundSprite()->setVisible(true);
         getBackgroundSprite()->setContentSize(maxRect.size);
     }
 }