Mercurial > hg > orthanc-stone
diff Samples/Sdl/SdlHelpers.h @ 1406:5d7ee14dc1eb
Mouse wheel handler is now OK in SDL and Wasm
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Thu, 30 Apr 2020 00:25:55 +0200 |
parents | 3e644f6fadd4 |
children | b424028392cf |
line wrap: on
line diff
--- a/Samples/Sdl/SdlHelpers.h Wed Apr 29 22:06:58 2020 +0200 +++ b/Samples/Sdl/SdlHelpers.h Thu Apr 30 00:25:55 2020 +0200 @@ -114,126 +114,6 @@ } return NULL; } - - inline void SdlRunLoop(const std::vector<boost::shared_ptr<OrthancStone::SdlViewport> >& viewports, - OrthancStone::IViewportInteractor& interactor) - { - using namespace OrthancStone; - { - int scancodeCount = 0; - const uint8_t* keyboardState = SDL_GetKeyboardState(&scancodeCount); - - bool stop = false; - while (!stop) - { - bool paint = false; - SDL_Event event; - while (SDL_PollEvent(&event)) - { - if (event.type == SDL_QUIT) - { - stop = true; - break; - } - else if (event.type == SDL_WINDOWEVENT && - (event.window.event == SDL_WINDOWEVENT_RESIZED || - event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)) - { - boost::shared_ptr<SdlViewport> viewport = GetSdlViewportFromWindowId( - viewports, event.window.windowID); - viewport->UpdateSize(event.window.data1, event.window.data2); - } - else if (event.type == SDL_WINDOWEVENT && - (event.window.event == SDL_WINDOWEVENT_SHOWN || - event.window.event == SDL_WINDOWEVENT_EXPOSED)) - { - boost::shared_ptr<SdlViewport> viewport = GetSdlViewportFromWindowId( - viewports, event.window.windowID); - viewport->Paint(); - } - else if (event.type == SDL_KEYDOWN && - event.key.repeat == 0 /* Ignore key bounce */) - { - boost::shared_ptr<SdlViewport> viewport = GetSdlViewportFromWindowId( - viewports, event.window.windowID); - - switch (event.key.keysym.sym) - { - case SDLK_f: - viewport->ToggleMaximize(); - break; - - case SDLK_s: - { - std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport->Lock()); - lock->GetCompositor().FitContent(lock->GetController().GetScene()); - lock->Invalidate(); - } - break; - - case SDLK_q: - stop = true; - break; - - default: - break; - } - } - else if (event.type == SDL_MOUSEBUTTONDOWN || - event.type == SDL_MOUSEMOTION || - event.type == SDL_MOUSEBUTTONUP) - { - boost::shared_ptr<SdlViewport> viewport = GetSdlViewportFromWindowId( - viewports, event.window.windowID); - - std::auto_ptr<OrthancStone::IViewport::ILock> lock(viewport->Lock()); - if (lock->HasCompositor()) - { - OrthancStone::PointerEvent p; - OrthancStoneHelpers::GetPointerEvent(p, lock->GetCompositor(), - event, keyboardState, scancodeCount); - - switch (event.type) - { - case SDL_MOUSEBUTTONDOWN: - lock->GetController().HandleMousePress(interactor, p, - lock->GetCompositor().GetCanvasWidth(), - lock->GetCompositor().GetCanvasHeight()); - lock->Invalidate(); - break; - - case SDL_MOUSEMOTION: - if (lock->GetController().HandleMouseMove(p)) - { - lock->Invalidate(); - } - break; - - case SDL_MOUSEBUTTONUP: - lock->GetController().HandleMouseRelease(p); - lock->Invalidate(); - break; - - default: - throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); - } - } - } - else - { - for (size_t i = 0; i < viewports.size(); ++i) - { - boost::shared_ptr<SdlViewport> viewport = viewports[i]; - if (viewport->IsRefreshEvent(event)) - viewport->Paint(); - } - } - } - } - // Small delay to avoid using 100% of CPU - SDL_Delay(1); - } - } }