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/>.
20 // The sauce to the plugin machinery
22 #include "SDLPlugin.h"
24 #include "SDL/SDL_image.h"
27 #include "../SDL/SDLManager.h"
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
*>())
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
;
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()
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
);
74 PluginData
queryPlugin()
78 data
.name
= "SDL Graphics Plugin";
79 data
.type
= PT_Graphics
;
81 data
.authors
.push_back("Brian Caine");
82 data
.requirements
.clear();
87 Variant
* loadPluginPayload()
89 Variant
* payload
= new Variant
;
92 results
.makeDisplay
= make_display
;
93 results
.makeImage
= make_image
;
94 results
.deleteImage
= destroy_image
;