#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. redis之(十七)自己实现redis的cluster集群环境的搭建

    [一]创建不同节点的配置文件和目录.并将配置文件中的port,cluster-enable,daemonize项做修改. --->port:修改成redis实例对应的端口号 --->clu ...

  2. Multiply Strings——面试题

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  3. WordPress主题设置插件,让你的站点有电脑、手机双主题

    我们建站的时候总是会优先考虑自适应的主题,但是与之对应,免费的自适应主题都调用国外公共资源,访问速度不太理想.加上wordpress未经优化之前,本身也没有极高的访问效率.所以大家可以下载这款“主题设 ...

  4. 【JBPM4】任务节点-任务分配assignment-Handler

    JPDL <?xml version="1.0" encoding="UTF-8"?> <process key="task&quo ...

  5. AC日记——「SCOI2016」美味 LiBreOJ 2016

    #2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...

  6. 【初探移动前端开发】jQuery Mobile 二

    本文例子请使用手机查看 List列表 在移动设备平台下,由于移动设备屏幕比较小,我们又是用手在上面点击的触屏方式,传统的列表模式在手机上就不太友好了. 虽然HTML5与CSS3提供了强大的界面实现方案 ...

  7. textarea 内容不可编辑 自是适应高度 只读相关属性配置

    不可编辑: <textarea disabled="disabled"></textarea> 如果仅仅用于禁止输入(只读,但有用),使用readonly属 ...

  8. RUP你知道多少?

    RUP 相信学UML的同学,对此都很耳熟,当然也眼熟,可是,对于RUP,你了解多少呢? 首先,什么是RUP? RUP是Rational UnifiedProcess,统一软件开发过程,是一个面向对象且 ...

  9. BZOJ 4260 Codechef REBXOR(字典树)

    [题目链接]  http://www.lydsy.com/JudgeOnline/problem.php?id=4260 [题目大意] 给出一个数列,请找出两段连续且不相交的数段,使得其分别异或和的和 ...

  10. linux中django部署

    下载nginx yum install nginx rpm -ql nginx systemctl start nginx /usr/share/nginx/html # html页面 /etc/ng ...