diff --git a/vclib/render/include/vclib/render/drawers/abstract_viewer_drawer.h b/vclib/render/include/vclib/render/drawers/abstract_viewer_drawer.h index 2ef64c83c..ae4007cef 100644 --- a/vclib/render/include/vclib/render/drawers/abstract_viewer_drawer.h +++ b/vclib/render/include/vclib/render/drawers/abstract_viewer_drawer.h @@ -131,6 +131,11 @@ class AbstractViewerDrawer : case Key::A: toggleAxisVisibility(); break; + case Key::S: + if (modifiers[KeyModifier::CONTROL]) + DRT::DRW::screenshot(derived(), "viewer_screenshot.png"); + break; + case Key::T: toggleTrackBallVisibility(); break; default: break; diff --git a/vclib/render/include/vclib/render/renderer.h b/vclib/render/include/vclib/render/renderer.h index 3f056479c..e9322c669 100644 --- a/vclib/render/include/vclib/render/renderer.h +++ b/vclib/render/include/vclib/render/renderer.h @@ -344,6 +344,11 @@ class Renderer : { return CanvasType::onReadDepth(point, callback); } + + void dScreenshot(const std::string& filename, uint width, uint height) + { + CanvasType::onScreenshot(filename, width, height); + } }; /*** Inner classes: Attorneys ***/ @@ -671,6 +676,26 @@ class Renderer::DRW { return r->dReadDepth(point, callback); } + + /** + * @brief A Drawer object can request a screenshot of the canvas. This + * function is called by the Drawer object to request a screenshot of the + * canvas. + * + * @param[in] filename: The filename where the screenshot will be saved. + * @param[in] width: The width of the screenshot. If 0, the width of the + * canvas will be used. + * @param[in] height: The height of the screenshot. If 0, the height of the + * canvas will be used. + */ + static void screenshot( + Renderer* r, + const std::string& filename, + uint width = 0, + uint height = 0) + { + r->dScreenshot(filename, width, height); + } }; } // namespace vcl