#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. 使用python读取文本中结构化数据

    需求 read some .txt file in dir and find min and max num in file. solution: echo *.txt > file.name ...

  2. python IDE的配置

    本人使用过的两款,系统环境ubuntukylin 15.04 jupyter 主要参考:ref1 和 ref2 遇到问题: error: [I 21:48:41.947 NotebookApp] Wr ...

  3. AC日记——Sagheer and Crossroads codeforces 812a

    812A - Sagheer and Crossroads 思路: 模拟: 代码: #include <cstdio> #include <cstring> #include ...

  4. OpenStack 认证服务 KeyStone 服务注册(六)

    一)检查keystone是否安装配置成功 1.1删除环境变量的配置 unset OS_AUTH_URL redhat 1.2 请求令牌认证 admin用户,请求认证令牌 openstack --os- ...

  5. Win7 + VirtualBox + CentOS (服务器版 无桌面) 使用共享文件夹

    http://jingyan.baidu.com/article/b2c186c8ffb607c46ff6ff61.html

  6. zabbix主机自动发现

    环境说明 角色 主机名 IP zabbix-server c1.heboan.com 192.168.88.1 zabbix-agent c2.heboan.com 192.168.88.2 zabb ...

  7. PHP 自定义字符串中的变量名解析

    PHP 自定义字符串中的变量名解析   这样一个需求:页面的 title 可以在后台自定义,自定义内容中可能包含变量,变量用 {$var} 表示, 其中 $var 为变量名 将 title 字段存入数 ...

  8. Fatal error: Call to undefined function mb_detect_encoding()

    1.找到php扩展目录(我的php扩展目录的路径是:C:\Program Files\AppServ\php\extensions)     在extensions目录下面找到php_mbstring ...

  9. 在Linux系统环境下修改MySQL的root密码

    root用户登录系统 /usr/local/mysql/bin/mysqladmin -u root -p password 新密码 enter password 旧密码 第二种方法: root用户登 ...

  10. Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

    说明:启动时注意用户权限,比如root用户启动. Ubuntu: 服务器环境:Ubuntu 16.04 64位系统 内网IP:10.143.80.116 外网IP:203.195.1.2 OpenVP ...