]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/image.cpp
Wrap gtkutil/entry
[xonotic/netradiant.git] / radiant / image.cpp
1 /*
2    Copyright (C) 2001-2006, William Joseph.
3    All Rights Reserved.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #include "image.h"
23
24 #include "modulesystem.h"
25 #include "iimage.h"
26 #include "ifilesystem.h"
27 #include "iarchive.h"
28
29 #include "generic/reference.h"
30 #include "os/path.h"
31 #include "stream/stringstream.h"
32
33
34 typedef Modules<_QERPlugImageTable> ImageModules;
35 ImageModules& Textures_getImageModules();
36
37 /// \brief Returns a new image for the first file matching \p name in one of the available texture formats, or 0 if no file is found.
38 Image* QERApp_LoadImage( void* environment, const char* name ){
39         Image* image = 0;
40         class LoadImageVisitor : public ImageModules::Visitor
41         {
42         const char* m_name;
43         Image*& m_image;
44 public:
45         LoadImageVisitor( const char* name, Image*& image )
46                 : m_name( name ), m_image( image ){
47         }
48         void visit( const char* name, const _QERPlugImageTable& table ) const {
49                 if ( m_image == 0 ) {
50                         StringOutputStream fullname( 256 );
51                         fullname << m_name << '.' << name;
52                         ArchiveFile* file = GlobalFileSystem().openFile( fullname.c_str() );
53                         if ( file != 0 ) {
54                                 m_image = table.loadImage( *file );
55                                 file->release();
56                         }
57                 }
58         }
59         };
60
61         Textures_getImageModules().foreachModule( LoadImageVisitor( name, image ) );
62
63         return image;
64 }