c813fcd310a0c2215452d62a0a50ce4c95a6d2b8
[supertux.git] / src / unison / src / video / auto / Renderer.cpp
1 //          Copyright Timothy Goya 2007.
2 // Distributed under the Boost Software License, Version 1.0.
3 //    (See accompanying file LICENSE_1_0.txt or copy at
4 //          http://www.boost.org/LICENSE_1_0.txt)
5
6 #include "Renderer.hpp"
7 #include <unison/video/Surface.hpp>
8 #include <unison/video/Window.hpp>
9
10 #include <assert.h>
11
12 namespace Unison
13 {
14    namespace Video
15    {
16       namespace Auto
17       {
18          Renderer::Renderer(const std::vector<Backend::Renderer *> &renderers) :
19             renderer(0),
20             renderers(renderers)
21          {
22          }
23
24          Renderer::~Renderer()
25          {
26          }
27
28          void Renderer::init()
29          {
30             assert(!renderer);
31             std::vector<Backend::Renderer *>::const_reverse_iterator found = std::find_if(renderers.rbegin(), renderers.rend(), std::mem_fun(&Unison::Video::Backend::Renderer::is_usable));
32             if(found == renderers.rend())
33             {
34                fputs("No usable renderers found\n", stderr);
35                return;
36             }
37             renderer = *found;
38             renderer->init();
39          }
40
41          void Renderer::quit()
42          {
43             assert(renderer);
44             renderer->quit();
45             renderer = 0;
46          }
47
48          std::string Renderer::get_name()
49          {
50             return "auto";
51          }
52
53          bool Renderer::is_usable()
54          {
55             return std::find_if(renderers.begin(), renderers.end(), std::mem_fun(&Unison::Video::Backend::Renderer::is_usable)) != renderers.end();
56          }
57
58          Surface Renderer::load_surface(const std::string &filename)
59          {
60             assert(renderer);
61             return renderer->load_surface(filename);
62          }
63
64          Surface Renderer::load_surface(const std::string &filename, const Color &colorkey)
65          {
66             assert(renderer);
67             return renderer->load_surface(filename, colorkey);
68          }
69
70          void Renderer::save_surface(const Surface &surface, const std::string &filename)
71          {
72             assert(renderer);
73             return renderer->save_surface(surface, filename);
74          }
75
76          void Renderer::blit(const Surface &src, const Rect &src_rect, Surface &dst, const Point &dst_pos, const RenderOptions &options)
77          {
78             assert(renderer);
79             renderer->blit(src, src_rect, dst, dst_pos, options);
80          }
81
82          void Renderer::blit(Backend::Texture *src, const Rect &src_rect, Surface &dst, const Point &dst_pos, const RenderOptions &options)
83          {
84             assert(renderer);
85             renderer->blit(src, src_rect, dst, dst_pos, options);
86          }
87
88          void Renderer::fill(Surface &dst, const Color &color, const Rect &rect)
89          {
90             assert(renderer);
91             renderer->fill(dst, color, rect);
92          }
93
94          void Renderer::fill_blend(Surface &dst, const Color &color, const Rect &rect)
95          {
96             assert(renderer);
97             renderer->fill_blend(dst, color, rect);
98          }
99
100          Backend::Window *Renderer::create_window(const Area &size, const Area &logical_size, bool fullscreen)
101          {
102             assert(renderer);
103             return renderer->create_window(size, logical_size, fullscreen);
104          }
105
106          Backend::Texture *Renderer::create_texture(const Surface &surface)
107          {
108             assert(renderer);
109             return renderer->create_texture(surface);
110          }
111       }
112    }
113 }