FreeRDP
Loading...
Searching...
No Matches
sdl_blend_mode_guard.cpp
1#include "sdl_blend_mode_guard.hpp"
2
3SdlBlendModeGuard::SdlBlendModeGuard(const std::shared_ptr<SDL_Renderer>& renderer,
4 SDL_BlendMode mode)
5 : _renderer(renderer)
6{
7 const auto rcb = SDL_GetRenderDrawBlendMode(_renderer.get(), &_restore_mode);
8 if (!rcb)
9 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
10 "[%s] SDL_GetRenderDrawBlendMode() failed with %s", __func__, SDL_GetError());
11 else
12 {
13 const auto rbm = SDL_SetRenderDrawBlendMode(_renderer.get(), mode);
14 if (!rbm)
15 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
16 "[%s] SDL_SetRenderDrawBlendMode() failed with %s", __func__,
17 SDL_GetError());
18 else
19 _current_mode = mode;
20 }
21}
22
23bool SdlBlendModeGuard::update(SDL_BlendMode mode)
24{
25 if (_current_mode != mode)
26 {
27 if (!SDL_SetRenderDrawBlendMode(_renderer.get(), mode))
28 {
29 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
30 "[%s] SDL_SetRenderDrawBlendMode() failed with %s", __func__,
31 SDL_GetError());
32 return false;
33 }
34 _current_mode = mode;
35 }
36 return true;
37}
38
39SdlBlendModeGuard::~SdlBlendModeGuard()
40{
41 const auto rbm = SDL_SetRenderDrawBlendMode(_renderer.get(), _restore_mode);
42 if (!rbm)
43 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
44 "[%s] SDL_SetRenderDrawBlendMode() failed with %s", __func__, SDL_GetError());
45}