Пример #1
0
MSBoolean MSWidget::traverseFocus(MSWidget *pWidget_)
{
  if (pWidget_==inputFocus()) return MSTrue;
  else if (pWidget_!=0)
   {
     if (pWidget_->_owner==0)
      {
	pWidget_->warpTo();
	return MSTrue;
      }
     else if (pWidget_->sensitive()==MSTrue&&pWidget_->acceptFocus()==MSTrue)
      {
	return setFocus(pWidget_);
      }
   }
  else if (pWidget_==0) return releaseFocus();
  return MSFalse;
}
Пример #2
0
void ProcessEvent(SDL_Event &inEvent)
{
	switch(inEvent.type)
	{
		case SDL_QUIT:
		{
			Event close(etQuit);
			sgSDLFrame->ProcessEvent(close);
			break;
		}
		case SDL_WINDOWEVENT:
		{
			switch (inEvent.window.event)
			{
				case SDL_WINDOWEVENT_SHOWN:
				{
					Event activate(etActivate);
					sgSDLFrame->ProcessEvent(activate);
					break;
				}
				case SDL_WINDOWEVENT_HIDDEN:
				{
					Event deactivate(etDeactivate);
					sgSDLFrame->ProcessEvent(deactivate);
					break;
				}
				case SDL_WINDOWEVENT_EXPOSED:
				{
					Event poll(etPoll);
					sgSDLFrame->ProcessEvent(poll);
					break;
				}
				//case SDL_WINDOWEVENT_MOVED: break;
				//case SDL_WINDOWEVENT_RESIZED: break;
				case SDL_WINDOWEVENT_SIZE_CHANGED:
				{
					Event resize(etResize, inEvent.window.data1, inEvent.window.data2);
					sgSDLFrame->Resize(inEvent.window.data1, inEvent.window.data2);
					sgSDLFrame->ProcessEvent(resize);
					break;
				}
				//case SDL_WINDOWEVENT_MINIMIZED: break;
				//case SDL_WINDOWEVENT_MAXIMIZED: break;
				//case SDL_WINDOWEVENT_RESTORED: break;
				//case SDL_WINDOWEVENT_ENTER: break;
				//case SDL_WINDOWEVENT_LEAVE: break;
				case SDL_WINDOWEVENT_FOCUS_GAINED:
				{
					Event inputFocus(etGotInputFocus);
					sgSDLFrame->ProcessEvent(inputFocus);
					break;
				}
				case SDL_WINDOWEVENT_FOCUS_LOST:
				{
					Event inputFocus(etLostInputFocus);
					sgSDLFrame->ProcessEvent(inputFocus);
					break;
				}
				case SDL_WINDOWEVENT_CLOSE:
				{
					Event deactivate(etDeactivate);
					sgSDLFrame->ProcessEvent(deactivate);
					
					Event kill(etDestroyHandler);
					sgSDLFrame->ProcessEvent(kill);
					break;
				}
				default: break;
			}
		}
		case SDL_MOUSEMOTION:
		{
			Event mouse(etMouseMove, inEvent.motion.x, inEvent.motion.y);
			#if defined(WEBOS) || defined(BLACKBERRY)
			mouse.value = inEvent.motion.which;
			mouse.flags |= efLeftDown;
			#else
			AddModStates(mouse.flags);
			#endif
			sgSDLFrame->ProcessEvent(mouse);
			break;
		}
		case SDL_MOUSEBUTTONDOWN:
		{
			Event mouse(etMouseDown, inEvent.button.x, inEvent.button.y, inEvent.button.button - 1);
			#if defined(WEBOS) || defined(BLACKBERRY)
			mouse.value = inEvent.motion.which;
			mouse.flags |= efLeftDown;
			#else
			AddModStates(mouse.flags);
			#endif
			sgSDLFrame->ProcessEvent(mouse);
			break;
		}
		case SDL_MOUSEBUTTONUP:
		{
			Event mouse(etMouseUp, inEvent.button.x, inEvent.button.y, inEvent.button.button - 1);
			#if defined(WEBOS) || defined(BLACKBERRY)
			mouse.value = inEvent.motion.which;
			#else
			AddModStates(mouse.flags);
			#endif
			sgSDLFrame->ProcessEvent(mouse);
			break;
		}
		case SDL_KEYDOWN:
		case SDL_KEYUP:
		{
			Event key(inEvent.type == SDL_KEYDOWN ? etKeyDown : etKeyUp );
			bool right;
			key.value = SDLKeyToFlash(inEvent.key.keysym.sym, right);
			if (inEvent.type == SDL_KEYDOWN)
			{
				//key.code = key.value==keyBACKSPACE ? keyBACKSPACE : inEvent.key.keysym.unicode;
				key.code = inEvent.key.keysym.scancode;
				sLastUnicode[inEvent.key.keysym.scancode] = key.code;
			}
			else
				// SDL does not provide unicode on key up, so remember it,
				//  keyed by scancode
				key.code = sLastUnicode[inEvent.key.keysym.scancode];
			
			AddModStates(key.flags, inEvent.key.keysym.mod);
			if (right)
				key.flags |= efLocationRight;
			sgSDLFrame->ProcessEvent(key);
			break;
		}
		case SDL_JOYAXISMOTION:
		{
			Event joystick(etJoyAxisMove);
			joystick.id = inEvent.jaxis.which;
			joystick.code = inEvent.jaxis.axis;
			joystick.value = inEvent.jaxis.value;
			sgSDLFrame->ProcessEvent(joystick);
			break;
		}
		case SDL_JOYBALLMOTION:
		{
			Event joystick(etJoyBallMove, inEvent.jball.xrel, inEvent.jball.yrel);
			joystick.id = inEvent.jball.which;
			joystick.code = inEvent.jball.ball;
			sgSDLFrame->ProcessEvent(joystick);
			break;
		}
		case SDL_JOYBUTTONDOWN:
		{
			Event joystick(etJoyButtonDown);
			joystick.id = inEvent.jbutton.which;
			joystick.code = inEvent.jbutton.button;
			sgSDLFrame->ProcessEvent(joystick);
			break;
		}
		case SDL_JOYBUTTONUP:
		{
			Event joystick(etJoyButtonUp);
			joystick.id = inEvent.jbutton.which;
			joystick.code = inEvent.jbutton.button;
			sgSDLFrame->ProcessEvent(joystick);
			break;
		}
		case SDL_JOYHATMOTION:
		{
			Event joystick(etJoyHatMove);
			joystick.id = inEvent.jhat.which;
			joystick.code = inEvent.jhat.hat;
			joystick.value = inEvent.jhat.value;
			sgSDLFrame->ProcessEvent(joystick);
			break;
		}
	}
};