aboutsummaryrefslogtreecommitdiff
path: root/src/ResourceCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ResourceCache.cpp')
-rw-r--r--src/ResourceCache.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/ResourceCache.cpp b/src/ResourceCache.cpp
index 4664bf0..f6f8fad 100644
--- a/src/ResourceCache.cpp
+++ b/src/ResourceCache.cpp
@@ -1,5 +1,6 @@
#include "../include/ResourceCache.hpp"
#include <unordered_map>
+#include <gd.h>
using namespace std;
@@ -33,6 +34,29 @@ namespace dchat
auto it = textures.find(filepath);
if(it != textures.end())
return it->second;
+
+ gdImagePtr imgPtr = gdImageCreateFromFile(filepath.c_str());
+ if(!imgPtr)
+ {
+ string errMsg = "Failed to load texture with gd: ";
+ errMsg += filepath;
+ throw FailedToLoadResourceException(errMsg);
+ }
+
+ gdImageSetInterpolationMethod(imgPtr, GD_BILINEAR_FIXED);
+ gdImagePtr newImgPtr = gdImageScale(imgPtr, 100, 100);
+ if(!newImgPtr)
+ {
+ gdImageDestroy(imgPtr);
+ string errMsg = "Failed to scale image with gd: ";
+ errMsg += filepath;
+ throw FailedToLoadResourceException(errMsg);
+ }
+
+ gdImageFile(newImgPtr, filepath.c_str());
+
+ gdImageDestroy(imgPtr);
+ gdImageDestroy(newImgPtr);
sf::Texture *texture = new sf::Texture();
if(!texture->loadFromFile(filepath))