예제 #1
0
void SDLWindow::handleWindowEvent() {
    switch (m_sdlEvent.window.event) {
        case SDL_WINDOWEVENT_MOVED:
            onMove(m_sdlEvent.window.data1, m_sdlEvent.window.data2);
            break;
        case SDL_WINDOWEVENT_RESIZED:
        case SDL_WINDOWEVENT_SIZE_CHANGED:
            onResize(m_sdlEvent.window.data1, m_sdlEvent.window.data2);
            break;
        case SDL_WINDOWEVENT_MINIMIZED:
            onMinimize();
            break;
        case SDL_WINDOWEVENT_MAXIMIZED:
            onMaximize();
            break;
        case SDL_WINDOWEVENT_RESTORED:
            onRestore();
            break;
		case SDL_WINDOWEVENT_SHOWN:
			onDisplay();
			break;
        default:
            break;
    }
}
예제 #2
0
void LanguageBox::onChange() {
	if (isHidden()) return;

	for (int32 i = 0, l = _langs.size(); i < l; ++i) {
		int32 langId = _langs[i]->val();
		if (_langs[i]->checked() && langId != cLang()) {
			LangLoaderResult result;
			if (langId > 0) {
				LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[langId] + qsl(".strings"), LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_box_ok));
				result = loader.found();
			} else if (langId == languageTest) {
				LangLoaderPlain loader(cLangFile(), LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_box_ok));
				result = loader.found();
			}
			QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)),
			        save = result.value(lng_box_ok, langOriginal(lng_box_ok)),
					cancel = result.value(lng_cancel, langOriginal(lng_cancel));
			ConfirmBox *box = new ConfirmBox(text, save, st::defaultBoxButton, cancel);
			connect(box, SIGNAL(confirmed()), this, SLOT(onSave()));
			connect(box, SIGNAL(closed()), this, SLOT(onRestore()));
			App::wnd()->replaceLayer(box);
		}
	}
}
예제 #3
0
//METHODS
void Event::onEvent(SDL_Event* event) {
    switch(event->type) {
        case SDL_ACTIVEEVENT: {
            switch (event->active.state) {
                case SDL_APPMOUSEFOCUS: {
                    if (event->active.gain) onMouseFocus();
                    else onMouseBlur();
                    break;
                }
                case SDL_APPINPUTFOCUS: {
                    if (event->active.gain) onInputFocus();
                    else onInputBlur();
                    break;
                }
                case SDL_APPACTIVE: {
                    if (event->active.gain) onRestore();
                    else onMinimize();
                    break;
                }
            }
            break;
        }
        case SDL_KEYDOWN: {
            onKeyDown(event->key.keysym.sym, event->key.keysym.mod,
                event->key.keysym.unicode);
            break;
        }
        case SDL_KEYUP: {
            onKeyUp(event->key.keysym.sym, event->key.keysym.mod,
                event->key.keysym.unicode);
            break;
        }
        case SDL_MOUSEMOTION: {
            onMouseMove(event->motion.x, event->motion.y,
                event->motion.xrel, event->motion.yrel,
                (event->motion.state & SDL_BUTTON(SDL_BUTTON_LEFT)) != 0,
                (event->motion.state & SDL_BUTTON(SDL_BUTTON_RIGHT)) != 0,
                (event->motion.state & SDL_BUTTON(SDL_BUTTON_MIDDLE)) != 0);
            break;
        }
        case SDL_MOUSEBUTTONDOWN: {
            switch(event->button.button) {
                case SDL_BUTTON_LEFT: {
                    onLButtonDown(event->button.x, event->button.y);
                    break;
                }
                case SDL_BUTTON_RIGHT: {
                    onRButtonDown(event->button.x, event->button.y);
                    break;
                }
                case SDL_BUTTON_MIDDLE: {
                    onMButtonDown(event->button.x, event->button.y);
                    break;
                }
            }
            break;
        }
        case SDL_MOUSEBUTTONUP: {
            switch(event->button.button) {
                case SDL_BUTTON_LEFT: {
                    onLButtonUp(event->button.x, event->button.y);
                    break;
                }
                case SDL_BUTTON_RIGHT: {
                    onRButtonUp(event->button.x, event->button.y);
                    break;
                }
                case SDL_BUTTON_MIDDLE: {
                    onMButtonUp(event->button.x, event->button.y);
                    break;
                }
            }
            break;
        }
        case SDL_JOYAXISMOTION: {
            onJoyAxis(event->jaxis.which, event->jaxis.axis,
                event->jaxis.value);
            break;
        }
        case SDL_JOYBALLMOTION: {
            onJoyBall(event->jball.which, event->jball.ball,
                event->jball.xrel, event->jball.yrel);
            break;
        }
        case SDL_JOYHATMOTION: {
            onJoyHat(event->jhat.which, event->jhat.hat,
                event->jhat.value);
            break;
        }
        case SDL_JOYBUTTONDOWN: {
            onJoyButtonDown(event->jbutton.which, event->jbutton.button);
            break;
        }
        case SDL_JOYBUTTONUP: {
            onJoyButtonUp(event->jbutton.which, event->jbutton.button);
            break;
        }
        case SDL_QUIT: {
            onExit();
            break;
        }
        case SDL_SYSWMEVENT: {
            //Ignore
            break;
        }
        case SDL_VIDEORESIZE: {
            onResize(event->resize.w, event->resize.h);
            break;
        }
        case SDL_VIDEOEXPOSE: {
            onExpose();
            break;
        }
        default: {
            onUser(event->user.type, event->user.code,
                event->user.data1, event->user.data2);
            break;
        }
    }
}
예제 #4
0
void SDL2Window::tick() {

    SDL_Event event;
    while(SDL_PollEvent(&event)) {

        switch(event.type) {

        case SDL_WINDOWEVENT: {
            switch(event.window.event) {

            case SDL_WINDOWEVENT_SHOWN:
                onShow(true);
                break;
            case SDL_WINDOWEVENT_HIDDEN:
                onShow(false);
                break;
            case SDL_WINDOWEVENT_EXPOSED:
                onPaint();
                break;
            case SDL_WINDOWEVENT_MINIMIZED:
                onMinimize();
                break;
            case SDL_WINDOWEVENT_MAXIMIZED:
                onMaximize();
                break;
            case SDL_WINDOWEVENT_RESTORED:
                onRestore();
                break;
            case SDL_WINDOWEVENT_FOCUS_GAINED:
                onFocus(true);
                break;
            case SDL_WINDOWEVENT_FOCUS_LOST:
                onFocus(false);
                break;

            case SDL_WINDOWEVENT_MOVED: {
                onMove(event.window.data1, event.window.data2);
                break;
            }

            case SDL_WINDOWEVENT_SIZE_CHANGED: {
                Vec2i newSize(event.window.data1, event.window.data2);
                if(newSize != m_size && !m_fullscreen) {
                    m_renderer->beforeResize(false);
                    updateSize();
                } else {
                    // SDL regrettably sends resize events when a fullscreen window
                    // is minimized - we'll have none of that!
                }
                break;
            }

            case SDL_WINDOWEVENT_CLOSE: {
                // The user has requested to close a single window
                // TODO we only support one main window for now
                break;
            }

            }
            break;
        }

        case SDL_QUIT: {
            // The user has requested to close the whole program
            // TODO onDestroy() fits SDL_WINDOWEVENT_CLOSE better, but SDL captures Ctrl+C
            // evenst and *only* sends the SDL_QUIT event for them while normal close
            // generates *both* SDL_WINDOWEVENT_CLOSE and SDL_QUIT
            onDestroy();
            return; // abort event loop!
        }

        }

        if(m_input) {
            m_input->onEvent(event);
        }

    }

    if(!m_renderer->isInitialized()) {
        updateSize();
        m_renderer->afterResize();
        m_renderer->SetViewport(Rect(m_size.x, m_size.y));
    }
}
예제 #5
0
    /// event handlers
    void Module::onEvent(const SDL_Event& inEvent)
    {
        switch (inEvent.type)
        {
            case SDL_ACTIVEEVENT:
            {
                switch (inEvent.active.state)
                {
                    case SDL_APPMOUSEFOCUS:
                    {
                        if (inEvent.active.gain)
                            onMouseFocus();
                        else
                            onMouseBlur();

                        break;
                    }
                    case SDL_APPINPUTFOCUS:
                    {
                        if (inEvent.active.gain)
                            onInputFocus();
                        else
                            onInputBlur();

                        break;
                    }
                    case SDL_APPACTIVE:
                    {
                        if (inEvent.active.gain)
                            onRestore();
                        else
                            onMinimize();

                        break;
                    }
                }
                break;
            }

            case SDL_KEYDOWN:
            {
                onKeyDown(inEvent.key.keysym.sym, inEvent.key.keysym.mod,
                    inEvent.key.keysym.unicode);
                break;
            }

            case SDL_KEYUP:
            {
                onKeyUp(inEvent.key.keysym.sym, inEvent.key.keysym.mod,
                    inEvent.key.keysym.unicode);
                break;
            }

            case SDL_MOUSEMOTION:
            {
                onMouseMove(inEvent.motion.x, inEvent.motion.y,
                    inEvent.motion.xrel, inEvent.motion.yrel,
                    inEvent.motion.state & SDL_BUTTON(SDL_BUTTON_LEFT),
                    inEvent.motion.state & SDL_BUTTON(SDL_BUTTON_RIGHT),
                    inEvent.motion.state & SDL_BUTTON(SDL_BUTTON_MIDDLE));
                break;
            }

            case SDL_MOUSEBUTTONDOWN:
            {
                switch (inEvent.button.button)
                {
                    case SDL_BUTTON_LEFT:
                    {
                        onLButtonDown(inEvent.button.x, inEvent.button.y);
                        break;
                    }
                    case SDL_BUTTON_RIGHT:
                    {
                        onRButtonDown(inEvent.button.x, inEvent.button.y);
                        break;
                    }
                    case SDL_BUTTON_MIDDLE:
                    {
                        onMButtonDown(inEvent.button.x, inEvent.button.y);
                        break;
                    }
                }
                break;
            }

            case SDL_MOUSEBUTTONUP:
            {
                switch (inEvent.button.button)
                {
                    case SDL_BUTTON_LEFT:
                    {
                        onLButtonUp(inEvent.button.x, inEvent.button.y);
                        break;
                    }
                    case SDL_BUTTON_RIGHT:
                    {
                        onRButtonUp(inEvent.button.x, inEvent.button.y);
                        break;
                    }
                    case SDL_BUTTON_MIDDLE:
                    {
                        onMButtonUp(inEvent.button.x, inEvent.button.y);
                        break;
                    }
                    case SDL_BUTTON_WHEELUP:
                    {
                        onMouseWheel(true, false);
                        break;
                    }
                    case SDL_BUTTON_WHEELDOWN:
                    {
                        onMouseWheel(false, true);
                        break;
                    }
                }
                break;
            }

            case SDL_JOYAXISMOTION:
            {
                onJoyAxis(inEvent.jaxis.which, inEvent.jaxis.axis,
                          inEvent.jaxis.value);
                break;
            }

            case SDL_JOYBALLMOTION:
            {
                onJoyBall(inEvent.jball.which, inEvent.jball.ball,
                          inEvent.jball.xrel, inEvent.jball.yrel);
                break;
            }

            case SDL_JOYHATMOTION:
            {
                onJoyHat(inEvent.jhat.which, inEvent.jhat.hat,
                         inEvent.jhat.value);
                break;
            }
            case SDL_JOYBUTTONDOWN:
            {
                onJoyButtonDown(inEvent.jbutton.which,
                    inEvent.jbutton.button);
                break;
            }

            case SDL_JOYBUTTONUP:
            {
                onJoyButtonUp(inEvent.jbutton.which, inEvent.jbutton.button);
                break;
            }

            case SDL_QUIT:
            {
                onExit();
                break;
            }

            case SDL_SYSWMEVENT:
            {
                break;
            }

            case SDL_VIDEORESIZE:
            {
                onResize(inEvent.resize.w, inEvent.resize.h);
                break;
            }

            case SDL_VIDEOEXPOSE:
            {
                onExpose();
                break;
            }

            default:
            {
                onUser(inEvent.user.type, inEvent.user.code,
                    inEvent.user.data1, inEvent.user.data2);
                break;
            }
        }
    }
예제 #6
0
void SDLWindow::tick() {
	
	SDL_Event event;
	while(SDL_PollEvent(&event)) {
		
		switch(event.type) {
			
			case SDL_ACTIVEEVENT: {
				if(event.active.state & SDL_APPINPUTFOCUS) {
					// ignored
				}
				if(event.active.state & SDL_APPACTIVE) {
					if(event.active.gain) {
						onRestore();
					} else {
						onMinimize();
					}
				}
				if(input != NULL && (event.active.state & SDL_APPMOUSEFOCUS)) {
					input->onInputEvent(event);
				}
				break;
			}
			
			case SDL_KEYDOWN:
				
				// For some reason, release notes from SDL 1.2.12 says a SDL_QUIT message
				// should be sent when Command+Q is pressed on Mac OS or ALT-F4 on other platforms
				// but it doesn't look like it's working as expected...
#if ARX_PLATFORM == ARX_PLATFORM_MACOSX
				if(event.key.keysym.sym == SDLK_q
					&& (event.key.keysym.mod & KMOD_META) != KMOD_NONE) {
#else
				if(event.key.keysym.sym == SDLK_F4
					&& (event.key.keysym.mod & KMOD_ALT) != KMOD_NONE) {
#endif
					onDestroy();
					break;
				}
				
#if ARX_PLATFORM != ARX_PLATFORM_WIN32
				// The SDL X11 backend always grabs all keys when in fullscreen mode,
				// ufortunately breaking window manager shortcuts.
				// At least provide users with a way to switch to other windows.
				if(event.key.keysym.sym == SDLK_TAB
				   && (event.key.keysym.mod & KMOD_ALT) != KMOD_NONE) {
					SDL_WM_IconifyWindow();
				}
#endif
				
			case SDL_KEYUP:
			case SDL_MOUSEMOTION:
			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
			case SDL_JOYAXISMOTION:
			case SDL_JOYBALLMOTION:
			case SDL_JOYHATMOTION:
			case SDL_JOYBUTTONDOWN:
			case SDL_JOYBUTTONUP: {
				if(input) {
					input->onInputEvent(event);
				}
				break;
			}
			
			case SDL_QUIT: {
				onDestroy();
				break;
			}
			
			case SDL_VIDEORESIZE: {
				Vec2i newSize(event.resize.w, event.resize.h);
				if(newSize != size_ && !isFullscreen_) {
					setMode(DisplayMode(newSize, depth_), false);
					updateSize(false);
				}
				break;
			}
			
			case SDL_VIDEOEXPOSE: {
				onPaint();
				break;
			}
			
		}
		
	}
	
}

Vec2i SDLWindow::getCursorPosition() const {
	int cursorPosX, cursorPosY;
	SDL_GetMouseState(&cursorPosX, &cursorPosY);
	return Vec2i(cursorPosX, cursorPosY);
}
예제 #7
0
void SDL2Window::tick() {
	
	SDL_Event event;
	while(SDL_PollEvent(&event)) {
		
		switch(event.type) {
			
			case SDL_WINDOWEVENT: {
				switch(event.window.event) {
					
					case SDL_WINDOWEVENT_SHOWN:        onShow(true);   break;
					case SDL_WINDOWEVENT_HIDDEN:       onShow(false);  break;
					case SDL_WINDOWEVENT_EXPOSED:      onPaint();      break;
					case SDL_WINDOWEVENT_MINIMIZED:    onMinimize();   break;
					case SDL_WINDOWEVENT_MAXIMIZED:    onMaximize();   break;
					case SDL_WINDOWEVENT_RESTORED:     onRestore();    break;
					case SDL_WINDOWEVENT_FOCUS_GAINED: onFocus(true);  break;
					case SDL_WINDOWEVENT_FOCUS_LOST:   onFocus(false); break;
					
					case SDL_WINDOWEVENT_MOVED: {
						onMove(event.window.data1, event.window.data2);
						break;
					}
					
					case SDL_WINDOWEVENT_SIZE_CHANGED: {
						Vec2i newSize(event.window.data1, event.window.data2);
						if(newSize != m_size && !m_fullscreen) {
							m_renderer->beforeResize(false);
							updateSize();
						} else {
							// SDL regrettably sends resize events when a fullscreen window
							// is minimized - we'll have none of that!
						}
						break;
					}
					
					case SDL_WINDOWEVENT_CLOSE: {
						// The user has requested to close a single window
						// TODO we only support one main window for now
						break;
					}
					
				}
				break;
			}
			
			#if ARX_PLATFORM == ARX_PLATFORM_WIN32
			case SDL_KEYDOWN: {
				// SDL2 is still eating our ALT+F4 under windows...
				// See bug report here: https://bugzilla.libsdl.org/show_bug.cgi?id=1555
				if(event.key.keysym.sym == SDLK_F4
				   && (event.key.keysym.mod & KMOD_ALT) != KMOD_NONE) {
					SDL_Event quitevent;
					quitevent.type = SDL_QUIT;
					SDL_PushEvent(&quitevent);
				}
				break;
			}
			#endif
			
			case SDL_QUIT: {
				// The user has requested to close the whole program
				// TODO onDestroy() fits SDL_WINDOWEVENT_CLOSE better, but SDL captures Ctrl+C
				// evenst and *only* sends the SDL_QUIT event for them while normal close
				// generates *both* SDL_WINDOWEVENT_CLOSE and SDL_QUIT
				onDestroy();
				return; // abort event loop!
			}
			
		}
		
		if(m_input) {
			m_input->onEvent(event);
		}
		
	}
	
	if(!m_renderer->isInitialized()) {
		updateSize();
		m_renderer->afterResize();
		m_renderer->SetViewport(Rect(m_size.x, m_size.y));
	}
}
예제 #8
0
//==============================================================================
void CEvent::onEvent(SDL_Event *anEvent) {
    switch(anEvent->type) {

        case SDL_WINDOWEVENT: {

            switch(anEvent->window.event) {

                case SDL_WINDOWEVENT_ENTER:{
                    onMouseFocus();
                    break;
                }

                case SDL_WINDOWEVENT_LEAVE:{
                    onMouseBlur();
                    break;
                }

                case SDL_WINDOWEVENT_FOCUS_GAINED: {
                    onInputFocus();                   
                    break;
                }

                case SDL_WINDOWEVENT_FOCUS_LOST: {
                    onInputBlur();
                    break;
                }

                case SDL_WINDOWEVENT_RESTORED: {
                    onRestore();
                    break;
                }

                case SDL_WINDOWEVENT_MINIMIZED: {
                    onMinimize();
                    break;
                }

            }

            break;

        }

        case SDL_KEYDOWN: {
            onKeyPress(anEvent->key.keysym.sym, anEvent->key.keysym.mod);
            break;
        }

        case SDL_KEYUP: {
            onKeyRelease(anEvent->key.keysym.sym,anEvent->key.keysym.mod);
            break;
        }

        case SDL_MOUSEMOTION: {
            onMouseMove(anEvent->motion.x, anEvent->motion.y, anEvent->motion.xrel, anEvent->motion.yrel,(anEvent->motion.state&SDL_BUTTON(SDL_BUTTON_LEFT))!=0,(anEvent->motion.state&SDL_BUTTON(SDL_BUTTON_RIGHT))!=0,(anEvent->motion.state&SDL_BUTTON(SDL_BUTTON_MIDDLE))!=0);
            break;
        }

        case SDL_MOUSEBUTTONDOWN: {
            switch(anEvent->button.button) {
                case SDL_BUTTON_LEFT: {
                    onLButtonDown(anEvent->button.x,anEvent->button.y);
                    break;
                 }

                case SDL_BUTTON_RIGHT: {
                    onRButtonDown(anEvent->button.x,anEvent->button.y);
                    break;
                 }

                case SDL_BUTTON_MIDDLE: {
                    onMButtonDown(anEvent->button.x,anEvent->button.y);
                    break;
                 }
            }
            break;
       }
     
        case SDL_MOUSEBUTTONUP: {
            switch(anEvent->button.button) {
                case SDL_BUTTON_LEFT: {
                    onLButtonUp(anEvent->button.x,anEvent->button.y);
                    break;
                }
                case SDL_BUTTON_RIGHT: {
                    onRButtonUp(anEvent->button.x,anEvent->button.y);
                    break;
                }
                case SDL_BUTTON_MIDDLE: {
                    onMButtonUp(anEvent->button.x,anEvent->button.y);
                    break;
                }
            }
            break;
        }

        case SDL_QUIT: {
            onExit();
            break;
        }

        case SDL_SYSWMEVENT: {
            //Ignore
            break;
        }

        case SDL_WINDOWEVENT_RESIZED: {
            onResize(anEvent->window.data1,anEvent->window.data2);
            break;
        }

        case SDL_WINDOWEVENT_EXPOSED: {
            onExpose();
            break;
        }

        default: {
            onUser(anEvent->user.type,anEvent->user.code,anEvent->user.data1,anEvent->user.data2);
            break;
        }
    }
}
예제 #9
0
void Event::onEvent(SDL_Event *event)
{
    switch (event->type)
    {
        case SDL_ACTIVEEVENT:
            switch (event->active.state)
            {
                case SDL_APPMOUSEFOCUS:
                    if (event->active.gain) {
                        onMouseFocus();
                    }
                    else {
                        onMouseBlur();
                    }
                    break;

                case SDL_APPINPUTFOCUS:
                    if (event->active.gain) {
                        onInputFocus();
                    }
                    else {
                        onInputBlur();
                    }
                    break;

                case SDL_APPACTIVE:
                    if (event->active.gain) {
                        onRestore();
                    }
                    else {
                        onMinimize();
                    }
                    break;
            }
        break; //SDL_ACTIVEEVENT

        case SDL_KEYDOWN:
            onKeyDown(event->key.keysym.sym, event->key.keysym.mod, event->key.keysym.unicode);
            break;

        case SDL_KEYUP:
            onKeyUp(event->key.keysym.sym, event->key.keysym.mod, event->key.keysym.unicode);
            break;

        case SDL_MOUSEBUTTONDOWN:
            onMouseDown(event->button.button, event->button.x, event->button.y);
            break;

        case SDL_MOUSEBUTTONUP:
            onMouseUp(event->button.button, event->button.x, event->button.y);
            break;

        case SDL_JOYAXISMOTION:
            onJoyAxis(event->jaxis.which, event->jaxis.axis, event->jaxis.value);
            break;

        case SDL_JOYBALLMOTION:
            onJoyBall(event->jball.which, event->jball.ball, event->jball.xrel, event->jball.yrel);
            break;

        case SDL_JOYHATMOTION:
            onJoyHat(event->jhat.which, event->jhat.hat, event->jhat.value);
            break;

        case SDL_JOYBUTTONDOWN:
            onJoyButtonDown(event->jbutton.which, event->jbutton.button);
            break;

        case SDL_JOYBUTTONUP:
            onJoyButtonUp(event->jbutton.which, event->jbutton.button);
            break;

        case SDL_QUIT:
            onQuit();
            break;

        case SDL_VIDEORESIZE:
            onResize(event->resize.w, event->resize.h);
            break;

        default:
            onUser(event->user.type, event->user.code, event->user.data1, event->user.data2);
            break;
    }
}