FRESH AND RAW
[potpourri.git] / src / SDLPlugin / SDLPlugin.cpp
blob8efe53b6b51843c7d1a86828c0640283e223fd35
1 // Copyright 2008 Brian Caine
3 // This file is part of Potpourri.
5 // Potpourri is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
10 // Potpourri is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTIBILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with Potpourri. If not, see <http://www.gnu.org/licenses/>.
19 // NOTES:
20 // The sauce to the plugin machinery
22 #include "SDLPlugin.h"
24 #include "SDL/SDL_image.h"
25 #include "SDL/SDL.h"
27 #include "../SDL/SDLManager.h"
29 #include <stdexcept>
31 using namespace fragrant;
33 Drawable* make_image(fragrant::MediaLoader& loader, std::string filename,
34 std::map<std::string, Variant*> args = std::map<std::string, Variant*>())
36 std::string data;
38 try
40 data = loader.loadMedia(filename);
43 catch (std::runtime_error& e)
45 std::cerr << "make_image(): Error loading image\n\t"
46 << e.what() << std::endl;
47 return 0;
50 SDL_RWops* const_mem_sauce = SDL_RWFromConstMem(
51 (const void*)data.c_str(), data.size());
52 SDL_Surface* surf = IMG_Load_RW(const_mem_sauce, 1);
54 SDLSurface* my_surf = new SDLSurface(surf);
56 return dynamic_cast<Drawable*>(my_surf);
59 Display* make_display()
61 SDLManager manager;
62 manager.increment(fragrant::SS_Video);
64 return dynamic_cast<Display*>(new SDLDisplay);
67 void destroy_image(Drawable* item)
69 delete dynamic_cast<SDLSurface*>(item);
71 return;
74 PluginData queryPlugin()
76 PluginData data;
78 data.name = "SDL Graphics Plugin";
79 data.type = PT_Graphics;
80 data.version = "1.0";
81 data.authors.push_back("Brian Caine");
82 data.requirements.clear();
84 return data;
87 Variant* loadPluginPayload()
89 Variant* payload = new Variant;
91 Graphics results;
92 results.makeDisplay = make_display;
93 results.makeImage = make_image;
94 results.deleteImage = destroy_image;
96 *payload = results;
98 return payload;