#ifndef __CCCONTROL_BUTTON_H__

#define __CCCONTROL_BUTTON_H__

#include "CCControl.h"

#include "CCInvocation.h"

#include "CCScale9Sprite.h"

NS_CC_EXT_BEGIN

/* Define the button margin for Left/Right edge */

#define CCControlButtonMarginLR 8 // px

/* Define the button margin for Top/Bottom edge */

#define CCControlButtonMarginTB 2 // px

/**

* @addtogroup GUI

* @{

* @addtogroup control_extension

* @{

*/

/** @class CCControlButton Button control for Cocos2D. */

class CCControlButton : public CCControl

{

public:

CCControlButton();

virtual ~CCControlButton();

virtual void needsLayout(void);

virtual void setEnabled(bool enabled);

virtual void setSelected(bool enabled);

virtual void setHighlighted(bool enabled);

protected:

// CCRGBAProtocol

//bool m_bIsOpacityModifyRGB;

/** The current title that is displayed on the button. */

CC_SYNTHESIZE_READONLY(CCString*, m_currentTitle, CurrentTitle);

/** The current color used to display the title. */

CC_SYNTHESIZE_READONLY_PASS_BY_REF(ccColor3B, m_currentTitleColor, CurrentTitleColor);

/** Adjust the background image. YES by default. If the property is set to NO, the

background will use the prefered size of the background image. */

bool doesAdjustBackgroundImage();

void setAdjustBackgroundImage(bool adjustBackgroundImage);

bool m_doesAdjustBackgroundImage;

/** The current title label. */

CC_SYNTHESIZE_RETAIN(CCNode*, m_titleLabel, TitleLabel);

/** The current background sprite. */

CC_SYNTHESIZE_RETAIN(CCScale9Sprite*, m_backgroundSprite, BackgroundSprite);

/** The prefered size of the button, if label is larger it will be expanded. */

CC_PROPERTY(CCSize, m_preferredSize, PreferredSize);

/** Adjust the button zooming on touchdown. Default value is YES. */

CC_PROPERTY(bool, m_zoomOnTouchDown, ZoomOnTouchDown);

CC_PROPERTY(CCPoint, m_labelAnchorPoint, LabelAnchorPoint);

/* Override setter to affect a background sprite too */

virtual GLubyte getOpacity(void);

virtual void setOpacity(GLubyte var);

virtual const ccColor3B& getColor(void);

virtual void setColor(const ccColor3B&);

/** Flag to know if the button is currently pushed.  */

protected:

bool m_isPushed;

bool m_bParentInited;

public:

bool isPushed() { return m_isPushed; }

// <CCControlState, CCString*>

CC_SYNTHESIZE_RETAIN(CCDictionary*, m_titleDispatchTable, TitleDispatchTable);

// <CCControlState, CCColor3bObject*>

CC_SYNTHESIZE_RETAIN(CCDictionary*, m_titleColorDispatchTable, TitleColorDispatchTable);

// <CCControlState, CCNode*>

CC_SYNTHESIZE_RETAIN(CCDictionary*, m_titleLabelDispatchTable, TitleLabelDispatchTable);

// <CCControlState, CCScale9Sprite*>

CC_SYNTHESIZE_RETAIN(CCDictionary*, m_backgroundSpriteDispatchTable, BackgroundSpriteDispatchTable);

/* Define the button margin for Top/Bottom edge */

CC_SYNTHESIZE_READONLY(int, m_marginV, VerticalMargin);

/* Define the button margin for Left/Right edge */

CC_SYNTHESIZE_READONLY(int, m_marginH, HorizontalOrigin);

//set the margins at once (so we only have to do one call of needsLayout)

virtual void setMargins(int marginH, int marginV);

public:

virtual bool init();

virtual bool initWithLabelAndBackgroundSprite(CCNode* label, CCScale9Sprite* backgroundSprite);

static CCControlButton* create(CCNode* label, CCScale9Sprite* backgroundSprite);

virtual bool initWithTitleAndFontNameAndFontSize(std::string title, const char * fontName, float fontSize);

static CCControlButton* create(std::string title, const char * fontName, float fontSize);

virtual bool initWithBackgroundSprite(CCScale9Sprite* sprite);

static CCControlButton* create(CCScale9Sprite* sprite);

//events

virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);

virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

/**

* Returns the title used for a state.

*

* @param state The state that uses the title. Possible values are described in

* "CCControlState".

*

* @return The title for the specified state.

*/

virtual CCString* getTitleForState(CCControlState state);

/**

* Sets the title string to use for the specified state.

* If a property is not specified for a state, the default is to use

* the CCButtonStateNormal value.

*

* @param title The title string to use for the specified state.

* @param state The state that uses the specified title. The values are described

* in "CCControlState".

*/

virtual void setTitleForState(CCString* title, CCControlState state);

/**

* Returns the title color used for a state.

*

* @param state The state that uses the specified color. The values are described

* in "CCControlState".

*

* @return The color of the title for the specified state.

*/

virtual const ccColor3B getTitleColorForState(CCControlState state);

/**

* Sets the color of the title to use for the specified state.

*

* @param color The color of the title to use for the specified state.

* @param state The state that uses the specified color. The values are described

* in "CCControlState".

*/

virtual void setTitleColorForState(ccColor3B color, CCControlState state);

/**

* Returns the title label used for a state.

*

* @param state The state that uses the title label. Possible values are described

* in "CCControlState".

*/

virtual CCNode* getTitleLabelForState(CCControlState state);

/**

* Sets the title label to use for the specified state.

* If a property is not specified for a state, the default is to use

* the CCButtonStateNormal value.

*

* @param title The title label to use for the specified state.

* @param state The state that uses the specified title. The values are described

* in "CCControlState".

*/

virtual void setTitleLabelForState(CCNode* label, CCControlState state);

virtual void setTitleTTFForState(const char * fntFile, CCControlState state);

virtual const char * getTitleTTFForState(CCControlState state);

virtual void setTitleTTFSizeForState(float size, CCControlState state);

virtual float getTitleTTFSizeForState(CCControlState state);

/**

* Sets the font of the label, changes the label to a CCLabelBMFont if neccessary.

* @param fntFile The name of the font to change to

* @param state The state that uses the specified fntFile. The values are described

* in "CCControlState".

*/

virtual void setTitleBMFontForState(const char * fntFile, CCControlState state);

virtual const char * getTitleBMFontForState(CCControlState state);

/**

* Returns the background sprite used for a state.

*

* @param state The state that uses the background sprite. Possible values are

* described in "CCControlState".

*/

virtual CCScale9Sprite* getBackgroundSpriteForState(CCControlState state);

/**

* Sets the background sprite to use for the specified button state.

*

* @param sprite The background sprite to use for the specified state.

* @param state The state that uses the specified image. The values are described

* in "CCControlState".

*/

virtual void setBackgroundSpriteForState(CCScale9Sprite* sprite, CCControlState state);

/**

* Sets the background spriteFrame to use for the specified button state.

*

* @param spriteFrame The background spriteFrame to use for the specified state.

* @param state The state that uses the specified image. The values are described

* in "CCControlState".

*/

virtual void setBackgroundSpriteFrameForState(CCSpriteFrame * spriteFrame, CCControlState state);

static CCControlButton* create();

};

// end of GUI group

/// @}

/// @}

NS_CC_EXT_END

#endif

CCControlExtension/CCControlButton的更多相关文章

  1. 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

    学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...

  2. Cocos2d-x-html5之HelloWorld深入分析与调试

    Cocos2d-x-html5之HelloWorld深入分析与调试 另:本章所用Cocos2d-x版本为: Cocos2d-html5-v2.1.1 http://cn.cocos2d-x.org/d ...

  3. GUI之CCControlExtension

    Introduction CCControl is inspired by the UIControl API class from the UIKit library of CocoaTouch. ...

  4. cocos2dx CCControlButton button大事

    =================================.cpp文件 <pre name="code" class="cpp">bool ...

  5. 1cocos2dx扩展UI控制,CCControlSlider,CCScale9Sprite(九妹图。),CCControlSwitch,CCControlButton

     UI控件来自cocos2dx的扩展库.完好了UI方面的元素,使cocos2dx更加丰富多彩.使用扩展库需包括: #include "cocos-ext.h" USING_NS ...

  6. 【转】CCScale9Sprite和CCControlButton

    转自:http://blog.csdn.net/nat_myron/article/details/12975145 在2dx下用到了android下的.9.png图片,下面是原图   查了一下2dx ...

  7. CCControlSwitch 、CCControlSlider、CCControlButton

    /* *bool hasMoved(); 这里获取的不是开关是否正在被用户拨动,而是开关最终的状态是由用户手动拨动开关进行的, *还是用户点击开关进行的状态更改 */ CCControlSwitch* ...

  8. 12.解决CCScale9Sprite或者CCControlButton无法使用的问题。

    问题: 使用CCScale9Sprite或者CCControlButton等控件的时候,会出现无法识别的情况. 解决方式: 1.include对应的头部,即#include "cocos-e ...

  9. cocos2dx基础篇(10) 按钮控件CCControlButton

    [3.x] (1)去掉 “CC” (2)对象类 CCObject 改为 Ref (3)按钮事件回调依旧为 cccontrol_selector ,没有使用 CC_CALLBACK_2 (4)按钮状态  ...

随机推荐

  1. redux saga学习

    来源地址:https://www.youtube.com/watch?v=o3A9EvMspig Saga的基本写法 takeEvery与takeLatest的区别 takeEvery是指响应每一个请 ...

  2. apache几个常见配置文件的作用

    进行虚拟主机配置 NameVirtuaHost *:80 表示基于名称的虚拟主机  *:80表示监听本机所有IP的80端口上提供HTTP服务,*可以设置为具体IP<VirtualHost *:8 ...

  3. 一个微服务+DDD(领域驱动设计)的代码结构示例

    前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : https://www.cnblogs.com/hafiz/p/9388334.htmlhttps://blog.cs ...

  4. 并发系列6-Java并发面试系列文章总结【石杉的架构笔记】

  5. Keras 训练时出现 CUDA_ERROR_OUT_OF_MEMORY 错误

    不用惊慌,再试一次.估计当时GPU内存可分配不足,可手动结束所有python程序后释放相关GPU内存,或者重新运行一次终端

  6. NOIP2017酱油记

    分数线终于出了,于是大胆地写下了这篇博文. 提高组Day1: T1: 打开PDF就感觉到一股骚气,不忘初心什么鬼啊??T1是数论??好一个不忘初心... 看一下样例1:3 7:11 莫不是3*7-10 ...

  7. Luogu P3960 列队 线段树

    题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...

  8. Java高级架构师(一)第39节:Nginx的Rewrite模块

  9. [转]JSP中常见的Tomcat报错错误解析(二)

    jsp常见错误代码文章分类:Java编程 jsp常见错误代码你用的是weblogic还是tomcat服务器.?出现404和500错误是初学jsp的朋友经常遇到的问题. IIS状态代码的含义 概要 当用 ...

  10. Hiho : 二分·二分查找之k小数

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettl ...