diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/FbTk/App.cc | 2 | ||||
-rw-r--r-- | src/FbTk/Image.cc | 45 | ||||
-rw-r--r-- | src/FbTk/Image.hh | 30 |
3 files changed, 21 insertions, 56 deletions
diff --git a/src/FbTk/App.cc b/src/FbTk/App.cc index 25c338f..39cd36e 100644 --- a/src/FbTk/App.cc +++ b/src/FbTk/App.cc | |||
@@ -49,14 +49,12 @@ App::App(const char *displayname):m_done(false), m_display(0) { | |||
49 | throw std::string("Couldn't connect to XServer"); | 49 | throw std::string("Couldn't connect to XServer"); |
50 | 50 | ||
51 | FbStringUtil::init(); | 51 | FbStringUtil::init(); |
52 | Image::init(); | ||
53 | } | 52 | } |
54 | 53 | ||
55 | App::~App() { | 54 | App::~App() { |
56 | if (m_display != 0) { | 55 | if (m_display != 0) { |
57 | 56 | ||
58 | Font::shutdown(); | 57 | Font::shutdown(); |
59 | Image::shutdown(); | ||
60 | 58 | ||
61 | XCloseDisplay(m_display); | 59 | XCloseDisplay(m_display); |
62 | m_display = 0; | 60 | m_display = 0; |
diff --git a/src/FbTk/Image.cc b/src/FbTk/Image.cc index 020f9c6..0c7b5fc 100644 --- a/src/FbTk/Image.cc +++ b/src/FbTk/Image.cc | |||
@@ -42,50 +42,31 @@ using std::string; | |||
42 | using std::list; | 42 | using std::list; |
43 | using std::set; | 43 | using std::set; |
44 | 44 | ||
45 | namespace FbTk { | ||
46 | 45 | ||
47 | Image::ImageMap Image::s_image_map; | 46 | namespace { |
48 | Image::StringList Image::s_search_paths; | ||
49 | 47 | ||
48 | typedef std::map<std::string, FbTk::ImageBase *> ImageMap; | ||
49 | typedef std::list<std::string> StringList; | ||
50 | 50 | ||
51 | void Image::init() { | 51 | ImageMap s_image_map; |
52 | StringList s_search_paths; | ||
52 | 53 | ||
53 | // create imagehandlers for their extensions | ||
54 | #ifdef HAVE_XPM | ||
55 | new ImageXPM(); | ||
56 | #endif // HAVE_XPM | ||
57 | #ifdef HAVE_IMLIB2 | 54 | #ifdef HAVE_IMLIB2 |
58 | new ImageImlib2(); | 55 | FbTk::ImageImlib2 imlib2_loader; |
59 | #endif // HAVE_IMLIB2 | 56 | #endif |
60 | } | 57 | #ifdef HAVE_XPM |
61 | 58 | FbTk::ImageXPM xpm_loader; | |
62 | void Image::shutdown() { | 59 | #endif |
63 | |||
64 | set<ImageBase*> handlers; | ||
65 | 60 | ||
66 | // one imagehandler could be registered | ||
67 | // for more than one type | ||
68 | ImageMap::iterator it = s_image_map.begin(); | ||
69 | ImageMap::iterator it_end = s_image_map.end(); | ||
70 | for (; it != it_end; it++) { | ||
71 | if (it->second) | ||
72 | handlers.insert(it->second); | ||
73 | } | ||
74 | 61 | ||
75 | // free the unique handlers | 62 | }; // end of anonymous namespace |
76 | set<ImageBase*>::iterator handler_it = handlers.begin(); | ||
77 | set<ImageBase*>::iterator handler_it_end = handlers.end(); | ||
78 | for(; handler_it != handler_it_end; handler_it++) { | ||
79 | delete (*handler_it); | ||
80 | } | ||
81 | 63 | ||
82 | s_image_map.clear(); | 64 | namespace FbTk { |
83 | } | ||
84 | 65 | ||
85 | PixmapWithMask *Image::load(const string &filename, int screen_num) { | 66 | PixmapWithMask *Image::load(const string &filename, int screen_num) { |
86 | 67 | ||
87 | 68 | ||
88 | if (filename == "") | 69 | if (filename.empty()) |
89 | return false; | 70 | return false; |
90 | 71 | ||
91 | // determine file ending | 72 | // determine file ending |
diff --git a/src/FbTk/Image.hh b/src/FbTk/Image.hh index acb5879..3c731ad 100644 --- a/src/FbTk/Image.hh +++ b/src/FbTk/Image.hh | |||
@@ -32,37 +32,24 @@ class ImageBase; | |||
32 | class PixmapWithMask; | 32 | class PixmapWithMask; |
33 | 33 | ||
34 | /// loads images | 34 | /// loads images |
35 | class Image { | 35 | namespace Image { |
36 | public: | ||
37 | |||
38 | /// called at FbTk::App creation time, init some internal stuff | ||
39 | static void init(); | ||
40 | |||
41 | /// called at FbTk:App destruction time, frees stuff allocated by init() | ||
42 | static void shutdown(); | ||
43 | 36 | ||
44 | /// @return an instance of PixmapWithMask on success, 0 on failure | 37 | /// @return an instance of PixmapWithMask on success, 0 on failure |
45 | static PixmapWithMask *load(const std::string &filename, int screen_num); | 38 | PixmapWithMask *load(const std::string &filename, int screen_num); |
46 | /// for register file type and imagebase | 39 | /// for register file type and imagebase |
47 | /// @return false on failure | 40 | /// @return false on failure |
48 | static bool registerType(const std::string &type, ImageBase &base); | 41 | bool registerType(const std::string &type, ImageBase &base); |
49 | /// removes a imagebase class from register | 42 | /// removes a imagebase class from register |
50 | /// @return false on failure | 43 | /// @return false on failure |
51 | static void remove(ImageBase &base); | 44 | void remove(ImageBase &base); |
52 | /// adds a path to search images from | 45 | /// adds a path to search images from |
53 | static void addSearchPath(const std::string &search_path); | 46 | void addSearchPath(const std::string &search_path); |
54 | /// removes a path to search images from | 47 | /// removes a path to search images from |
55 | static void removeSearchPath(const std::string &search_path); | 48 | void removeSearchPath(const std::string &search_path); |
56 | /// adds a path to search images from | 49 | /// adds a path to search images from |
57 | static void removeAllSearchPaths(); | 50 | void removeAllSearchPaths(); |
58 | /// locates an image in the search path | 51 | /// locates an image in the search path |
59 | static std::string locateFile(const std::string &filename); | 52 | std::string locateFile(const std::string &filename); |
60 | private: | ||
61 | typedef std::map<std::string, ImageBase *> ImageMap; | ||
62 | typedef std::list<std::string> StringList; | ||
63 | |||
64 | static ImageMap s_image_map; | ||
65 | static StringList s_search_paths; | ||
66 | }; | 53 | }; |
67 | 54 | ||
68 | /// common interface for all image classes | 55 | /// common interface for all image classes |
@@ -76,4 +63,3 @@ public: | |||
76 | 63 | ||
77 | #endif // IMAGE_HH | 64 | #endif // IMAGE_HH |
78 | 65 | ||
79 | |||