Exemple #1
0
Gui::Gui(Scene& scene,
         Game& game,
         Camera& camera,
         Input& input,
         Timer& timer) :
    m_game(game),
    m_camera(camera),
    m_scene(scene),
    m_timer(timer)
{
    TwInit(TW_OPENGL_CORE, nullptr);
    TwWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);

    const std::string barname = "GraphicsTweaker";
    m_tweakbar = TwNewBar(barname.c_str());
    m_tweaker = std::make_unique<Tweaker>(m_tweakbar);
    
    const int border = 10;
    std::ostringstream stream;
    stream << barname << " label='Graphics Tweaker' " 
        << "position='" << border << " " << border << "' "
        << "size='250 " << WINDOW_HEIGHT-border*2 << "' "
        << "alpha=180 text=light valueswidth=80 color='0 0 0' "
        << "refresh=0.05 iconified=false resizable=true "
        << "fontsize=2 fontresizable=false ";
    TwDefine(stream.str().c_str());

    FillTweakBar();

    auto AddKeyCallback = [&input](unsigned int key, unsigned int code)
    {
        input.AddCallback(key, false, [code]()
        { 
            TwKeyPressed(code, 0);
        });
    };

    // Keys required for modifying entries in the tweak bar
    AddKeyCallback(GLFW_KEY_0, '0');
    AddKeyCallback(GLFW_KEY_1, '1');
    AddKeyCallback(GLFW_KEY_2, '2');
    AddKeyCallback(GLFW_KEY_3, '3');
    AddKeyCallback(GLFW_KEY_4, '4');
    AddKeyCallback(GLFW_KEY_5, '5');
    AddKeyCallback(GLFW_KEY_6, '6');
    AddKeyCallback(GLFW_KEY_7, '7');
    AddKeyCallback(GLFW_KEY_8, '8');
    AddKeyCallback(GLFW_KEY_9, '9');
    AddKeyCallback(GLFW_KEY_PERIOD, '.');
    AddKeyCallback(GLFW_KEY_MINUS, '-');
    AddKeyCallback(GLFW_KEY_ENTER, TW_KEY_RETURN);
    AddKeyCallback(GLFW_KEY_LEFT, TW_KEY_LEFT);
    AddKeyCallback(GLFW_KEY_RIGHT, TW_KEY_RIGHT);
    AddKeyCallback(GLFW_KEY_TAB, TW_KEY_TAB);
    AddKeyCallback(GLFW_KEY_END, TW_KEY_END);
    AddKeyCallback(GLFW_KEY_HOME, TW_KEY_HOME);
    AddKeyCallback(GLFW_KEY_BACKSPACE, TW_KEY_BACKSPACE);

    LogInfo("GUI: Tweak bar initialised");
}
Exemple #2
0
int TW_CALL TwEventCharGLFW(int glfwChar, int glfwAction)
{
	if( glfwAction==GLFW_PRESS && (glfwChar & 0xff00)==0 )
		return TwKeyPressed(glfwChar, g_KMod);
	else
		return 0;
}
 void updateEvents() const
 {
     unsigned int size = _eventsToHandle.size();
     for ( unsigned int i=0; i<size; ++i )
     {
         const osgGA::GUIEventAdapter& ea = *(_eventsToHandle.front());
         float x = ea.getX(), y = ea.getWindowHeight() - ea.getY();
         switch ( ea.getEventType() )
         {
         case osgGA::GUIEventAdapter::PUSH:
             TwMouseMotion( x, y );
             TwMouseButton( TW_MOUSE_PRESSED, getTwButton(ea.getButton()) );
             break;
         case osgGA::GUIEventAdapter::RELEASE:
             TwMouseMotion( x, y );
             TwMouseButton( TW_MOUSE_RELEASED, getTwButton(ea.getButton()) );
             break;
         case osgGA::GUIEventAdapter::DRAG:
         case osgGA::GUIEventAdapter::MOVE:
             TwMouseMotion( x, y );
             break;
         case osgGA::GUIEventAdapter::KEYDOWN:
             {
                 bool useCtrl = false;
                 if ( ea.getModKeyMask()&osgGA::GUIEventAdapter::MODKEY_CTRL ) useCtrl = true;
                 TwKeyPressed( getTwKey(ea.getKey(), useCtrl), getTwModKeyMask(ea.getModKeyMask()) );
             }
             break;
         default: break;
         }
         const_cast<TwGUIManager*>(this)->_eventsToHandle.pop();
     }
 }
int TW_CALL TwEventCharModsGLFW3(GLFWwindow *window, int glfwChar, int glfwMods)
{
    if( (glfwChar & 0xff00)==0 )
        return TwKeyPressed(glfwChar, convertModifiers(glfwMods));

    return 0;
}
Exemple #5
0
void GUI::onKeyPressed(int key, int mod) {

  switch(key) {
    case GLFW_KEY_LEFT: key = TW_KEY_LEFT; break;
    case GLFW_KEY_RIGHT: key = TW_KEY_RIGHT; break;
    case GLFW_KEY_UP: key = TW_KEY_UP; break;
    case GLFW_KEY_DOWN: key = TW_KEY_DOWN; break;
    case GLFW_KEY_BACKSPACE: key = TW_KEY_BACKSPACE; break;
    case GLFW_KEY_DELETE: key = TW_KEY_DELETE; break;
    case GLFW_KEY_ENTER: key = TW_KEY_RETURN; break;
      
    default: break;
  }

  int tw_mod = TW_KMOD_NONE;

  if(mod & GLFW_MOD_SHIFT) {
    tw_mod |= TW_KMOD_SHIFT;
  }

  if(mod & GLFW_MOD_CONTROL) {
    tw_mod |= TW_KMOD_CTRL;
  }

  if(mod & GLFW_MOD_ALT) {
    tw_mod |= TW_KMOD_ALT;
  }

  TwKeyPressed(key, TW_KMOD_NONE);
}
Exemple #6
0
//  TwEventSDL12 returns zero if msg has not been handled, 
//  and a non-zero value if it has been handled by the AntTweakBar library.
int TW_CALL TwEventSDL12(const void *sdlEvent)
{
    int handled = 0;
    const SDL_Event *event = (const SDL_Event *)sdlEvent;

    if( event==NULL )
        return 0;

    switch( event->type )
    {
    case SDL_KEYDOWN:
        if( event->key.keysym.unicode!=0 && (event->key.keysym.unicode & 0xFF00)==0 )
        {
            if( (event->key.keysym.unicode & 0xFF)<32 && (event->key.keysym.unicode & 0xFF)!=event->key.keysym.sym )
                handled = TwKeyPressed((event->key.keysym.unicode & 0xFF)+'a'-1, event->key.keysym.mod);
            else
                handled = TwKeyPressed(event->key.keysym.unicode & 0xFF, event->key.keysym.mod);
        }
        else
            handled = TwKeyPressed(event->key.keysym.sym, event->key.keysym.mod);
        break;
    case SDL_MOUSEMOTION:
        handled = TwMouseMotion(event->motion.x, event->motion.y);
        break;
    case SDL_MOUSEBUTTONUP:
    case SDL_MOUSEBUTTONDOWN:
        if( event->type==SDL_MOUSEBUTTONDOWN && (event->button.button==4 || event->button.button==5) )  // mouse wheel
        {
            static int s_WheelPos = 0;
            if( event->button.button==4 )
                ++s_WheelPos;
            else
                --s_WheelPos;
            handled = TwMouseWheel(s_WheelPos);
        }
        else
            handled = TwMouseButton((event->type==SDL_MOUSEBUTTONUP)?TW_MOUSE_RELEASED:TW_MOUSE_PRESSED, (TwMouseButtonID)event->button.button);
        break;
    case SDL_VIDEORESIZE:
        // tell the new size to TweakBar
        TwWindowSize(event->resize.w, event->resize.h);
        // do not set 'handled', SDL_VIDEORESIZE may be also processed by the calling application
        break;
    }

    return handled;
}
Exemple #7
0
int TW_GLUT_CALL TwEventSpecialGLUT(int glutKey, int mouseX, int mouseY)
{
    int k = 0, kmod = 0;

    if( g_GLUTGetModifiers!=NULL )
    {
        int glutMod = g_GLUTGetModifiers();

        if( glutMod&GLUT_ACTIVE_SHIFT )
            kmod |= TW_KMOD_SHIFT;
        if( glutMod&GLUT_ACTIVE_CTRL )
            kmod |= TW_KMOD_CTRL;
        if( glutMod&GLUT_ACTIVE_ALT )
            kmod |= TW_KMOD_ALT;
    }

    if( glutKey>=GLUT_KEY_F1 && glutKey<=GLUT_KEY_F12 )
        k = TW_KEY_F1 + (glutKey-GLUT_KEY_F1);
    else
    {
        switch( glutKey )
        {
        case GLUT_KEY_LEFT:
            k = TW_KEY_LEFT;
            break;
        case GLUT_KEY_UP:
            k = TW_KEY_UP;
            break;
        case GLUT_KEY_RIGHT:
            k = TW_KEY_RIGHT;
            break;
        case GLUT_KEY_DOWN:
            k = TW_KEY_DOWN;
            break;
        case GLUT_KEY_PAGE_UP:
            k = TW_KEY_PAGE_UP;
            break;
        case GLUT_KEY_PAGE_DOWN:
            k = TW_KEY_PAGE_DOWN;
            break;
        case GLUT_KEY_HOME:
            k = TW_KEY_HOME;
            break;
        case GLUT_KEY_END:
            k = TW_KEY_END;
            break;
        case GLUT_KEY_INSERT:
            k = TW_KEY_INSERT;
            break;
        }
    }

    if( k>0 && k<TW_KEY_LAST )
        return TwKeyPressed(k, kmod);
    else
        return 0;
}
bool ATB::KeyboardCB(OGLDEV_KEY OgldevKey)
{
    int ATBKey = OgldevKeyToATBKey(OgldevKey);
    
    if (ATBKey == TW_KEY_LAST) {
        return false;
    }
    
    return (TwKeyPressed(ATBKey, TW_KMOD_NONE) == 1);
}
void ofxTweakbars::keyPressed(ofKeyEventArgs& rArgs) {
	TwKeyPressed(rArgs.key, TW_KMOD_NONE); // fix this!
	// default keys (not sure if this is really user friendly.. people?)
	if(rArgs.key == '.') {
		autoStore();	
	}
	else if (rArgs.key == ',') {
		toggle();
	}
	changed();
}
void ofxTweakbars::keyPressed(ofKeyEventArgs& rArgs) {
	// up, down, left, right are working now!
	if(rArgs.key == OF_KEY_DOWN)		{	rArgs.key = TW_KEY_DOWN;	}
	else if(rArgs.key == OF_KEY_UP)		{	rArgs.key = TW_KEY_UP;		}
	else if(rArgs.key == OF_KEY_LEFT)	{	rArgs.key = TW_KEY_LEFT;	}
	else if(rArgs.key == OF_KEY_RIGHT)	{	rArgs.key = TW_KEY_RIGHT;	}
	
	TwKeyPressed(rArgs.key, TW_KMOD_NONE); // fix this!
	// default keys (not sure if this is really user friendly.. people?)
	if(rArgs.key == '.') {
		autoStore();	
	}
	else if (rArgs.key == ',') {
		toggle();
	}
}
Exemple #11
0
int TW_GLUT_CALL TwEventKeyboardGLUT(unsigned char glutKey, int mouseX, int mouseY)
{
    int kmod = 0;

    if( g_GLUTGetModifiers!=NULL )
    {
        int glutMod = g_GLUTGetModifiers();

        if( glutMod&GLUT_ACTIVE_SHIFT )
            kmod |= TW_KMOD_SHIFT;
        if( glutMod&GLUT_ACTIVE_CTRL )
            kmod |= TW_KMOD_CTRL;
        if( glutMod&GLUT_ACTIVE_ALT )
            kmod |= TW_KMOD_ALT;
    }

    if( (kmod&TW_KMOD_CTRL) && (glutKey>0 && glutKey<27) )  // CTRL special case
        glutKey += 'a'-1;

    return TwKeyPressed((int)glutKey, kmod);
}
void GXBaseContext::OnKeyboard(int key, bool down)
{
	if (down)
	{
		int kmod = 0;

		if(GetShiftKey())	kmod |= TW_KMOD_SHIFT;
		if(GetCtrlKey())	kmod |= TW_KMOD_CTRL;
		if(GetAltKey())		kmod |= TW_KMOD_ALT;

		if( (kmod&TW_KMOD_CTRL) && (key>0 && key<27) )  // CTRL special case
			key += 'a'-1;

		if (!TwKeyPressed(key, kmod))
		{
			// Process keyboard event inside application
			if(VK_UP==key)if(m_camera->m_zoom--<=1)m_camera->m_zoom=1;
			if(VK_DOWN==key)if(m_camera->m_zoom++>=100)m_camera->m_zoom=100;
		}
	}
}
Exemple #13
0
int TwKeyPressQt(QKeyEvent *e)
{
  int kmod = 0;
  if(e->modifiers() & Qt::ShiftModifier )  kmod |= TW_KMOD_SHIFT;
  if(e->modifiers() & Qt::ControlModifier )  kmod |= TW_KMOD_CTRL;
  if(e->modifiers() & Qt::AltModifier )  kmod |= TW_KMOD_ALT;
  int key = e->key();
  int k = 0;

  if( key>0 && key<0x7e ) k=key; // plain ascii codes

  if( key>=Qt::Key_F1 && key<=Qt::Key_F12  )
      k = TW_KEY_F1 + (key-Qt::Key_F1 );
  else
  {
      switch( key )
      {
      case Qt::Key_Left:      k = TW_KEY_LEFT;  break;
      case Qt::Key_Up:        k = TW_KEY_UP; break;
      case Qt::Key_Right:     k = TW_KEY_RIGHT;  break;
      case Qt::Key_Down:      k = TW_KEY_DOWN;   break;
      case Qt::Key_PageUp:    k = TW_KEY_PAGE_UP;  break;
      case Qt::Key_PageDown:  k = TW_KEY_PAGE_DOWN; break;
      case Qt::Key_Home:      k = TW_KEY_HOME; break;
      case Qt::Key_End:       k = TW_KEY_END; break;
      case Qt::Key_Insert:    k = TW_KEY_INSERT; break;
      case Qt::Key_Backspace: k = TW_KEY_BACKSPACE; break;
      case Qt::Key_Delete:    k = TW_KEY_DELETE; break;
      case Qt::Key_Return:    k = TW_KEY_RETURN; break;
      case Qt::Key_Enter:     k = TW_KEY_RETURN; break;
      case Qt::Key_Escape:    k = TW_KEY_ESCAPE; break;
      case Qt::Key_Tab:       k = TW_KEY_TAB; break;
      case Qt::Key_Space:     k = TW_KEY_SPACE; break;
      }
  }

  return TwKeyPressed(k, kmod);
}
Exemple #14
0
int TW_CALL TwEventKeyGLFW(int glfwKey, int glfwAction)
{
	int handled = 0;

	// Register of modifiers state
	if( glfwAction==GLFW_PRESS )
	{
		switch( glfwKey )
		{
		case GLFW_KEY_LSHIFT:
		case GLFW_KEY_RSHIFT:
			g_KMod |= TW_KMOD_SHIFT;
			break;
		case GLFW_KEY_LCTRL:
		case GLFW_KEY_RCTRL:
			g_KMod |= TW_KMOD_CTRL;
			break;
		case GLFW_KEY_LALT:
		case GLFW_KEY_RALT:
			g_KMod |= TW_KMOD_ALT;
			break;
		}
	}
	else
	{
		switch( glfwKey )
		{
		case GLFW_KEY_LSHIFT:
		case GLFW_KEY_RSHIFT:
			g_KMod &= ~TW_KMOD_SHIFT;
			break;
		case GLFW_KEY_LCTRL:
		case GLFW_KEY_RCTRL:
			g_KMod &= ~TW_KMOD_CTRL;
			break;
		case GLFW_KEY_LALT:
		case GLFW_KEY_RALT:
			g_KMod &= ~TW_KMOD_ALT;
			break;
		}
	}

	// Process key pressed
	if( glfwAction==GLFW_PRESS )
	{
		int mod = g_KMod;
		int testkp = ((mod&TW_KMOD_CTRL) || (mod&TW_KMOD_ALT)) ? 1 : 0;

		if( (mod&TW_KMOD_CTRL) && glfwKey>0 && glfwKey<GLFW_KEY_SPECIAL )	// CTRL cases
			handled = TwKeyPressed(glfwKey, mod);
		else if( glfwKey>=GLFW_KEY_SPECIAL )
		{
			int k = 0;

			if( glfwKey>=GLFW_KEY_F1 && glfwKey<=GLFW_KEY_F15 )
				k = TW_KEY_F1 + (glfwKey-GLFW_KEY_F1);
			else if( testkp && glfwKey>=GLFW_KEY_KP_0 && glfwKey<=GLFW_KEY_KP_9 )
				k = '0' + (glfwKey-GLFW_KEY_KP_0);
			else
			{
				switch( glfwKey )
				{
				case GLFW_KEY_ESC:
					k = TW_KEY_ESCAPE;
					break;
				case GLFW_KEY_UP:
					k = TW_KEY_UP;
					break;
				case GLFW_KEY_DOWN:
					k = TW_KEY_DOWN;
					break;
				case GLFW_KEY_LEFT:
					k = TW_KEY_LEFT;
					break;
				case GLFW_KEY_RIGHT:
					k = TW_KEY_RIGHT;
					break;
				case GLFW_KEY_TAB:
					k = TW_KEY_TAB;
					break;
				case GLFW_KEY_ENTER:
					k = TW_KEY_RETURN;
					break;
				case GLFW_KEY_BACKSPACE:
					k = TW_KEY_BACKSPACE;
					break;
				case GLFW_KEY_INSERT:
					k = TW_KEY_INSERT;
					break;
				case GLFW_KEY_DEL:
					k = TW_KEY_DELETE;
					break;
				case GLFW_KEY_PAGEUP:
					k = TW_KEY_PAGE_UP;
					break;
				case GLFW_KEY_PAGEDOWN:
					k = TW_KEY_PAGE_DOWN;
					break;
				case GLFW_KEY_HOME:
					k = TW_KEY_HOME;
					break;
				case GLFW_KEY_END:
					k = TW_KEY_END;
					break;
				case GLFW_KEY_KP_ENTER:
					k = TW_KEY_RETURN;
					break;
				case GLFW_KEY_KP_DIVIDE:
					if( testkp )
						k = '/';
					break;
				case GLFW_KEY_KP_MULTIPLY:
					if( testkp )
						k = '*';
					break;
				case GLFW_KEY_KP_SUBTRACT:
					if( testkp )
						k = '-';
					break;
				case GLFW_KEY_KP_ADD:
					if( testkp )
						k = '+';
					break;
				case GLFW_KEY_KP_DECIMAL:
					if( testkp )
						k = '.';
					break;
				case GLFW_KEY_KP_EQUAL:
					if( testkp )
						k = '=';
					break;
				}
			}

			if( k>0 )
				handled = TwKeyPressed(k, mod);
		}
	}

	return handled;
}
int TW_CALL TwEventKeyGLFW3(GLFWwindow *window, int glfwKey, int glfwScancode, int glfwAction, int glfwMods)
{
    int handled = 0;
	int mod = convertModifiers(glfwMods);
	int testkp = ((mod&TW_KMOD_CTRL) || (mod&TW_KMOD_ALT)) ? 1 : 0;
	int k = 0;

    if (glfwAction == GLFW_RELEASE)
		return 0;

    if( (mod&TW_KMOD_CTRL) && glfwKey>0 && glfwKey<GLFW_KEY_SPECIAL )   // CTRL cases
        return TwKeyPressed(glfwKey, mod);

	if (glfwKey < GLFW_KEY_SPECIAL)
		return 0;

    if( glfwKey>=GLFW_KEY_F1 && glfwKey<=GLFW_KEY_F15 )
        k = TW_KEY_F1 + (glfwKey-GLFW_KEY_F1);
    else if( testkp && glfwKey>=GLFW_KEY_KP_0 && glfwKey<=GLFW_KEY_KP_9 )
        k = '0' + (glfwKey-GLFW_KEY_KP_0);
    else
    {
        switch( glfwKey )
        {
        case GLFW_KEY_ESCAPE:
            k = TW_KEY_ESCAPE;
            break;
        case GLFW_KEY_UP:
            k = TW_KEY_UP;
            break;
        case GLFW_KEY_DOWN:
            k = TW_KEY_DOWN;
            break;
        case GLFW_KEY_LEFT:
            k = TW_KEY_LEFT;
            break;
        case GLFW_KEY_RIGHT:
            k = TW_KEY_RIGHT;
            break;
        case GLFW_KEY_TAB:
            k = TW_KEY_TAB;
            break;
        case GLFW_KEY_ENTER:
            k = TW_KEY_RETURN;
            break;
        case GLFW_KEY_BACKSPACE:
            k = TW_KEY_BACKSPACE;
            break;
        case GLFW_KEY_INSERT:
            k = TW_KEY_INSERT;
            break;
        case GLFW_KEY_DELETE:
            k = TW_KEY_DELETE;
            break;
		case GLFW_KEY_PAGE_UP:
            k = TW_KEY_PAGE_UP;
            break;
        case GLFW_KEY_PAGE_DOWN:
            k = TW_KEY_PAGE_DOWN;
            break;
        case GLFW_KEY_HOME:
            k = TW_KEY_HOME;
            break;
        case GLFW_KEY_END:
            k = TW_KEY_END;
            break;
        case GLFW_KEY_KP_ENTER:
            k = TW_KEY_RETURN;
            break;
        case GLFW_KEY_KP_DIVIDE:
            if( testkp )
                k = '/';
            break;
        case GLFW_KEY_KP_MULTIPLY:
            if( testkp )
                k = '*';
            break;
        case GLFW_KEY_KP_SUBTRACT:
            if( testkp )
                k = '-';
            break;
        case GLFW_KEY_KP_ADD:
            if( testkp )
                k = '+';
            break;
        case GLFW_KEY_KP_DECIMAL:
            if( testkp )
                k = '.';
            break;
        case GLFW_KEY_KP_EQUAL:
            if( testkp )
                k = '=';
            break;
        }
    }

	return k ? TwKeyPressed(k, mod) : 0;
}
//  TwEventSDL returns zero if msg has not been handled, 
//  and a non-zero value if it has been handled by the AntTweakBar library.
int  TW_CALL TwEventSDL(const void *sdlEvent, unsigned char sdlMajorVersion, unsigned char sdlMinorVersion)
{
    int handled = 0;
    static int s_KeyMod = 0;
    const SDL_Event *event = (const SDL_Event *)sdlEvent;

    if( event==NULL )
        return 0;

    switch( event->type )
    {
    case SDL_TEXTINPUT:
        if( event->text.text[0]!=0 && event->text.text[1]==0 ) 
        {
            if( s_KeyMod & TW_KMOD_CTRL && event->text.text[0]<32 )
                handled = TwKeyPressed(event->text.text[0]+'a'-1, s_KeyMod);
            else
            {
                if (s_KeyMod & KMOD_RALT)
                    s_KeyMod &= ~KMOD_CTRL;
                handled = TwKeyPressed(event->text.text[0], s_KeyMod);
            }
        }
        s_KeyMod = 0;
        break;
    case SDL_KEYDOWN:
        if( event->key.keysym.sym & SDLK_SCANCODE_MASK )
        {
            int key = 0;
            switch( event->key.keysym.sym )
            {
            case SDLK_UP:
                key = TW_KEY_UP;
                break;
            case SDLK_DOWN:
                key = TW_KEY_DOWN;
                break;
            case SDLK_RIGHT:
                key = TW_KEY_RIGHT;
                break;
            case SDLK_LEFT:
                key = TW_KEY_LEFT;
                break;
            case SDLK_INSERT:
                key = TW_KEY_INSERT;
                break;
            case SDLK_HOME:
                key = TW_KEY_HOME;
                break;
            case SDLK_END:
                key = TW_KEY_END;
                break;
            case SDLK_PAGEUP:
                key = TW_KEY_PAGE_UP;
                break;
            case SDLK_PAGEDOWN:
                key = TW_KEY_PAGE_DOWN;
                break;
            default:
                if( event->key.keysym.sym>=SDLK_F1 && event->key.keysym.sym<=SDLK_F12 )
                    key = event->key.keysym.sym + TW_KEY_F1 - SDLK_F1;
            }
            if( key!=0 )
                handled = TwKeyPressed(key, event->key.keysym.mod);
        }
        else if( event->key.keysym.mod & TW_KMOD_ALT )
            handled = TwKeyPressed(event->key.keysym.sym & 0xFF, event->key.keysym.mod);
        else
            s_KeyMod = event->key.keysym.mod;
        break;
    case SDL_KEYUP:
        s_KeyMod = 0;
        break;
    case SDL_MOUSEMOTION:
        handled = TwMouseMotion(event->motion.x, event->motion.y);
        break;
    case SDL_MOUSEBUTTONUP:
    case SDL_MOUSEBUTTONDOWN:
        if( event->type==SDL_MOUSEBUTTONDOWN && (event->button.button==4 || event->button.button==5) )  // mouse wheel
        {
            static int s_WheelPos = 0;
            if( event->button.button==4 )
                ++s_WheelPos;
            else
                --s_WheelPos;
            handled = TwMouseWheel(s_WheelPos);
        }
        else
            handled = TwMouseButton((event->type==SDL_MOUSEBUTTONUP)?TW_MOUSE_RELEASED:TW_MOUSE_PRESSED, (TwMouseButtonID)event->button.button);
        break;

     case SDL_WINDOWEVENT:
        switch( event->window.event )
        {
        case SDL_WINDOWEVENT_SIZE_CHANGED:
            // tell the new size to TweakBar
            TwWindowSize(event->window.data1, event->window.data2);
            // do not set 'handled', SDL_VIDEORESIZE may be also processed by the calling application
            break;
        }
        break;
    }

    return handled;
}
//  TwEventSFML returns zero if msg has not been handled, 
//  and a non-zero value if it has been handled by the AntTweakBar library.
int TW_CALL TwEventSFML(const void *sfmlEvent, unsigned char majorVersion, unsigned char minorVersion)
{
    // Assume version 1.6 (will possibly not work for version != 1.6, but give it a chance)
    /*
    if (majorVersion > 1 || (majorVersion == 1 && minorVersion > 6)
    {
        static const char *g_ErrBadSFMLVersion = "Unsupported SFML version";
        TwSetLastError(g_ErrBadSFMLVersion);
        return 0;
    }
    */
    (void)majorVersion, (void)minorVersion;

    int handled = 0;
    const sf::Event *event = (const sf::Event *)sfmlEvent;
    TwMouseAction mouseAction;
    int key = 0;
    static int s_KMod = 0;
    static bool s_PreventTextHandling = false;
    static int s_WheelPos = 0;

    if (event == NULL)
        return 0;

    switch (event->Type)
    {
    case sf::Event::KeyPressed:
        s_PreventTextHandling = false;
        s_KMod = 0;
        if (event->Key.Shift)   s_KMod |= TW_KMOD_SHIFT;
        if (event->Key.Alt)     s_KMod |= TW_KMOD_ALT;
        if (event->Key.Control) s_KMod |= TW_KMOD_CTRL;
        key = 0;
        switch (event->Key.Code)
        {
        case sf::Key::Escape:
            key = TW_KEY_ESCAPE;
            break;
        case sf::Key::Return:
            key = TW_KEY_RETURN;
            break;
        case sf::Key::Tab:
            key = TW_KEY_TAB;
            break;
        case sf::Key::Back:
            key = TW_KEY_BACKSPACE;
            break;
        case sf::Key::PageUp:
            key = TW_KEY_PAGE_UP;
            break;
        case sf::Key::PageDown:
            key = TW_KEY_PAGE_DOWN;
            break;
        case sf::Key::Up:
            key = TW_KEY_UP;
            break;
        case sf::Key::Down:
            key = TW_KEY_DOWN;
            break;
        case sf::Key::Left:
            key = TW_KEY_LEFT;
            break;
        case sf::Key::Right:
            key = TW_KEY_RIGHT;
            break;
        case sf::Key::End:
            key = TW_KEY_END;
            break;
        case sf::Key::Home:
            key = TW_KEY_HOME;
            break;
        case sf::Key::Insert:
            key = TW_KEY_INSERT;
            break;
        case sf::Key::Delete:
            key = TW_KEY_DELETE;
            break;
        case sf::Key::Space:
            key = TW_KEY_SPACE;
            break;
        default:
            if (event->Key.Code >= sf::Key::F1 && event->Key.Code <= sf::Key::F15)
                key = TW_KEY_F1 + event->Key.Code - sf::Key::F1;
            else if (s_KMod & TW_KMOD_ALT) 
            {
                if (event->Key.Code >= sf::Key::A && event->Key.Code <= sf::Key::Z)
                {
                    if (s_KMod & TW_KMOD_SHIFT)
                        key = 'A' + event->Key.Code - sf::Key::A;
                    else
                        key = 'a' + event->Key.Code - sf::Key::A;
                }
            }
        }
        if (key != 0) 
        {
            handled = TwKeyPressed(key, s_KMod);
            s_PreventTextHandling = true;
        }
        break;
    case sf::Event::KeyReleased:
        s_PreventTextHandling = false;
        s_KMod = 0;
        break;
    case sf::Event::TextEntered:
        if (!s_PreventTextHandling && event->Text.Unicode != 0 && (event->Text.Unicode & 0xFF00) == 0)
        {
            if ((event->Text.Unicode & 0xFF) < 32) // CTRL+letter
                handled = TwKeyPressed((event->Text.Unicode & 0xFF)+'a'-1, TW_KMOD_CTRL|s_KMod);
            else 
                handled = TwKeyPressed(event->Text.Unicode & 0xFF, 0);
        }
        s_PreventTextHandling = false;
        break;
    case sf::Event::MouseMoved:
        handled = TwMouseMotion(event->MouseMove.X, event->MouseMove.Y);
        break;
    case sf::Event::MouseButtonPressed:
    case sf::Event::MouseButtonReleased:
        mouseAction = (event->Type==sf::Event::MouseButtonPressed) ? TW_MOUSE_PRESSED : TW_MOUSE_RELEASED;
        switch (event->MouseButton.Button) 
        {
        case sf::Mouse::Left:
            handled = TwMouseButton(mouseAction, TW_MOUSE_LEFT);
            break;
        case sf::Mouse::Middle:
            handled = TwMouseButton(mouseAction, TW_MOUSE_MIDDLE);
            break;
        case sf::Mouse::Right:
            handled = TwMouseButton(mouseAction, TW_MOUSE_RIGHT);
            break;
        default:
            break;
        }
        break;
    case sf::Event::MouseWheelMoved:
        s_WheelPos += event->MouseWheel.Delta;
        handled = TwMouseWheel(s_WheelPos);
        break;
    case sf::Event::Resized:
        // tell the new size to TweakBar
        TwWindowSize(event->Size.Width, event->Size.Height);
        // do not set 'handled', sf::Event::Resized may be also processed by the client application
        break;
    default:
        break;
    }

    return handled;
}
Exemple #18
0
// --------------------------------------------------------------- keyboard ---
void keyboard( GLFWwindow* window, int key, int scancode, int action, int mods )
{
    int tw_key = 0;
    int tw_mods = TW_KMOD_NONE;

    if( action != GLFW_PRESS )
    {
        return;
    }

    // those map to the corresponding number ascii code
    if ( GLFW_KEY_0 <= key && key <= GLFW_KEY_9 )
    {
        tw_key = key;
    }

    // those map to the corresponding upper case ascii code
    if ( GLFW_KEY_A <= key && key <= GLFW_KEY_Z )
    {
        tw_key = key;
    }

    if ( GLFW_KEY_PERIOD == key )
    {
        tw_key = '.';
    }

    if ( GLFW_KEY_BACKSPACE == key )
    {
        tw_key = TW_KEY_BACKSPACE;
    }

    if ( GLFW_KEY_DELETE == key )
    {
        tw_key = TW_KEY_DELETE;
    }

    if ( GLFW_KEY_LEFT == key )
    {
        tw_key = TW_KEY_LEFT;
    }

    if ( GLFW_KEY_RIGHT == key )
    {
        tw_key = TW_KEY_RIGHT;
    }

    if ( GLFW_KEY_UP == key )
    {
        tw_key = TW_KEY_UP;
    }

    if ( GLFW_KEY_DOWN == key )
    {
        tw_key = TW_KEY_DOWN;
    }

    if ( GLFW_KEY_ENTER == key )
    {
        tw_key = TW_KEY_RETURN;
    }

    if( GLFW_MOD_SHIFT & mods )
    {
        tw_mods |= TW_KMOD_SHIFT;
    }

    if( GLFW_MOD_CONTROL & mods )
    {
        tw_mods |= TW_KMOD_CTRL;
    }

    if( GLFW_MOD_ALT & mods )
    {
        tw_mods |= TW_KMOD_ALT;
    }

    TwKeyPressed( tw_key, tw_mods );
}
//	TwEventWin32 returns zero if msg has not been handled, 
//	and a non-zero value if it has been handled by the AntTweakBar library.
int TW_CALL TwEventWin32(void *wnd, unsigned int msg, unsigned int _W64 wParam, int _W64 lParam)
{
	int handled = 0;
	switch( msg ) 
	{
	case WM_MOUSEMOVE:
		// send signed! mouse coordinates
		handled = TwMouseMotion((short)LOWORD(lParam), (short)HIWORD(lParam));
		break;
	case WM_LBUTTONDOWN:
		SetCapture(wnd);
		handled = TwMouseButton(TW_MOUSE_PRESSED, TW_MOUSE_LEFT);
		break;
	case WM_LBUTTONUP:
		ReleaseCapture();
		handled = TwMouseButton(TW_MOUSE_RELEASED, TW_MOUSE_LEFT);
		break;
	case WM_MBUTTONDOWN:
		SetCapture(wnd);
		handled = TwMouseButton(TW_MOUSE_PRESSED, TW_MOUSE_MIDDLE);
		break;
	case WM_MBUTTONUP:
		ReleaseCapture();
		handled = TwMouseButton(TW_MOUSE_RELEASED, TW_MOUSE_MIDDLE);
		break;
	case WM_RBUTTONDOWN:
		SetCapture(wnd);
		handled = TwMouseButton(TW_MOUSE_PRESSED, TW_MOUSE_RIGHT);
		break;
	case WM_RBUTTONUP:
		ReleaseCapture();
		handled = TwMouseButton(TW_MOUSE_RELEASED, TW_MOUSE_RIGHT);
		break;
	case WM_CHAR:
	case WM_SYSCHAR:
		{
			int key = (int)(wParam&0xff);
			int kmod = 0;

			if( GetAsyncKeyState(VK_SHIFT)<0 )
				kmod |= TW_KMOD_SHIFT;
			if( GetAsyncKeyState(VK_CONTROL)<0 )
			{
				kmod |= TW_KMOD_CTRL;
				if( key>0 && key<27 )
					key += 'a'-1;
			}
			if( GetAsyncKeyState(VK_MENU)<0 )
				kmod |= TW_KMOD_ALT;
			if( key>0 && key<256 )
				handled = TwKeyPressed(key, kmod);
		}
		break;
	case WM_KEYDOWN:
	case WM_SYSKEYDOWN:
		{
			int kmod = 0;
			int testkp = 0;
			int k = 0;

			if( GetAsyncKeyState(VK_SHIFT)<0 )
				kmod |= TW_KMOD_SHIFT;
			if( GetAsyncKeyState(VK_CONTROL)<0 )
			{
				kmod |= TW_KMOD_CTRL;
				testkp = 1;
			}
			if( GetAsyncKeyState(VK_MENU)<0 )
			{
				kmod |= TW_KMOD_ALT;
				testkp = 1;
			}
			if( wParam>=VK_F1 && wParam<=VK_F15 )
				k = TW_KEY_F1 + ((int)wParam-VK_F1);
			else if( testkp && wParam>=VK_NUMPAD0 && wParam<=VK_NUMPAD9 )
				k = '0' + ((int)wParam-VK_NUMPAD0);
			else
			{
				switch( wParam )
				{
				case VK_UP:
					k = TW_KEY_UP;
					break;
				case VK_DOWN:
					k = TW_KEY_DOWN;
					break;
				case VK_LEFT:
					k = TW_KEY_LEFT;
					break;
				case VK_RIGHT:
					k = TW_KEY_RIGHT;
					break;
				case VK_INSERT:
					k = TW_KEY_INSERT;
					break;
				case VK_DELETE:
					k = TW_KEY_DELETE;
					break;
				case VK_PRIOR:
					k = TW_KEY_PAGE_UP;
					break;
				case VK_NEXT:
					k = TW_KEY_PAGE_DOWN;
					break;
				case VK_HOME:
					k = TW_KEY_HOME;
					break;
				case VK_END:
					k = TW_KEY_END;
					break;
				case VK_DIVIDE:
					if( testkp )
						k = '/';
					break;
				case VK_MULTIPLY:
					if( testkp )
						k = '*';
					break;
				case VK_SUBTRACT:
					if( testkp )
						k = '-';
					break;
				case VK_ADD:
					if( testkp )
						k = '+';
					break;
				case VK_DECIMAL:
					if( testkp )
						k = '.';
					break;
				default:
					if( (kmod&TW_KMOD_CTRL) && (kmod&TW_KMOD_ALT) )
						k = MapVirtualKey( (UINT)wParam, 2 ) & 0x0000FFFF;
				}
			}
			if( k!=0 )
				handled = TwKeyPressed(k, kmod);
		}
		break;
	case WM_MOUSEWHEEL:
		{
			static int s_WheelPos = 0;
            s_WheelPos += ((short)HIWORD(wParam))/WHEEL_DELTA;
			handled = TwMouseWheel(s_WheelPos);
		}
		break;
	case WM_SIZE:
		// tell the new size to TweakBar
		TwWindowSize(LOWORD(lParam), HIWORD(lParam));
		// do not set 'handled', WM_SIZE may be also processed by the calling application
		break;
	}

	return handled;
}
Exemple #20
0
int TW_CALL TwEventSDL20(const void *sdlEvent)
{
	int handled = 0;
	const SDL_Event *event = (const SDL_Event *)sdlEvent;

	if (event == NULL)
		return 0;

	switch (event->type)
	{
	case SDL_KEYDOWN:
		if (event->key.keysym.sym & SDLK_SCANCODE_MASK) {
			int key = 0;
			switch (event->key.keysym.sym) {
			case SDLK_UP:
				key = TW_KEY_UP;
				break;
			case SDLK_DOWN:
				key = TW_KEY_DOWN;
				break;
			case SDLK_RIGHT:
				key = TW_KEY_RIGHT;
				break;
			case SDLK_LEFT:
				key = TW_KEY_LEFT;
				break;
			case SDLK_INSERT:
				key = TW_KEY_INSERT;
				break;
			case SDLK_HOME:
				key = TW_KEY_HOME;
				break;
			case SDLK_END:
				key = TW_KEY_END;
				break;
			case SDLK_PAGEUP:
				key = TW_KEY_PAGE_UP;
				break;
			case SDLK_PAGEDOWN:
				key = TW_KEY_PAGE_DOWN;
				break;
			default:
				if (event->key.keysym.sym >= SDLK_F1 &&
					event->key.keysym.sym <= SDLK_F12) {
					key = event->key.keysym.sym + TW_KEY_F1 - SDLK_F1;
				}
				break;
			}
			if (key != 0) {
				handled = TwKeyPressed(key, event->key.keysym.mod);
			}
		}
		else {
			handled = TwKeyPressed(event->key.keysym.sym /*& 0xFF*/,
				event->key.keysym.mod);
		}
		break;
	case SDL_MOUSEMOTION:
		handled = TwMouseMotion(event->motion.x, event->motion.y);
		break;
	case SDL_MOUSEBUTTONUP:
	case SDL_MOUSEBUTTONDOWN:
		if (event->type == SDL_MOUSEBUTTONDOWN &&
			(event->button.button == 4 || event->button.button == 5)) {
			// mouse wheel
			static int s_WheelPos = 0;
			if (event->button.button == 4)
				++s_WheelPos;
			else
				--s_WheelPos;
			handled = TwMouseWheel(s_WheelPos);
		}
		else {
			handled = TwMouseButton(
				(event->type == SDL_MOUSEBUTTONUP) ?
				TW_MOUSE_RELEASED : TW_MOUSE_PRESSED,
				(TwMouseButtonID)event->button.button);
		}
		break;
	case SDL_WINDOWEVENT:
		if (event->window.event == SDL_WINDOWEVENT_RESIZED) {
			// tell the new size to TweakBar
			TwWindowSize(event->window.data1, event->window.data2);
			// do not set 'handled'
			// SDL_VIDEORESIZE may be also processed by the calling application
		}
		break;
	}

	return handled;
}
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
static int _XKeyPress(XEvent *event)
{
    int modifiers = 0;  // modifiers sent to AntTweakBar
    int k = 0;          // key sent to AntTweakBar
    KeySym keysym;
    char buffer[buff_sz];
        
    int num_char = XLookupString((XKeyEvent *)event, buffer, buff_sz, &keysym, 0);

    if (event->xkey.state & ControlMask)
        modifiers |= TW_KMOD_CTRL;
    if (event->xkey.state & ShiftMask)
        modifiers |= TW_KMOD_SHIFT;
    if (event->xkey.state & Mod1Mask)
        modifiers |= TW_KMOD_ALT;

    switch (keysym)
    {
    case XK_Control_L:
    case XK_Control_R: s_KMod |= TW_KMOD_CTRL;  break;

    case XK_Shift_L:
    case XK_Shift_R:   s_KMod |= TW_KMOD_SHIFT; break;

    case XK_Alt_L:
    case XK_Alt_R:     s_KMod |= TW_KMOD_ALT;   break;

    case XK_Escape:    k = TW_KEY_ESCAPE;    break;
    case XK_Help:      k = TW_KEY_F1;        break;
    case XK_F1:        k = TW_KEY_F1;        break;
    case XK_F2:        k = TW_KEY_F2;        break;
    case XK_F3:        k = TW_KEY_F3;        break;
    case XK_F4:        k = TW_KEY_F4;        break;
    case XK_F5:        k = TW_KEY_F5;        break;
    case XK_F6:        k = TW_KEY_F6;        break;
    case XK_F7:        k = TW_KEY_F7;        break;
    case XK_F8:        k = TW_KEY_F8;        break;
    case XK_F9:        k = TW_KEY_F9;        break;
    case XK_F10:       k = TW_KEY_F10;       break;
    case XK_F11:       k = TW_KEY_F11;       break;
    case XK_F12:       k = TW_KEY_F12;       break;
    case XK_Up:        k = TW_KEY_UP;        break;
    case XK_Down:      k = TW_KEY_DOWN;      break;
    case XK_Right:     k = TW_KEY_RIGHT;     break;
    case XK_Left:      k = TW_KEY_LEFT;      break;
    case XK_Return:    k = TW_KEY_RETURN;    break;
    case XK_Insert:    k = TW_KEY_INSERT;    break;
    case XK_Delete:    k = TW_KEY_DELETE;    break;
    case XK_BackSpace: k = TW_KEY_BACKSPACE; break;
    case XK_Home:      k = TW_KEY_HOME;      break;
    case XK_Tab:       k = TW_KEY_TAB;       break;
    case XK_End:       k = TW_KEY_END;       break;

#ifdef XK_Enter
    case XK_Enter:     k = TW_KEY_RETURN;    break;
#endif

#ifdef XK_KP_Home
    case XK_KP_Home:   k = TW_KEY_HOME;      break;
    case XK_KP_End:    k = TW_KEY_END;       break;
    case XK_KP_Delete: k = TW_KEY_DELETE;    break;
#endif

#ifdef XK_KP_Up
    case XK_KP_Up:     k = TW_KEY_UP;        break;
    case XK_KP_Down:   k = TW_KEY_DOWN;      break;
    case XK_KP_Right:  k = TW_KEY_RIGHT;     break;
    case XK_KP_Left:   k = TW_KEY_LEFT;      break;
#endif

#ifdef XK_KP_Page_Up
    case XK_KP_Page_Up:   k = TW_KEY_PAGE_UP;    break;
    case XK_KP_Page_Down: k = TW_KEY_PAGE_DOWN;  break;
#endif

#ifdef XK_KP_Tab
    case XK_KP_Tab:    k = TW_KEY_TAB;       break;
#endif

    default:
        if (0)
        {
            // should we do that, or rely on the buffer (see code below)
            if (keysym > 12 && keysym < 127) 
                k = keysym;
        }
        break;
    }  
        
    if (k == 0 && num_char)
    {
        int i, handled = 0;
        for (i=0; i<num_char; ++i)
            if (TwKeyPressed(buffer[i], modifiers))
                handled = 1;
        return handled;
    }

    // if we have a valid key, send to AntTweakBar
    // -------------------------------------------
    return (k > 0) ? TwKeyPressed(k, modifiers) : 0;
}
    /**
     * Handles all keyboard input.
     * @param vkCode the key pressed
     * @param bKeyDown <code>true</code> if the key is pressed, else it is released
     * @param sender the window that send the keyboard messages
     */
    bool ApplicationBase::HandleKeyboard(unsigned int vkCode, bool bKeyDown, BaseGLWindow* sender)
    {
        auto handled = 0;
        static unsigned __int64 s_PrevKeyDown = 0;
        static __int64 s_PrevKeyDownMod = 0;
        static auto s_PrevKeyDownHandled = 0;

        auto kmod = 0;
        auto testkp = 0;
        auto k = 0;
        auto twVKCode = vkCode == VK_NUMRETURN ? VK_RETURN : vkCode;
        if (sender->GetKeyboardModState(VK_MOD_SHIFT)) kmod |= TW_KMOD_SHIFT;
        if (sender->GetKeyboardModState(VK_MOD_CTRL)) {
            kmod |= TW_KMOD_CTRL; testkp = 1;
        }
        if (sender->GetKeyboardModState(VK_MOD_MENU)) {
            kmod |= TW_KMOD_ALT;  testkp = 1;
        }

        if (twVKCode >= VK_F1 && twVKCode <= VK_F15)
            k = TW_KEY_F1 + (twVKCode - VK_F1);
        else if (testkp && twVKCode >= VK_NUMPAD0 && twVKCode <= VK_NUMPAD9)
            k = '0' + (twVKCode - VK_NUMPAD0);
        else switch (twVKCode)
        {
        case VK_UP:
            k = TW_KEY_UP;
            break;
        case VK_DOWN:
            k = TW_KEY_DOWN;
            break;
        case VK_LEFT:
            k = TW_KEY_LEFT;
            break;
        case VK_RIGHT:
            k = TW_KEY_RIGHT;
            break;
        case VK_INSERT:
            k = TW_KEY_INSERT;
            break;
        case VK_DELETE:
            k = TW_KEY_DELETE;
            break;
        case VK_PRIOR:
            k = TW_KEY_PAGE_UP;
            break;
        case VK_NEXT:
            k = TW_KEY_PAGE_DOWN;
            break;
        case VK_HOME:
            k = TW_KEY_HOME;
            break;
        case VK_END:
            k = TW_KEY_END;
            break;
        case VK_DIVIDE:
            if (testkp)
                k = '/';
            break;
        case VK_MULTIPLY:
            if (testkp)
                k = '*';
            break;
        case VK_SUBTRACT:
            if (testkp)
                k = '-';
            break;
        case VK_ADD:
            if (testkp)
                k = '+';
            break;
        case VK_DECIMAL:
            if (testkp)
                k = '.';
            break;
        default:
            if ((kmod&TW_KMOD_CTRL) && (kmod&TW_KMOD_ALT))
                k = MapVirtualKey(twVKCode, 2) & 0x0000FFFF;
        }

        if (bKeyDown) {
            if (k != 0)
                handled = TwKeyPressed(k, kmod);
            else
            {
                // if the key will be handled at next WM_CHAR report this event as handled
                auto key = static_cast<int>(MapVirtualKey(twVKCode, 2) & 0xff);
                if (kmod&TW_KMOD_CTRL && key > 0 && key < 27)
                    key += 'a' - 1;
                if (key > 0 && key < 256)
                    handled = TwKeyPressed(key, kmod);
            }
            s_PrevKeyDown = twVKCode;
            s_PrevKeyDownMod = kmod;
            s_PrevKeyDownHandled = handled;
        } else {
            // if the key has been handled at previous WM_KEYDOWN report this event as handled
            if (s_PrevKeyDown == twVKCode && s_PrevKeyDownMod == kmod)
                handled = s_PrevKeyDownHandled;
            else
            {
                // if the key would have been handled report this event as handled
                auto key = static_cast<int>(MapVirtualKey(twVKCode, 2) & 0xff);
                if (kmod&TW_KMOD_CTRL && key > 0 && key < 27)
                    key += 'a' - 1;
                if (key > 0 && key < 256)
                    handled = TwKeyTest(key, kmod);
            }
            // reset previous keydown
            s_PrevKeyDown = 0;
            s_PrevKeyDownMod = 0;
            s_PrevKeyDownHandled = 0;
        }

        if (bKeyDown && handled == 0) {
            switch (vkCode)
            {
            case VK_ESCAPE:
                this->win.CloseWindow();
                handled = 1;
                break;
            case VK_F9:
                this->programManager->RecompileAll();
                handled = 1;
                break;
            }
        }

        if (handled == 0 && IsRunning() && !IsPaused()) handled = cameraView->HandleKeyboard(vkCode, bKeyDown, sender);

        return handled == 1;
    }
// TwEventWin returns zero if msg has not been handled, 
// and a non-zero value if it has been handled by the AntTweakBar library.
int TW_CALL TwEventWin(void *wnd, unsigned int msg, unsigned PARAM_INT _W64 wParam, PARAM_INT _W64 lParam)
{
    int handled = 0;
    static unsigned PARAM_INT s_PrevKeyDown = 0;
    static PARAM_INT s_PrevKeyDownMod = 0;
    static int s_PrevKeyDownHandled = 0;

    switch( msg ) 
    {
    case WM_MOUSEMOVE:
        // send signed! mouse coordinates
        handled = TwMouseMotion((short)LOWORD(lParam), (short)HIWORD(lParam));
        break;
    case WM_LBUTTONDOWN:
    case WM_LBUTTONDBLCLK:
        SetCapture(wnd);
        handled = TwMouseButton(TW_MOUSE_PRESSED, TW_MOUSE_LEFT);
        break;
    case WM_LBUTTONUP:
        ReleaseCapture();
        handled = TwMouseButton(TW_MOUSE_RELEASED, TW_MOUSE_LEFT);
        break;
    case WM_MBUTTONDOWN:
    case WM_MBUTTONDBLCLK:
        SetCapture(wnd);
        handled = TwMouseButton(TW_MOUSE_PRESSED, TW_MOUSE_MIDDLE);
        break;
    case WM_MBUTTONUP:
        ReleaseCapture();
        handled = TwMouseButton(TW_MOUSE_RELEASED, TW_MOUSE_MIDDLE);
        break;
    case WM_RBUTTONDOWN:
    case WM_RBUTTONDBLCLK:
        SetCapture(wnd);
        handled = TwMouseButton(TW_MOUSE_PRESSED, TW_MOUSE_RIGHT);
        break;
    case WM_RBUTTONUP:
        ReleaseCapture();
        handled = TwMouseButton(TW_MOUSE_RELEASED, TW_MOUSE_RIGHT);
        break;
    case WM_CHAR:
    case WM_SYSCHAR:
        {
            int key = (int)(wParam&0xff);
            int kmod = 0;

            if( GetAsyncKeyState(VK_SHIFT)<0 )
                kmod |= TW_KMOD_SHIFT;
            if( GetAsyncKeyState(VK_CONTROL)<0 )
            {
                kmod |= TW_KMOD_CTRL;
                if( key>0 && key<27 )
                    key += 'a'-1;
            }
            if( GetAsyncKeyState(VK_MENU)<0 )
                kmod |= TW_KMOD_ALT;
            if( key>0 && key<256 )
                handled = TwKeyPressed(key, kmod);
        }
        break;
    case WM_KEYDOWN:
    case WM_SYSKEYDOWN:
        {
            int kmod = 0;
            int testkp = 0;
            int k = 0;

            if( GetAsyncKeyState(VK_SHIFT)<0 )
                kmod |= TW_KMOD_SHIFT;
            if( GetAsyncKeyState(VK_CONTROL)<0 )
            {
                kmod |= TW_KMOD_CTRL;
                testkp = 1;
            }
            if( GetAsyncKeyState(VK_MENU)<0 )
            {
                kmod |= TW_KMOD_ALT;
                testkp = 1;
            }
            if( wParam>=VK_F1 && wParam<=VK_F15 )
                k = TW_KEY_F1 + ((int)wParam-VK_F1);
            else if( testkp && wParam>=VK_NUMPAD0 && wParam<=VK_NUMPAD9 )
                k = '0' + ((int)wParam-VK_NUMPAD0);
            else
            {
                switch( wParam )
                {
                case VK_UP:
                    k = TW_KEY_UP;
                    break;
                case VK_DOWN:
                    k = TW_KEY_DOWN;
                    break;
                case VK_LEFT:
                    k = TW_KEY_LEFT;
                    break;
                case VK_RIGHT:
                    k = TW_KEY_RIGHT;
                    break;
                case VK_INSERT:
                    k = TW_KEY_INSERT;
                    break;
                case VK_DELETE:
                    k = TW_KEY_DELETE;
                    break;
                case VK_PRIOR:
                    k = TW_KEY_PAGE_UP;
                    break;
                case VK_NEXT:
                    k = TW_KEY_PAGE_DOWN;
                    break;
                case VK_HOME:
                    k = TW_KEY_HOME;
                    break;
                case VK_END:
                    k = TW_KEY_END;
                    break;
                case VK_DIVIDE:
                    if( testkp )
                        k = '/';
                    break;
                case VK_MULTIPLY:
                    if( testkp )
                        k = '*';
                    break;
                case VK_SUBTRACT:
                    if( testkp )
                        k = '-';
                    break;
                case VK_ADD:
                    if( testkp )
                        k = '+';
                    break;
                case VK_DECIMAL:
                    if( testkp )
                        k = '.';
                    break;
                default:
                    if( (kmod&TW_KMOD_CTRL) && (kmod&TW_KMOD_ALT) )
                        k = MapVirtualKey( (UINT)wParam, 2 ) & 0x0000FFFF;
                }
            }
            if( k!=0 )
                handled = TwKeyPressed(k, kmod);
            else
            {
                // if the key will be handled at next WM_CHAR report this event as handled
                int key = (int)(wParam&0xff);
                if( kmod&TW_KMOD_CTRL && key>0 && key<27 )
                    key += 'a'-1;
                if( key>0 && key<256 )
                    handled = TwKeyTest(key, kmod);
            }
            s_PrevKeyDown = wParam;
            s_PrevKeyDownMod = kmod;
            s_PrevKeyDownHandled = handled;
        }
        break;
    case WM_KEYUP:
    case WM_SYSKEYUP:
        {
            int kmod = 0;
            if( GetAsyncKeyState(VK_SHIFT)<0 )
                kmod |= TW_KMOD_SHIFT;
            if( GetAsyncKeyState(VK_CONTROL)<0 )
                kmod |= TW_KMOD_CTRL;
            if( GetAsyncKeyState(VK_MENU)<0 )
                kmod |= TW_KMOD_ALT;
            // if the key has been handled at previous WM_KEYDOWN report this event as handled
            if( s_PrevKeyDown==wParam && s_PrevKeyDownMod==kmod )
                handled = s_PrevKeyDownHandled;
            else 
            {
                // if the key would have been handled report this event as handled
                int key = (int)(wParam&0xff);
                if( kmod&TW_KMOD_CTRL && key>0 && key<27 )
                    key += 'a'-1;
                if( key>0 && key<256 )
                    handled = TwKeyTest(key, kmod);
            }
            // reset previous keydown
            s_PrevKeyDown = 0;
            s_PrevKeyDownMod = 0;
            s_PrevKeyDownHandled = 0;
        }
        break;
    case WM_MOUSEWHEEL:
        {
            static int s_WheelPos = 0;
            s_WheelPos += ((short)HIWORD(wParam))/WHEEL_DELTA;
            handled = TwMouseWheel(s_WheelPos);
        }
        break;
    case WM_SIZE:
        // tell the new size to AntTweakBar
        TwWindowSize(LOWORD(lParam), HIWORD(lParam));
        // do not set 'handled', WM_SIZE may be also processed by the calling application
        break;
    }

    if( handled )
        // Event has been handled by AntTweakBar, so we invalidate the window 
        // content to send a WM_PAINT which will redraw the tweak bar(s).
        InvalidateRect(wnd, NULL, FALSE);

    return handled;
}
Exemple #24
0
bool ControlUI::keyPressed(const OIS::KeyEvent &arg)
{
	int atbKey = OISKeyToATBKey(arg.key);

	return (TwKeyPressed(atbKey, TW_KMOD_NONE) == 1);
}
Exemple #25
0
bool Tweaker::TranslateEvent(SDL_Event& event)
{
	if(!s_isInit || !s_enabled || s_doNotUseLib) {
		return false;
	}

	int handled = 0;
	switch (event.type)
	{
	case SDL_KEYDOWN:
		if (event.key.keysym.sym & SDLK_SCANCODE_MASK) {
			int key = 0;
			switch (event.key.keysym.sym) {
			case SDLK_UP:
				key = TW_KEY_UP;
				break;
			case SDLK_DOWN:
				key = TW_KEY_DOWN;
				break;
			case SDLK_RIGHT:
				key = TW_KEY_RIGHT;
				break;
			case SDLK_LEFT:
				key = TW_KEY_LEFT;
				break;
			case SDLK_INSERT:
				key = TW_KEY_INSERT;
				break;
			case SDLK_HOME:
				key = TW_KEY_HOME;
				break;
			case SDLK_END:
				key = TW_KEY_END;
				break;
			case SDLK_PAGEUP:
				key = TW_KEY_PAGE_UP;
				break;
			case SDLK_PAGEDOWN:
				key = TW_KEY_PAGE_DOWN;
				break;
			default:
				if (event.key.keysym.sym >= SDLK_F1 &&
					event.key.keysym.sym <= SDLK_F12) {
					key = event.key.keysym.sym + TW_KEY_F1 - SDLK_F1;
				}
				break;
			}
			if (key != 0) {
				handled = TwKeyPressed(key, event.key.keysym.mod);
			}
		} else {
			handled = TwKeyPressed(event.key.keysym.sym /*& 0xFF*/,
				event.key.keysym.mod);
		}
		break;
	case SDL_MOUSEMOTION:
		handled = TwMouseMotion(event.motion.x, event.motion.y);
		break;
	case SDL_MOUSEBUTTONUP:
	case SDL_MOUSEBUTTONDOWN:
		if (event.type == SDL_MOUSEBUTTONDOWN &&
			(event.button.button == 4 || event.button.button == 5)) {
			// mouse wheel
			static int s_WheelPos = 0;
			if (event.button.button == 4)
				++s_WheelPos;
			else
				--s_WheelPos;
			handled = TwMouseWheel(s_WheelPos);
		} else {
			handled = TwMouseButton(
				(event.type == SDL_MOUSEBUTTONUP) ?
			TW_MOUSE_RELEASED : TW_MOUSE_PRESSED,
								(TwMouseButtonID)event.button.button);
		}
		break;
	case SDL_WINDOWEVENT:
		if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
			// tell the new size to TweakBar
			TwWindowSize(event.window.data1, event.window.data2);
			// do not set 'handled'
			// SDL_VIDEORESIZE may be also processed by the calling application
		}
		break;
	}

	return handled != 0? true : false;
}