Wrapper classes for the emwin library
Dependents: app_emwin1 app_emwin2_pos lpc4088_ebb_gui_emwin
Diff: EwButton.cpp
- Revision:
- 0:316c181e9b65
diff -r 000000000000 -r 316c181e9b65 EwButton.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EwButton.cpp Mon Dec 16 07:03:22 2013 +0000 @@ -0,0 +1,191 @@ +#include "mbed.h" + +#include "EwButton.h" + + +EwButton::EwButton(EwWindow* parent) : EwWindow(parent) { + init(0, 0, 0, 0, parent); +} + +EwButton::EwButton(int x, int y, int width, int height, EwWindow* parent) : + EwWindow(x, y, width, height, parent) { + + init(x, y, width, height, parent); +} + +void EwButton::setText(const char* text) { + BUTTON_SetText(_hWnd, text); +} + +void EwButton::getText(char* pBuf, int bufSz) { + BUTTON_GetText(_hWnd, pBuf, bufSz); +} + +ewColor_t EwButton::getBackgroundColor(ewButtonColorIndex_t idx) { + return BUTTON_GetBkColor(_hWnd, idx); +} + +void EwButton::setBackgroundColor(ewButtonColorIndex_t idx, ewColor_t c) { + BUTTON_SetBkColor(_hWnd, idx, c); +} + +const ewFont_t* EwButton::getFont() { + return BUTTON_GetFont(_hWnd); +} + +void EwButton::setFont(const ewFont_t* pFont) { + BUTTON_SetFont(_hWnd, pFont); +} + +ewTextAlign_t EwButton::getTextAlign() { + return (ewTextAlign_t)BUTTON_GetTextAlign(_hWnd); +} + +void EwButton::setTextAlign(ewTextAlign_t align) { + BUTTON_SetTextAlign(_hWnd, align); +} + +ewColor_t EwButton::getTextColor(ewButtonColorIndex_t idx) { + return BUTTON_GetTextColor(_hWnd, idx); +} + +void EwButton::setTextColor(ewButtonColorIndex_t idx, ewColor_t c) { + BUTTON_SetTextColor(_hWnd, idx, c); +} + +void EwButton::setFocusColor(ewColor_t c) { + BUTTON_SetFocusColor(_hWnd, c); +} + +void EwButton::setFocussable(bool focussable) { + BUTTON_SetFocussable(_hWnd, (focussable ? 1 : 0)); +} + +void EwButton::setPressed(bool pressed) { + BUTTON_SetPressed(_hWnd, (pressed ? 1 : 0)); +} + +bool EwButton::isPressed() { + return (BUTTON_IsPressed(_hWnd) == 1); +} + + +void EwButton::setTextOffset(int32_t xPos, int32_t yPos) { + BUTTON_SetTextOffset(_hWnd, xPos, yPos); +} + +const ewBitmap_t* EwButton::getBitmap(ewButtonColorIndex_t idx) { + return BUTTON_GetBitmap(_hWnd, idx); +} + +void EwButton::setBitmap(ewButtonColorIndex_t idx, const ewBitmap_t* pBitmap) { + BUTTON_SetBitmap(_hWnd, idx, pBitmap); +} + +void EwButton::setBitmap(ewButtonColorIndex_t idx, const ewBitmap_t* pBitmap, int32_t x, int32_t y) { + BUTTON_SetBitmapEx(_hWnd, idx, pBitmap, x, y); +} + +void EwButton::setPressedListener(void (*fptr)(EwWindow* w)) { + _pressedListener.attach(fptr); +} + +void EwButton::setReleasedListener(void (*fptr)(EwWindow* w)) { + _releasedListener.attach(fptr); +} + +void EwButton::setClickedListener(void (*fptr)(EwWindow* w)) { + _clickedListener.attach(fptr); +} + +ewColor_t EwButton::getDefaultBackgroundColor(ewButtonColorIndex_t idx) { + return BUTTON_GetDefaultBkColor(idx); +} + +void EwButton::setDefaultBackgroundColor(ewButtonColorIndex_t idx, ewColor_t c) { + BUTTON_SetDefaultBkColor(c, idx); +} + +void EwButton::setDefaultFont(const ewFont_t* pFont) { + BUTTON_SetDefaultFont(pFont); +} + +const ewFont_t* EwButton::getDefaultFont() { + return BUTTON_GetDefaultFont(); +} + +ewTextAlign_t EwButton::getDefaultTextAlign() { + return (ewTextAlign_t) BUTTON_GetDefaultTextAlign(); +} + +void EwButton::setDefaultTextAlign(ewTextAlign_t align) { + BUTTON_SetDefaultTextAlign(align); +} + +ewColor_t EwButton::getDefaultTextColor(ewButtonColorIndex_t idx) { + return BUTTON_GetDefaultTextColor(idx); +} + +void EwButton::setDefaultTextColor(ewButtonColorIndex_t idx, ewColor_t c) { + BUTTON_SetDefaultTextColor(c, idx); +} + +void EwButton::setDefaultFocusColor(ewColor_t c) { + BUTTON_SetDefaultFocusColor(c); +} + + +void EwButton::init(int x, int y, int width, int height, EwWindow* parent) { + BUTTON_Handle h; + GUI_HWIN hWin = 0; + + _inputStatePressed = false; + + if (parent) { + hWin = _getHandle(parent); + } + + h = BUTTON_CreateEx(x, y, width, height, hWin, (WM_CF_SHOW| WM_CF_MEMDEV), + 0, _guiWidgetId++); + _setNewHandle(h, _callback); +} + +void EwButton::handleInput(bool pressed, bool onWidget) { + + // pressed will always be on top of widget + if (pressed && !_inputStatePressed) { + _pressedListener.call(this); + } + + // always generate a released event (even if not released on top of widget) + if (!pressed && _inputStatePressed) { + _releasedListener.call(this); + } + + if (!pressed && _inputStatePressed && onWidget) { + _clickedListener.call(this); + } + + _inputStatePressed = pressed; +} + +void EwButton::_callback(WM_MESSAGE* pMsg, EwWindow* w) { + GUI_PID_STATE* pidState; + + // always let button widget process the event first + BUTTON_Callback(pMsg); + + switch(pMsg->MsgId) { + case WM_TOUCH: + pidState = (GUI_PID_STATE*)pMsg->Data.p; + + EwButton* b = (EwButton*)w; + b->handleInput((pidState->Pressed == 1), + (pidState->Pressed == 1 || pidState->Pressed == 0)); + + + break; + } + +} +