188 lines
4.4 KiB
C++
188 lines
4.4 KiB
C++
|
#include <string>
|
||
|
|
||
|
#include <basic_widgets/sdl/renderer.hpp>
|
||
|
#include <basic_widgets/sdl/texture.hpp>
|
||
|
|
||
|
using namespace bwidgets;
|
||
|
|
||
|
using exception::SDLError;
|
||
|
using exception::ptr_or_throw;
|
||
|
|
||
|
using std::vector;
|
||
|
|
||
|
sdl::Renderer::Renderer(SDL_Renderer* r)
|
||
|
: DataType(r),
|
||
|
info(_info(r))
|
||
|
{
|
||
|
}
|
||
|
|
||
|
sdl::Renderer::Renderer(SDL_Window* w, int index, uint32_t flags=0)
|
||
|
: DataType(ptr_or_throw<SDLError>(SDL_CreateRenderer(w, index, flags),
|
||
|
__FILE__, __FUNCTION__, __LINE__,
|
||
|
exception::Base::Args({
|
||
|
{"w", std::to_string((size_t)w)},
|
||
|
{"index", std::to_string(index)},
|
||
|
{"flags", std::to_string(flags)}
|
||
|
}))),
|
||
|
info(_info(c_pod))
|
||
|
{
|
||
|
}
|
||
|
|
||
|
sdl::Renderer::~Renderer()
|
||
|
{
|
||
|
SDL_DestroyRenderer(c_pod);
|
||
|
}
|
||
|
|
||
|
SDL_BlendMode sdl::Renderer::blend_mode()
|
||
|
{
|
||
|
SDL_BlendMode mode;
|
||
|
SDLError::success_or_throw(SDL_GetRenderDrawBlendMode(c_pod, &mode),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return mode;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::blend_mode(SDL_BlendMode mode)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_SetRenderDrawBlendMode(c_pod, mode),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::clear()
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderClear(c_pod),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::copy(sdl::Texture& t,
|
||
|
const SDL_Rect* src, const SDL_Rect* dst)
|
||
|
{
|
||
|
SDLError::success_or_throw(
|
||
|
SDL_RenderCopy(c_pod, t.c_pod, src, dst),
|
||
|
__FILE__, __FUNCTION__, __LINE__
|
||
|
);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
SDL_Color sdl::Renderer::draw_color()
|
||
|
{
|
||
|
SDL_Color c;
|
||
|
SDLError::success_or_throw(
|
||
|
SDL_GetRenderDrawColor(c_pod, &c.r, &c.g, &c.b, &c.a),
|
||
|
__FILE__, __FUNCTION__, __LINE__
|
||
|
);
|
||
|
|
||
|
return c;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_color(const SDL_Color& c)
|
||
|
{
|
||
|
SDLError::success_or_throw(
|
||
|
SDL_SetRenderDrawColor(c_pod, c.r, c.g, c.b, c.a),
|
||
|
__FILE__, __FUNCTION__, __LINE__
|
||
|
);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_line(const SDL_Point& a, const SDL_Point& b)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderDrawLine(c_pod, a.x, a.y, b.x, b.y),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_lines(vector<SDL_Point> pts)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderDrawLines(c_pod, pts.data(), pts.size()),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_point(const SDL_Point& p)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderDrawPoint(c_pod, p.x, p.y),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_points(const vector<SDL_Point> pts)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderDrawPoints(c_pod, pts.data(), pts.size()),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_rect(const SDL_Rect& r)
|
||
|
{
|
||
|
const SDL_Rect rect = r;
|
||
|
SDLError::success_or_throw(SDL_RenderDrawRect(c_pod, &rect),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::draw_rects(const vector<SDL_Rect> rs)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderDrawRects(c_pod, rs.data(), rs.size()),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::fill_rect(const SDL_Rect& r)
|
||
|
{
|
||
|
SDL_Rect rect = r;
|
||
|
SDLError::success_or_throw(SDL_RenderFillRect(c_pod, &rect),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::fill_rects(const std::vector<SDL_Rect> rs)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderFillRects(c_pod, rs.data(), rs.size()),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
sdl::Size sdl::Renderer::output_size()
|
||
|
{
|
||
|
Size s;
|
||
|
SDLError::success_or_throw(SDL_GetRendererOutputSize(c_pod, &s.w, &s.h),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
void sdl::Renderer::present()
|
||
|
{
|
||
|
SDL_RenderPresent(c_pod);
|
||
|
}
|
||
|
|
||
|
SDL_Rect sdl::Renderer::viewport()
|
||
|
{
|
||
|
SDL_Rect vp;
|
||
|
SDL_RenderGetViewport(c_pod, &vp);
|
||
|
|
||
|
return vp;
|
||
|
}
|
||
|
|
||
|
sdl::Renderer& sdl::Renderer::viewport(const SDL_Rect* vp)
|
||
|
{
|
||
|
SDLError::success_or_throw(SDL_RenderSetViewport(c_pod, vp),
|
||
|
__FILE__, __FUNCTION__, __LINE__);
|
||
|
|
||
|
return *this;
|
||
|
}
|