void BZSpriteButton::_onPressedAnimationFinished() { if (!_bEnabled) return; _Debug("button %s animated", this->getModName().c_str()); _setAnimateState(BS_Animated); if ((_touchState & TS_Down) && (_touchState & TS_Up)) { _onClick(); } }
void BZSpriteButton::onTouched(CAEventTouch* pEvent) { if (!_bEnabled) return; GUARD_FUNCTION(); switch (pEvent->state()) { case kTouchStateGrabbed: _Debug("button %s touch grabbed", this->getModName().c_str()); if (_animateState == BS_Idle || _animateState == BS_Animated) { _Debug("button %s press", this->getModName().c_str()); _touchState |= TS_Down; _setAnimateState(BS_Animating); setState(ButtonPose_Pressed, true); CASpriteModelPose* ppose = this->getCurrentPose(); if (ppose->name() != ButtonPose_Pressed) { _onPressedAnimationFinished(); } } else if (_animateState == BS_Animating) { //do nothing } break; case kTouchStateUngrabbed: _Debug("button %s touch ungrabbed", this->getModName().c_str()); if (_animateState == BS_Idle) { } else if (_animateState == BS_Animating) { _Debug("button %s touch up flag", this->getModName().c_str()); _touchState |= TS_Up; } else if (_animateState == BS_Animated) { _Debug("button %s touch end, onclick", this->getModName().c_str()); if (_bEnabled) _onClick(); } break; } }
void Gdl_updateMsg(void) // will manage event and launch callback { #ifdef usePtc ptc_getMsg(); #endif #ifdef useSdl SDL_Event event; /* Check for events */ while (SDL_PollEvent (&event)) { u32 key; switch (event.type) { case SDL_KEYDOWN: key = event.key.keysym.sym; /* if press Ctrl + C, terminate program */ // if ( (key == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) ) done = 1; if(key < keyArraySize) { if(_onKey) _onKey(key,1); lastKey[key]=keyArray[key]; keyArray[key]=1; } break; case SDL_KEYUP: key = event.key.keysym.sym; if(key < keyArraySize) { if(_onKey) _onKey(key,0); lastKey[key]=keyArray[key]; keyArray[key]=0; } break; case SDL_JOYBUTTONDOWN: /* if press Start button, terminate program */ if ( event.jbutton.button == 8 ) done = 1; break; case SDL_JOYBUTTONUP: break; case SDL_MOUSEMOTION: mousex = event.motion.x; mousey = event.motion.y; isMouseHere = 1; if(_onMove) _onMove(); break; case SDL_MOUSEBUTTONDOWN: isMouseHere = 1; switch(event.button.button) { case SDL_BUTTON_LEFT: mouseLeftState=1; if(_onClick)_onClick(-1,1); break; case SDL_BUTTON_MIDDLE: mouseMidlState=1; if(_onClick)_onClick( 0,1); break; case SDL_BUTTON_RIGHT : mouseRightState=1; if(_onClick)_onClick( 1,1); break; }; break; case SDL_MOUSEBUTTONUP: isMouseHere = 1; switch(event.button.button) { case SDL_BUTTON_LEFT: mouseLeftState=0; if(_onClick)_onClick(-1,0); break; case SDL_BUTTON_MIDDLE: mouseMidlState=0; if(_onClick)_onClick( 0,0); break; case SDL_BUTTON_RIGHT : mouseRightState=0; if(_onClick)_onClick( 1,0); break; }; break; case SDL_ACTIVEEVENT: if(event.active.state != SDL_APPMOUSEFOCUS) isAppActive = event.active.gain; else isMouseHere = event.active.gain; break; case SDL_QUIT: done = 1; break; default: break; } } #endif }
u32 Gdl_processMsg(u32 msg, u32 arg1, u32 arg2) { #ifdef usePtc switch(msg) { /* a key was pushed */ case WM_KEYDOWN: { u32 key = (arg1&0xFF); if(key < 256) { if(_onKey) _onKey(key,1); keyArray[key+512]=keyArray[key]; keyArray[key]=1; } } break; /* a key was released */ case WM_KEYUP: { u32 key = (arg1&0xFF); if(key < 256) { if(_onKey) _onKey(key,0); keyArray[key+512]=keyArray[key]; keyArray[key]=0; } } break; /* mouse left click */ case WM_LBUTTONDOWN: if(_onClick) _onClick(-1,1); mouseLeftState=1; break; /* mouse left click end */ case WM_LBUTTONUP: if(_onClick) _onClick(-1,0); mouseLeftState=0; break; /* mouse right click */ case WM_RBUTTONDOWN: if(_onClick) _onClick(1,1); mouseRightState = 1 ; break; /* mouse right click end */ case WM_RBUTTONUP: if(_onClick) _onClick(1,0); mouseRightState = 0 ; break; /* mouse middle click */ case WM_MBUTTONDOWN: if(_onClick) _onClick(0,1); mouseMidlState = 1 ; break; /* mouse middle click end */ case WM_MBUTTONUP: if(_onClick) _onClick(0,0); mouseMidlState = 0 ; break; /* a file is dropped onto the app */ case WM_DROPFILES: { char *path = (char*)malloc(512); u32 nb = DragQueryFile((HDROP)arg1,0xffffffff,path,256); for(u32 n=0;n<nb;n++) { DragQueryFile((HDROP)arg1,n,path,256); if(_onFileDrop) _onFileDrop(path); } DragFinish((HDROP)arg1); // say at wdows we have finish free(path); } break; /* mouse has move */ case WM_MOUSEMOVE: isMouseHere = 1; mouseLeftState = (((int)arg1) & MK_LBUTTON); if(_onMove) _onMove(); break; /* whell rolled */ case 0x020A : { int way = ((int)arg1) < 0 ; // way == 1 -> whell go down if(_onWhell) _onWhell(way); } break; /* focus killed */ case WM_KILLFOCUS: isAppActive = 0; if(_onFocus) _onFocus(0); break; /* focus set */ case WA_CLICKACTIVE: case WA_ACTIVE: case WM_SETFOCUS: isAppActive = 1; if(_onFocus) _onFocus(1); break; /* app closed */ case WM_CLOSE: Gdl_exit(1); break; /* full screen switch */ case 0x42424242: break; /* mouse leave windows */ case WM_NCMOUSEMOVE: //case WM_CAPTURECHANGED: isMouseHere = 0; //if(_onMouseOut) _onMouseOut(); break; default: return 0; }; #endif return 1; }