diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-04-08 20:34:11 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-04-08 20:41:45 -0600 |
commit | 801da408e5756f19ee50bdc463f2fc6390573b65 (patch) | |
tree | d791d5e4cbc8e7d84900034c03b2a43a7a906bbb /src/resources/wallpaper.cpp | |
parent | d6f7a1d18f4d31565f756200f017fe8ee5262b27 (diff) | |
download | mana-801da408e5756f19ee50bdc463f2fc6390573b65.tar.gz mana-801da408e5756f19ee50bdc463f2fc6390573b65.tar.bz2 mana-801da408e5756f19ee50bdc463f2fc6390573b65.tar.xz mana-801da408e5756f19ee50bdc463f2fc6390573b65.zip |
Add a more flexible wallpaper system
Diffstat (limited to 'src/resources/wallpaper.cpp')
-rw-r--r-- | src/resources/wallpaper.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/resources/wallpaper.cpp b/src/resources/wallpaper.cpp new file mode 100644 index 00000000..24c6fff2 --- /dev/null +++ b/src/resources/wallpaper.cpp @@ -0,0 +1,99 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <algorithm> +#include <cstring> +#include <physfs.h> + +#include "resources/wallpaper.h" + +#include "log.h" + +#include "utils/strprintf.h" + +#define WALLPAPER_FOLDER "graphics/images/" + +#define WALLPAPER_BASE "login_wallpaper" + +struct wallpaper { + Uint16 width; + Uint16 height; +}; + +std::vector<struct wallpaper> wallpapers; +bool haveBackup; // Is the backup (no size given) version availabnle? + +bool wallpaperCompare(struct wallpaper x, struct wallpaper y) +{ + int aX = x.width * x.height; + int aY = y.width * y.height; + + if (aX > aY || (aX == aY && x.width > y.width)) return true; + return false; +} + +void Wallpaper::loadWallpapers() +{ + char **imgs = PHYSFS_enumerateFiles(WALLPAPER_FOLDER); + char **i; + int baseLen = strlen(WALLPAPER_BASE), width, height; + + wallpapers.clear(); + + haveBackup = false; + + for (i = imgs; *i != NULL; i++) + if (strncmp(*i, WALLPAPER_BASE, baseLen) == 0) + if (strlen(*i) == baseLen + 4) + if (haveBackup) + logger->log("Duplicate default wallpaper!"); + else haveBackup = true; + else if (sscanf(*i, WALLPAPER_BASE "_%dx%d.png", &width, + &height) == 2) + { + struct wallpaper wp; + wp.width = width; + wp.height = height; + wallpapers.push_back(wp); + } + + PHYSFS_freeList(imgs); + + std::sort(wallpapers.begin(), wallpapers.end(), wallpaperCompare); +} + +std::string Wallpaper::getWallpaper(int width, int height) +{ + std::vector<wallpaper>::iterator iter; + wallpaper wp; + + for(iter = wallpapers.begin(); iter != wallpapers.end(); iter++) + { + wp = *iter; + if (wp.width <= width && wp.height <= height) + return std::string(strprintf(WALLPAPER_FOLDER WALLPAPER_BASE + "_%dx%d.png", wp.width, wp.height)); + } + + if (haveBackup) return std::string(WALLPAPER_FOLDER WALLPAPER_BASE ".png"); + + return std::string(""); +} |