From a52555b9273eeb4adceb4a66580a25ccfb317903 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 28 Jan 2016 00:05:49 +0300 Subject: [PATCH] Renderer::GetClipRect() now returns Optional Also add test for clipping rect --- CHANGES.md | 3 +++ SDL2pp/Renderer.cc | 8 ++++++-- SDL2pp/Renderer.hh | 5 +++-- tests/live_rendering.cc | 24 ++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e7af30b..47e38cd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## 0.13.0 - unreleased +### Changed +* ```Renderer::GetClipRect``` now returns ```Optional``` instead of (possibly empty) ```Rect``` + ### Removed * Deprecated ```Renderer::GetInfo()``` variant which takes pointer (use variant which takes reference) diff --git a/SDL2pp/Renderer.cc b/SDL2pp/Renderer.cc index bf23ee1..f1f198b 100644 --- a/SDL2pp/Renderer.cc +++ b/SDL2pp/Renderer.cc @@ -352,10 +352,14 @@ bool Renderer::TargetSupported() const { return SDL_RenderTargetSupported(renderer_) == SDL_TRUE; } -Rect Renderer::GetClipRect() const { +Optional Renderer::GetClipRect() const { SDL_Rect rect; SDL_RenderGetClipRect(renderer_, &rect); - return rect; + + if (SDL_RectEmpty(&rect)) + return NullOpt; + else + return Rect(rect); } Point Renderer::GetLogicalSize() const { diff --git a/SDL2pp/Renderer.hh b/SDL2pp/Renderer.hh index 9a0bce0..7e9efbf 100644 --- a/SDL2pp/Renderer.hh +++ b/SDL2pp/Renderer.hh @@ -648,12 +648,13 @@ public: //////////////////////////////////////////////////////////// /// \brief Get the clip rectangle for the current target /// - /// \returns Rect representing current clipping area + /// \returns Rect representing current clipping area or + /// NullOpt if clipping is disabled /// /// \see http://wiki.libsdl.org/SDL_RenderGetClipRect /// //////////////////////////////////////////////////////////// - Rect GetClipRect() const; + Optional GetClipRect() const; //////////////////////////////////////////////////////////// /// \brief Get device independent resolution for rendering diff --git a/tests/live_rendering.cc b/tests/live_rendering.cc index f6bb032..d7a25db 100644 --- a/tests/live_rendering.cc +++ b/tests/live_rendering.cc @@ -205,6 +205,30 @@ BEGIN_TEST(int, char*[]) SDL_Delay(1000); } + { + // Clip rect + renderer.SetDrawColor(0, 0, 0); + renderer.Clear(); + + renderer.SetClipRect(Rect(1, 1, 1, 1)); + + renderer.SetDrawColor(255, 255, 255); + renderer.FillRect(0, 0, 10, 10); + + EXPECT_TRUE(renderer.GetClipRect() && renderer.GetClipRect() == Rect(1, 1, 1, 1)); + + renderer.SetClipRect(NullOpt); + + EXPECT_TRUE(!renderer.GetClipRect()); + + pixels.Retrieve(renderer); + + EXPECT_TRUE(pixels.Test3x3(1, 1, 0x020, 255, 255, 255)); + + renderer.Present(); + SDL_Delay(1000); + } + { // Blend renderer.SetDrawColor(0, 0, 0);