Browse Source

Switched Image wrap modes to the new string syntax too.

Bill Meltsner 15 years ago
parent
commit
db117de2c8

+ 19 - 0
src/modules/graphics/Image.cpp

@@ -38,6 +38,16 @@ namespace graphics
 		return filterModes.find(in, out);
 	}
 	
+	bool Image::getConstant(const char * in, WrapMode & out)
+	{
+		return wrapModes.find(in, out);
+	}
+	
+	bool Image::getConstant(WrapMode in, const char *& out)
+	{
+		return wrapModes.find(in, out);
+	}
+	
 	StringMap<Image::FilterMode, Image::FILTER_MAX_ENUM>::Entry Image::filterModeEntries[] = 
 	{
 		{ "linear", Image::FILTER_LINEAR },
@@ -45,6 +55,15 @@ namespace graphics
 	};
 	
 	StringMap<Image::FilterMode, Image::FILTER_MAX_ENUM> Image::filterModes(Image::filterModeEntries, sizeof(Image::filterModeEntries));
+
+	StringMap<Image::WrapMode, Image::WRAP_MAX_ENUM>::Entry Image::wrapModeEntries[] = 
+	{
+		{ "clamp", Image::WRAP_CLAMP },
+		{ "repeat", Image::WRAP_REPEAT },
+	};
+	
+	StringMap<Image::WrapMode, Image::WRAP_MAX_ENUM> Image::wrapModes(Image::wrapModeEntries, sizeof(Image::wrapModeEntries));
+	
 	
 } // graphics
 } // love

+ 7 - 2
src/modules/graphics/Image.h

@@ -37,8 +37,9 @@ namespace graphics
 	
 		enum WrapMode
 		{
-			WRAP_CLAMP, 
-			WRAP_REPEAT
+			WRAP_CLAMP = 1, 
+			WRAP_REPEAT,
+			WRAP_MAX_ENUM
 		};
 
 		enum FilterMode
@@ -64,11 +65,15 @@ namespace graphics
 		
 		static bool getConstant(const char * in, FilterMode & out);
 		static bool getConstant(FilterMode in, const char *& out);
+		static bool getConstant(const char * in, WrapMode & out);
+		static bool getConstant(WrapMode in, const char *& out);
 		
 	private:
 		
 		static StringMap<FilterMode, FILTER_MAX_ENUM>::Entry filterModeEntries[];
 		static StringMap<FilterMode, FILTER_MAX_ENUM> filterModes;
+		static StringMap<WrapMode, WRAP_MAX_ENUM>::Entry wrapModeEntries[];
+		static StringMap<WrapMode, WRAP_MAX_ENUM> wrapModes;
 
 	}; // Image
 	

+ 25 - 8
src/modules/graphics/opengl/wrap_Image.cpp

@@ -84,20 +84,37 @@ namespace opengl
 
 	int w_Image_setWrap(lua_State * L)
 	{
-		Image * t = luax_checkimage(L, 1); 
+		Image * i = luax_checkimage(L, 1); 
 		Image::Wrap w;
-		w.s = (Image::WrapMode)luaL_checkint(L, 2);
-		w.t = (Image::WrapMode)luaL_checkint(L, 3);
-		t->setWrap(w);
+		Image::WrapMode s;
+		Image::WrapMode t;
+		const char * sstr = luaL_checkstring(L, 2);
+		const char * tstr = luaL_checkstring(L, 3);
+		if (!Image::getConstant(sstr, s))
+			return luaL_error(L, "Invalid wrap mode: %s", sstr);
+		if (!Image::getConstant(tstr, t))
+			return luaL_error(L, "Invalid wrap mode, %s", tstr);
+		
+		w.s = s;
+		w.t = t;
+		i->setWrap(w);
 		return 0;
 	}
 
 	int w_Image_getWrap(lua_State * L)
 	{
-		Image * t = luax_checkimage(L, 1); 
-		Image::Wrap w = t->getWrap();
-		lua_pushinteger(L, w.s);
-		lua_pushinteger(L, w.t);
+		Image * i = luax_checkimage(L, 1); 
+		Image::Wrap w = i->getWrap();
+		Image::WrapMode s = w.s;
+		Image::WrapMode t = w.t;
+		const char * sstr;
+		const char * tstr;
+		if (!Image::getConstant(s, sstr))
+			return luaL_error(L, "Invalid filter mode: %s", sstr);
+		if (!Image::getConstant(t, tstr))
+			return luaL_error(L, "Invalid filter mode: %s", tstr);
+		lua_pushstring(L, sstr);
+		lua_pushstring(L, tstr);
 		return 2;
 	}