diff --git a/console/src/ButtonParamUILayer.cpp b/console/src/ButtonParamUILayer.cpp index f6800d4539..1d3a909c0b 100644 --- a/console/src/ButtonParamUILayer.cpp +++ b/console/src/ButtonParamUILayer.cpp @@ -69,9 +69,24 @@ bool ButtonParamUILayer::onKey(Key key, int scancode, KeyAction action, Modifier default: cleanKey = static_cast(key); } cleanKey = cleanKey & ~vislib::sys::KeyCode::KEY_MOD; - if ((mods & KEY_MOD_ALT) == KEY_MOD_ALT) cleanKey |= vislib::sys::KeyCode::KEY_MOD_ALT; - if ((mods & KEY_MOD_CTRL) == KEY_MOD_CTRL) cleanKey |= vislib::sys::KeyCode::KEY_MOD_CTRL; - if ((mods & KEY_MOD_SHIFT) == KEY_MOD_SHIFT) cleanKey |= vislib::sys::KeyCode::KEY_MOD_SHIFT; + if ((mods & KEY_MOD_ALT) == KEY_MOD_ALT) { + ::mmcSetInputModifier(hView, MMC_INMOD_ALT, true); + cleanKey |= vislib::sys::KeyCode::KEY_MOD_ALT; + } else { + ::mmcSetInputModifier(hView, MMC_INMOD_ALT, false); + } + if ((mods & KEY_MOD_CTRL) == KEY_MOD_CTRL) { + ::mmcSetInputModifier(hView, MMC_INMOD_CTRL, true); + cleanKey |= vislib::sys::KeyCode::KEY_MOD_CTRL; + } else { + ::mmcSetInputModifier(hView, MMC_INMOD_CTRL, false); + } + if ((mods & KEY_MOD_SHIFT) == KEY_MOD_SHIFT) { + ::mmcSetInputModifier(hView, MMC_INMOD_SHIFT, true); + cleanKey |= vislib::sys::KeyCode::KEY_MOD_SHIFT; + } else { + ::mmcSetInputModifier(hView, MMC_INMOD_SHIFT, false); + } vislib::sys::KeyCode keycode(cleanKey); diff --git a/console/src/gl/ATBUILayer.cpp b/console/src/gl/ATBUILayer.cpp index 3a0c30d44a..83c7b08287 100644 --- a/console/src/gl/ATBUILayer.cpp +++ b/console/src/gl/ATBUILayer.cpp @@ -107,9 +107,25 @@ bool gl::ATBUILayer::onKey(Key key, int scancode, KeyAction action, Modifiers mo ::TwSetCurrentWindow(atbWinID); atbKeyMod = 0; - if (mods & Modifiers::KEY_MOD_SHIFT) atbKeyMod |= TW_KMOD_SHIFT; - if (mods & Modifiers::KEY_MOD_CTRL) atbKeyMod |= TW_KMOD_CTRL; - if (mods & Modifiers::KEY_MOD_ALT) atbKeyMod |= TW_KMOD_ALT; + if (mods & Modifiers::KEY_MOD_SHIFT) { + ::mmcSetInputModifier(hView, MMC_INMOD_SHIFT, true); + atbKeyMod |= TW_KMOD_SHIFT; + } else { + ::mmcSetInputModifier(hView, MMC_INMOD_SHIFT, false); + } + if (mods & Modifiers::KEY_MOD_CTRL) { + ::mmcSetInputModifier(hView, MMC_INMOD_CTRL, true); + atbKeyMod |= TW_KMOD_CTRL; + } else { + ::mmcSetInputModifier(hView, MMC_INMOD_CTRL, false); + } + if (mods & Modifiers::KEY_MOD_ALT) { + ::mmcSetInputModifier(hView, MMC_INMOD_ALT, true); + atbKeyMod |= TW_KMOD_ALT; + } else { + ::mmcSetInputModifier(hView, MMC_INMOD_ALT, false); + } + // Process key pressed if (action == KeyAction::PRESS || action == KeyAction::REPEAT) { diff --git a/core/include/mmcore/view/View3D.h b/core/include/mmcore/view/View3D.h index 8b44274249..81dd7bf299 100644 --- a/core/include/mmcore/view/View3D.h +++ b/core/include/mmcore/view/View3D.h @@ -462,6 +462,8 @@ namespace view { /** The move step size in world coordinates */ param::ParamSlot viewKeyMoveStepSlot; + param::ParamSlot viewKeyRunFactorSlot; + /** The angle rotate step in degrees */ param::ParamSlot viewKeyAngleStepSlot; diff --git a/core/src/view/View3D.cpp b/core/src/view/View3D.cpp index 09a2224486..98f3f3a67c 100644 --- a/core/src/view/View3D.cpp +++ b/core/src/view/View3D.cpp @@ -70,6 +70,7 @@ view::View3D::View3D(void) : view::AbstractView3D(), AbstractCamParamSync(), cam overrideCall(NULL), #ifdef ENABLE_KEYBOARD_VIEW_CONTROL viewKeyMoveStepSlot("viewKey::MoveStep", "The move step size in world coordinates"), + viewKeyRunFactorSlot("viewKey::RunFactor", "The factor for step size multiplication when running (shift)"), viewKeyAngleStepSlot("viewKey::AngleStep", "The angle rotate step in degrees"), mouseSensitivitySlot("viewKey::MouseSensitivity", "used for WASD mode"), viewKeyRotPointSlot("viewKey::RotPoint", "The point around which the view will be roateted"), @@ -172,6 +173,9 @@ view::View3D::View3D(void) : view::AbstractView3D(), AbstractCamParamSync(), cam this->viewKeyMoveStepSlot << new param::FloatParam(0.1f, 0.001f); this->MakeSlotAvailable(&this->viewKeyMoveStepSlot); + this->viewKeyRunFactorSlot << new param::FloatParam(2.0f, 0.1f); + this->MakeSlotAvailable(&this->viewKeyRunFactorSlot); + this->viewKeyAngleStepSlot << new param::FloatParam(15.0f, 0.001f, 360.0f); this->MakeSlotAvailable(&this->viewKeyAngleStepSlot); @@ -1320,6 +1324,10 @@ bool view::View3D::viewKeyPressed(param::ParamSlot& p) { || (&p == &this->viewKeyMoveDownSlot)) { // move float step = this->viewKeyMoveStepSlot.Param()->Value(); + const float runFactor = this->viewKeyRunFactorSlot.Param()->Value(); + if (this->modkeys.GetModifierState(vislib::graphics::InputModifiers::MODIFIER_SHIFT)) { + step *= runFactor; + } vislib::math::Vector move; if (&p == &this->viewKeyZoomInSlot) {