105 lines
2.8 KiB
C++
105 lines
2.8 KiB
C++
#include <basic_widgets/core/renderer.hpp>
|
|
#include <basic_widgets/core/texture.hpp>
|
|
|
|
using namespace bwidgets;
|
|
|
|
core::Texture::Texture(SDL_Texture* t) : OpaqueStruct(t)
|
|
{
|
|
_attributes = attributes(t);
|
|
}
|
|
|
|
core::Texture::Texture(Renderer* r, SDL_PixelFormatEnum f, SDL_TextureAccess a, int w,
|
|
int h)
|
|
: Texture(ptr_or_throw<SDLError>(SDL_CreateTexture(r->c_pod, f, a, w, h), __FILE__,
|
|
__FUNCTION__, __LINE__))
|
|
{}
|
|
|
|
core::Texture::Texture(Renderer* r, SDL_Surface* s)
|
|
: OpaqueStruct(ptr_or_throw<SDLError>(SDL_CreateTextureFromSurface(r->c_pod, s),
|
|
__FILE__, __FUNCTION__, __LINE__))
|
|
{
|
|
_attributes = attributes(c_pod);
|
|
}
|
|
|
|
core::Texture::~Texture() noexcept
|
|
{
|
|
SDL_DestroyTexture(c_pod);
|
|
c_pod = nullptr;
|
|
}
|
|
|
|
auto core::Texture::alpha_mode() -> uint8_t
|
|
{
|
|
uint8_t mode = 0;
|
|
SDLError::success_or_throw(SDL_GetTextureAlphaMod(c_pod, &mode), __FILE__,
|
|
__FUNCTION__, __LINE__);
|
|
|
|
return mode;
|
|
}
|
|
|
|
auto core::Texture::alpha_mode(uint8_t m) -> core::Texture*
|
|
{
|
|
SDLError::success_or_throw(SDL_SetTextureAlphaMod(c_pod, m), __FILE__, __FUNCTION__,
|
|
__LINE__);
|
|
|
|
return this;
|
|
}
|
|
|
|
auto core::Texture::blend_mode() -> SDL_BlendMode
|
|
{
|
|
SDL_BlendMode mode {};
|
|
SDLError::success_or_throw(SDL_GetTextureBlendMode(c_pod, &mode), __FILE__,
|
|
__FUNCTION__, __LINE__);
|
|
|
|
return mode;
|
|
}
|
|
|
|
auto core::Texture::blend_mode(SDL_BlendMode m) -> core::Texture*
|
|
{
|
|
SDLError::success_or_throw(SDL_SetTextureBlendMode(c_pod, m), __FILE__, __FUNCTION__,
|
|
__LINE__);
|
|
|
|
return this;
|
|
}
|
|
|
|
auto core::Texture::color_mode() -> SDL_Color
|
|
{
|
|
SDL_Color mode;
|
|
SDLError::success_or_throw(SDL_GetTextureColorMod(c_pod, &mode.r, &mode.g, &mode.b),
|
|
__FILE__, __FUNCTION__, __LINE__);
|
|
|
|
return mode;
|
|
}
|
|
|
|
auto core::Texture::color_mode(const SDL_Color& m) -> core::Texture*
|
|
{
|
|
SDLError::success_or_throw(SDL_SetTextureColorMod(c_pod, m.r, m.g, m.b), __FILE__,
|
|
__FUNCTION__, __LINE__);
|
|
|
|
return this;
|
|
}
|
|
|
|
auto core::Texture::scale_mode() -> SDL_ScaleMode
|
|
{
|
|
SDL_ScaleMode mode {};
|
|
SDLError::success_or_throw(SDL_GetTextureScaleMode(c_pod, &mode), __FILE__,
|
|
__FUNCTION__, __LINE__);
|
|
|
|
return mode;
|
|
}
|
|
|
|
auto core::Texture::scale_mode(SDL_ScaleMode m) -> core::Texture*
|
|
{
|
|
SDLError::success_or_throw(SDL_SetTextureScaleMode(c_pod, m), __FILE__, __FUNCTION__,
|
|
__LINE__);
|
|
|
|
return this;
|
|
}
|
|
|
|
auto core::Texture::update(SDL_Rect* r, const void* pixels, int pitch) -> core::Texture*
|
|
{
|
|
SDLError::success_or_throw(SDL_UpdateTexture(c_pod, r, pixels, pitch), __FILE__,
|
|
__FUNCTION__, __LINE__);
|
|
|
|
return this;
|
|
}
|