diff --git a/README.md b/README.md index 6be47be..0ade3d4 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,11 @@ try { renderer.Clear(); - // Also note a way to specify null rects - renderer.Copy(sprite1, SDL2pp::Rect::Null(), SDL2pp::Rect::Null()); + // Also note a way to specify null rects and points + renderer.Copy(sprite1, SDL2pp::NullOpt, SDL2pp::NullOpt); // Copy() is overloaded, providing access to both SDL_RenderCopy and SDL_RenderCopyEx - renderer.Copy(sprite2, SDL2pp::Rect::Null(), SDL2pp::Rect::Null(), 45.0); + renderer.Copy(sprite2, SDL2pp::NullOpt, SDL2pp::NullOpt, 45.0); renderer.Present(); diff --git a/SDL2pp/Renderer.cc b/SDL2pp/Renderer.cc index 079f9b8..743517e 100644 --- a/SDL2pp/Renderer.cc +++ b/SDL2pp/Renderer.cc @@ -108,8 +108,6 @@ void Renderer::DrawPoint(int x, int y) { } void Renderer::DrawPoint(const Point& p) { - if (p.IsNull()) - return; DrawPoint(p.GetX(), p.GetY()); } @@ -117,8 +115,7 @@ void Renderer::DrawPoints(const Point* points, int count) { std::vector sdl_points; sdl_points.reserve(count); for (const Point* p = points; p != points + count; ++p) - if (!p->IsNull()) - sdl_points.emplace_back(*p->Get()); + sdl_points.emplace_back(*p); if (SDL_RenderDrawPoints(renderer_, sdl_points.data(), sdl_points.size()) != 0) throw Exception("SDL_RenderDrawPoints failed"); @@ -130,17 +127,14 @@ void Renderer::DrawLine(int x1, int y1, int x2, int y2) { } void Renderer::DrawLine(const Point& p1, const Point& p2) { - if (p1.IsNull() || p2.IsNull()) - return; - DrawLine(p1.GetX(), p1.GetY(), p2.GetX(), p2.GetY()); + DrawLine(p1.x, p1.y, p2.x, p2.y); } void Renderer::DrawLines(const Point* points, int count) { std::vector sdl_points; sdl_points.reserve(count); for (const Point* p = points; p != points + count; ++p) - if (!p->IsNull()) - sdl_points.emplace_back(*p->Get()); + sdl_points.emplace_back(*p); if (SDL_RenderDrawLines(renderer_, sdl_points.data(), sdl_points.size()) != 0) throw Exception("SDL_RenderDrawLines failed"); @@ -153,15 +147,11 @@ void Renderer::DrawRect(int x1, int y1, int x2, int y2) { } void Renderer::DrawRect(const Point& p1, const Point& p2) { - if (p1.IsNull() || p2.IsNull()) - return; - DrawRect(p1.GetX(), p1.GetY(), p2.GetX(), p2.GetY()); + DrawRect(p1.x, p1.y, p2.x, p2.y); } void Renderer::DrawRect(const Rect& r) { - if (r.IsNull()) - return; - if (SDL_RenderDrawRect(renderer_, r.Get()) != 0) + if (SDL_RenderDrawRect(renderer_, &r) != 0) throw Exception("SDL_RenderDrawRect failed"); } @@ -169,8 +159,7 @@ void Renderer::DrawRects(const Rect* rects, int count) { std::vector sdl_rects; sdl_rects.reserve(count); for (const Rect* r = rects; r != rects + count; ++r) - if (!r->IsNull()) - sdl_rects.emplace_back(*r->Get()); + sdl_rects.emplace_back(*r); if (SDL_RenderDrawRects(renderer_, sdl_rects.data(), sdl_rects.size()) != 0) throw Exception("SDL_RenderDrawRects failed"); @@ -183,15 +172,11 @@ void Renderer::FillRect(int x1, int y1, int x2, int y2) { } void Renderer::FillRect(const Point& p1, const Point& p2) { - if (p1.IsNull() || p2.IsNull()) - return; - FillRect(p1.GetX(), p1.GetY(), p2.GetX(), p2.GetY()); + FillRect(p1.x, p1.y, p2.x, p2.y); } void Renderer::FillRect(const Rect& r) { - if (r.IsNull()) - return; - if (SDL_RenderFillRect(renderer_, r.Get()) != 0) + if (SDL_RenderFillRect(renderer_, &r) != 0) throw Exception("SDL_RenderFillRect failed"); } @@ -199,20 +184,19 @@ void Renderer::FillRects(const Rect* rects, int count) { std::vector sdl_rects; sdl_rects.reserve(count); for (const Rect* r = rects; r != rects + count; ++r) - if (!r->IsNull()) - sdl_rects.emplace_back(*r->Get()); + sdl_rects.emplace_back(*r); if (SDL_RenderFillRects(renderer_, sdl_rects.data(), sdl_rects.size()) != 0) throw Exception("SDL_RenderFillRects failed"); } -void Renderer::ReadPixels(const Rect& rect, Uint32 format, void* pixels, int pitch) { - if (SDL_RenderReadPixels(renderer_, rect.Get(), format, pixels, pitch) != 0) +void Renderer::ReadPixels(const Optional& rect, Uint32 format, void* pixels, int pitch) { + if (SDL_RenderReadPixels(renderer_, rect ? &*rect : nullptr, format, pixels, pitch) != 0) throw Exception("SDL_RenderReadPixels failed"); } -void Renderer::SetClipRect(const Rect& rect) { - if (SDL_RenderSetClipRect(renderer_, rect.Get()) != 0) +void Renderer::SetClipRect(const Optional& rect) { + if (SDL_RenderSetClipRect(renderer_, rect ? &*rect : nullptr) != 0) throw Exception("SDL_RenderSetClipRect failed"); } @@ -226,8 +210,8 @@ void Renderer::SetScale(float scaleX, float scaleY) { throw Exception("SDL_RenderSetScale failed"); } -void Renderer::SetViewport(const Rect& rect) { - if (SDL_RenderSetViewport(renderer_, rect.Get()) != 0) +void Renderer::SetViewport(const Optional& rect) { + if (SDL_RenderSetViewport(renderer_, rect ? &*rect : nullptr) != 0) throw Exception("SDL_RenderSetViewport failed"); } diff --git a/SDL2pp/Renderer.hh b/SDL2pp/Renderer.hh index 8b27d73..b3142ce 100644 --- a/SDL2pp/Renderer.hh +++ b/SDL2pp/Renderer.hh @@ -86,12 +86,12 @@ public: void FillRect(const Rect& r); void FillRects(const Rect* rects, int count); - void ReadPixels(const Rect& rect, Uint32 format, void* pixels, int pitch); + void ReadPixels(const Optional& rect, Uint32 format, void* pixels, int pitch); - void SetClipRect(const Rect& rect); + void SetClipRect(const Optional& rect = NullOpt); void SetLogicalSize(int w, int h); void SetScale(float scaleX, float scaleY); - void SetViewport(const Rect& rect); + void SetViewport(const Optional& rect = NullOpt); bool TargetSupported(); }; diff --git a/SDL2pp/SDL2pp.hh b/SDL2pp/SDL2pp.hh index dd352d1..b25dfe0 100644 --- a/SDL2pp/SDL2pp.hh +++ b/SDL2pp/SDL2pp.hh @@ -37,5 +37,6 @@ #include #include #include +#include #endif diff --git a/examples/image.cc b/examples/image.cc index a2a733b..0aa8007 100644 --- a/examples/image.cc +++ b/examples/image.cc @@ -55,9 +55,9 @@ int Run() { // Simple copy float angle = SDL_GetTicks() / 5000.0 * 2.0 * M_PI; - render.Copy(sprite, Rect::Null(), Rect(320 - 64, 240 - 64, 128, 128), angle / M_PI * 180.0); - render.Copy(sprite, Rect::Null(), Rect(320 - 32 + sin(angle) * 40, 240 - 32 + cos(angle) * 40, 64, 64)); - render.Copy(sprite, Rect::Null(), Rect(320 - 32 - sin(angle) * 40, 240 - 32 - cos(angle) * 40, 64, 64)); + render.Copy(sprite, NullOpt, Rect(320 - 64, 240 - 64, 128, 128), angle / M_PI * 180.0); + render.Copy(sprite, NullOpt, Rect(320 - 32 + sin(angle) * 40, 240 - 32 + cos(angle) * 40, 64, 64)); + render.Copy(sprite, NullOpt, Rect(320 - 32 - sin(angle) * 40, 240 - 32 - cos(angle) * 40, 64, 64)); render.Present(); diff --git a/examples/rendertarget.cc b/examples/rendertarget.cc index 5f6747d..ad7c190 100644 --- a/examples/rendertarget.cc +++ b/examples/rendertarget.cc @@ -64,7 +64,7 @@ int Run() { // Sprite data Texture sprite(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, MY_SPRITE_SIZE, MY_SPRITE_SIZE); - sprite.Update(Rect::Null(), pixels, MY_SPRITE_SIZE * MY_SPRITE_SIZE); + sprite.Update(NullOpt, pixels, MY_SPRITE_SIZE * MY_SPRITE_SIZE); sprite.SetBlendMode(SDL_BLENDMODE_BLEND); // Two render target textures @@ -93,10 +93,10 @@ int Run() { for (int i = 0; i < 4; i++) { render.SetTarget(target2); render.Clear(); - render.Copy(target1, Rect::Null(), Rect(0, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); - render.Copy(target1, Rect::Null(), Rect(MY_RENDERTARGET_SIZE / 2, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); - render.Copy(target1, Rect::Null(), Rect(0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); - render.Copy(target1, Rect::Null(), Rect(MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); + render.Copy(target1, NullOpt, Rect(0, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); + render.Copy(target1, NullOpt, Rect(MY_RENDERTARGET_SIZE / 2, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); + render.Copy(target1, NullOpt, Rect(0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); + render.Copy(target1, NullOpt, Rect(MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0); // Swap textures to copy recursively std::swap(target1, target2); @@ -106,7 +106,7 @@ int Run() { render.SetTarget(); render.Clear(); - render.Copy(target1, Rect::Null(), Rect((MY_SCREEN_WIDTH - MY_SCREEN_HEIGHT) / 2, 0, MY_SCREEN_HEIGHT, MY_SCREEN_HEIGHT), SDL_GetTicks() / 10000.0 * 360.0); + render.Copy(target1, NullOpt, Rect((MY_SCREEN_WIDTH - MY_SCREEN_HEIGHT) / 2, 0, MY_SCREEN_HEIGHT, MY_SCREEN_HEIGHT), SDL_GetTicks() / 10000.0 * 360.0); render.Present(); diff --git a/examples/sprites.cc b/examples/sprites.cc index 1ecee9b..cc4a667 100644 --- a/examples/sprites.cc +++ b/examples/sprites.cc @@ -46,7 +46,7 @@ int Run() { // Load sprite texture Texture sprite(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, 4, 4); - sprite.Update(Rect::Null(), pixels, 4 * 4); + sprite.Update(NullOpt, pixels, 4 * 4); sprite.SetBlendMode(SDL_BLENDMODE_BLEND); render.SetDrawBlendMode(SDL_BLENDMODE_BLEND); @@ -63,23 +63,23 @@ int Run() { render.Clear(); // Simple copy - render.Copy(sprite, Rect::Null(), Rect(80, 0, 240, 240)); + render.Copy(sprite, NullOpt, Rect(80, 0, 240, 240)); // Copy with modulation - render.Copy(sprite, Rect::Null(), Rect(400, 0, 120, 120)); + render.Copy(sprite, NullOpt, Rect(400, 0, 120, 120)); sprite.SetAlphaMod(92); - render.Copy(sprite, Rect::Null(), Rect(400 + 120, 0, 120, 120)); + render.Copy(sprite, NullOpt, Rect(400 + 120, 0, 120, 120)); sprite.SetColorMod(255, 0, 0); - render.Copy(sprite, Rect::Null(), Rect(400, 0 + 120, 120, 120)); + render.Copy(sprite, NullOpt, Rect(400, 0 + 120, 120, 120)); sprite.SetAlphaMod(); - render.Copy(sprite, Rect::Null(), Rect(400 + 120, 0 + 120, 120, 120)); + render.Copy(sprite, NullOpt, Rect(400 + 120, 0 + 120, 120, 120)); sprite.SetColorMod(); // Copy with rotation - render.Copy(sprite, Rect::Null(), Rect(80, 240, 240, 240), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, Point::Null(), SDL_FLIP_NONE); + render.Copy(sprite, NullOpt, Rect(80, 240, 240, 240), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, NullOpt, SDL_FLIP_NONE); // Rotation around another point - render.Copy(sprite, Rect::Null(), Rect(520, 360, 120, 120), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, Point(0, 0), SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL); + render.Copy(sprite, NullOpt, Rect(520, 360, 120, 120), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, Point(0, 0), SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL); render.Present(); diff --git a/tests/test_pointrect.cc b/tests/test_pointrect.cc index d15f22a..4fb529c 100644 --- a/tests/test_pointrect.cc +++ b/tests/test_pointrect.cc @@ -78,8 +78,6 @@ BEGIN_TEST() EXPECT_TRUE(r != Rect(1,3,3,4)); EXPECT_TRUE(r != Rect(1,2,4,4)); EXPECT_TRUE(r != Rect(1,2,3,5)); - EXPECT_TRUE(r.Get() != nullptr); - EXPECT_TRUE(r.Get()->x == 1 && r.Get()->y == 2 && r.Get()->w == 3 && r.Get()->h == 4); EXPECT_TRUE(r.x == 1 && r.y == 2 && r.w == 3 && r.h == 4); r.SetX(5);