void InputEvents::sub_ScaleZoom(int vswitch) { const GlueMapWindow *map_window = CommonInterface::main_window.ActivateMap(); if (map_window == NULL) return; const MapWindowProjection &projection = map_window->VisibleProjection(); fixed value = projection.GetMapScale(); if (projection.HaveScaleList()) { value = projection.StepMapScale(value, -vswitch); } else { if (vswitch == 1) // zoom in a little value /= fixed_sqrt_two; else if (vswitch == -1) // zoom out a little value *= fixed_sqrt_two; else if (vswitch == 2) // zoom in a lot value /= 2; else if (vswitch == -2) // zoom out a lot value *= 2; } sub_SetZoom(value); }
// eventAutoZoom - Turn on|off|toggle AutoZoom // misc: // auto on - Turn on if not already // auto off - Turn off if not already // auto toggle - Toggle current full screen status // auto show - Shows autozoom status // + - Zoom in // ++ - Zoom in near // - - Zoom out // -- - Zoom out far // n.n - Zoom to a set scale // show - Show current zoom scale void InputEvents::eventZoom(const TCHAR* misc) { // JMW pass through to handler in MapWindow // here: // -1 means toggle // 0 means off // 1 means on MapSettings &settings_map = CommonInterface::SetMapSettings(); if (StringIsEqual(misc, _T("auto toggle"))) sub_AutoZoom(-1); else if (StringIsEqual(misc, _T("auto on"))) sub_AutoZoom(1); else if (StringIsEqual(misc, _T("auto off"))) sub_AutoZoom(0); else if (StringIsEqual(misc, _T("auto show"))) { if (settings_map.auto_zoom_enabled) Message::AddMessage(_("Auto. zoom on")); else Message::AddMessage(_("Auto. zoom off")); } else if (StringIsEqual(misc, _T("slowout"))) sub_ScaleZoom(-1); else if (StringIsEqual(misc, _T("slowin"))) sub_ScaleZoom(1); else if (StringIsEqual(misc, _T("out"))) sub_ScaleZoom(-1); else if (StringIsEqual(misc, _T("in"))) sub_ScaleZoom(1); else if (StringIsEqual(misc, _T("-"))) sub_ScaleZoom(-1); else if (StringIsEqual(misc, _T("+"))) sub_ScaleZoom(1); else if (StringIsEqual(misc, _T("--"))) sub_ScaleZoom(-2); else if (StringIsEqual(misc, _T("++"))) sub_ScaleZoom(2); else if (StringIsEqual(misc, _T("circlezoom toggle"))) { settings_map.circle_zoom_enabled = !settings_map.circle_zoom_enabled; } else if (StringIsEqual(misc, _T("circlezoom on"))) { settings_map.circle_zoom_enabled = true; } else if (StringIsEqual(misc, _T("circlezoom off"))) { settings_map.circle_zoom_enabled = false; } else if (StringIsEqual(misc, _T("circlezoom show"))) { if (settings_map.circle_zoom_enabled) Message::AddMessage(_("Circling zoom on")); else Message::AddMessage(_("Circling zoom off")); } else { TCHAR *endptr; double zoom = _tcstod(misc, &endptr); if (endptr == misc) return; sub_SetZoom(Units::ToSysDistance(fixed(zoom))); } XCSoarInterface::SendMapSettings(true); }
void InputEvents::sub_ScaleZoom(int vswitch) { const GlueMapWindow *map_window = PageActions::ShowMap(); if (map_window == NULL) return; const MapWindowProjection &projection = map_window->VisibleProjection(); if (!projection.IsValid()) return; auto value = projection.GetMapScale(); if (projection.HaveScaleList()) { value = projection.StepMapScale(value, -vswitch); } else { if (vswitch == 1) // zoom in a little value /= M_SQRT2; else if (vswitch == -1) // zoom out a little value *= M_SQRT2; else if (vswitch == 2) // zoom in a lot value /= 2; else if (vswitch == -2) // zoom out a lot value *= 2; } sub_SetZoom(value); }