Add padding params in ResourceCache
This commit is contained in:
		
							parent
							
								
									318eeff9c7
								
							
						
					
					
						commit
						92e61ed297
					
				|  | @ -224,7 +224,7 @@ namespace kiwano | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	UInt32 ResourceCache::AddFrameSequence(String const & id, String const& file_path, Int32 cols, Int32 rows) | 	UInt32 ResourceCache::AddFrameSequence(String const & id, String const& file_path, Int32 cols, Int32 rows, Float32 padding_x, Float32 padding_y) | ||||||
| 	{ | 	{ | ||||||
| 		if (cols <= 0 || rows <= 0) | 		if (cols <= 0 || rows <= 0) | ||||||
| 			return 0; | 			return 0; | ||||||
|  | @ -235,23 +235,27 @@ namespace kiwano | ||||||
| 
 | 
 | ||||||
| 		Float32 raw_width = raw->GetWidth(); | 		Float32 raw_width = raw->GetWidth(); | ||||||
| 		Float32 raw_height = raw->GetHeight(); | 		Float32 raw_height = raw->GetHeight(); | ||||||
| 		Float32 width = raw_width / cols; | 		Float32 width = (raw_width - (cols - 1) * padding_x) / cols; | ||||||
| 		Float32 height = raw_height / rows; | 		Float32 height = (raw_height - (rows - 1) * padding_y) / rows; | ||||||
| 
 | 
 | ||||||
| 		Vector<FramePtr> frames; | 		Vector<FramePtr> frames; | ||||||
| 		frames.reserve(rows * cols); | 		frames.reserve(rows * cols); | ||||||
| 
 | 
 | ||||||
|  | 		Float32 dty = 0; | ||||||
| 		for (Int32 i = 0; i < rows; i++) | 		for (Int32 i = 0; i < rows; i++) | ||||||
| 		{ | 		{ | ||||||
|  | 			Float32 dtx = 0; | ||||||
| 			for (Int32 j = 0; j < cols; j++) | 			for (Int32 j = 0; j < cols; j++) | ||||||
| 			{ | 			{ | ||||||
| 				FramePtr ptr = new (std::nothrow) Frame(raw->GetTexture()); | 				FramePtr ptr = new (std::nothrow) Frame(raw->GetTexture()); | ||||||
| 				if (ptr) | 				if (ptr) | ||||||
| 				{ | 				{ | ||||||
| 					ptr->SetCropRect(Rect{ j * width, i * height, (j + 1) * width, (i + 1) * height }); | 					ptr->SetCropRect(Rect{ dtx, dty, dtx + width, dty + height }); | ||||||
| 					frames.push_back(ptr); | 					frames.push_back(ptr); | ||||||
| 				} | 				} | ||||||
|  | 				dtx += (width + padding_x); | ||||||
| 			} | 			} | ||||||
|  | 			dty += (height + padding_y); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		FrameSequencePtr fs = new (std::nothrow) FrameSequence(frames); | 		FrameSequencePtr fs = new (std::nothrow) FrameSequence(frames); | ||||||
|  | @ -309,27 +313,21 @@ namespace kiwano | ||||||
| 			String path; | 			String path; | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
| 		bool LoadTexturesFromData(ResourceCache* loader, GlobalData* gdata, const String* id, const String* type, | 		bool LoadTexturesFromData(ResourceCache* loader, GlobalData* gdata, const String* id, const String* type, const String* file) | ||||||
| 			const String* file, const Vector<const WChar*>* files, Int32 rows, Int32 cols) |  | ||||||
| 		{ | 		{ | ||||||
| 			if (!gdata || !id) return false; | 			if (!gdata || !id) return false; | ||||||
| 
 | 
 | ||||||
| 			if (file) | 			if (file && !(*file).empty()) | ||||||
| 			{ |  | ||||||
| 				if (!(*file).empty()) |  | ||||||
| 				{ |  | ||||||
| 					if (rows || cols) |  | ||||||
| 					{ |  | ||||||
| 						// Frame slices
 |  | ||||||
| 						return !!loader->AddFrameSequence(*id, gdata->path + (*file), std::max(cols, 1), std::max(rows, 1)); |  | ||||||
| 					} |  | ||||||
| 					else |  | ||||||
| 			{ | 			{ | ||||||
| 				// Simple image
 | 				// Simple image
 | ||||||
| 				return loader->AddFrame(*id, gdata->path + (*file)); | 				return loader->AddFrame(*id, gdata->path + (*file)); | ||||||
| 			} | 			} | ||||||
|  | 			return false; | ||||||
| 		} | 		} | ||||||
| 			} | 
 | ||||||
|  | 		bool LoadTexturesFromData(ResourceCache* loader, GlobalData* gdata, const String* id, const Vector<const WChar*>* files) | ||||||
|  | 		{ | ||||||
|  | 			if (!gdata || !id) return false; | ||||||
| 
 | 
 | ||||||
| 			// Frames
 | 			// Frames
 | ||||||
| 			if (files) | 			if (files) | ||||||
|  | @ -350,6 +348,30 @@ namespace kiwano | ||||||
| 			return false; | 			return false; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		bool LoadTexturesFromData(ResourceCache* loader, GlobalData* gdata, const String* id, const String* file, | ||||||
|  | 			Int32 rows, Int32 cols, Float32 padding_x, Float32 padding_y) | ||||||
|  | 		{ | ||||||
|  | 			if (!gdata || !id) return false; | ||||||
|  | 
 | ||||||
|  | 			if (file) | ||||||
|  | 			{ | ||||||
|  | 				if (!(*file).empty()) | ||||||
|  | 				{ | ||||||
|  | 					if (rows || cols) | ||||||
|  | 					{ | ||||||
|  | 						// Frame slices
 | ||||||
|  | 						return !!loader->AddFrameSequence(*id, gdata->path + (*file), std::max(cols, 1), std::max(rows, 1), padding_x, padding_y); | ||||||
|  | 					} | ||||||
|  | 					else | ||||||
|  | 					{ | ||||||
|  | 						// Simple image
 | ||||||
|  | 						return loader->AddFrame(*id, gdata->path + (*file)); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		bool LoadJsonData(ResourceCache* loader, Json const& json_data) | 		bool LoadJsonData(ResourceCache* loader, Json const& json_data) | ||||||
| 		{ | 		{ | ||||||
| 			GlobalData global_data; | 			GlobalData global_data; | ||||||
|  | @ -371,6 +393,15 @@ namespace kiwano | ||||||
| 					if (image.count(L"rows")) rows = image[L"rows"].as_int(); | 					if (image.count(L"rows")) rows = image[L"rows"].as_int(); | ||||||
| 					if (image.count(L"cols")) cols = image[L"cols"].as_int(); | 					if (image.count(L"cols")) cols = image[L"cols"].as_int(); | ||||||
| 
 | 
 | ||||||
|  | 					if (rows || cols) | ||||||
|  | 					{ | ||||||
|  | 						Float32 padding_x = 0, padding_y = 0; | ||||||
|  | 						if (image.count(L"padding-x")) padding_x = image[L"padding-x"].get<Float32>(); | ||||||
|  | 						if (image.count(L"padding-y")) padding_y = image[L"padding-y"].get<Float32>(); | ||||||
|  | 
 | ||||||
|  | 						return LoadTexturesFromData(loader, &global_data, id, file, rows, cols, padding_x, padding_y); | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
| 					if (image.count(L"files")) | 					if (image.count(L"files")) | ||||||
| 					{ | 					{ | ||||||
| 						Vector<const WChar*> files; | 						Vector<const WChar*> files; | ||||||
|  | @ -379,13 +410,11 @@ namespace kiwano | ||||||
| 						{ | 						{ | ||||||
| 							files.push_back(file.as_string().c_str()); | 							files.push_back(file.as_string().c_str()); | ||||||
| 						} | 						} | ||||||
| 						if (!LoadTexturesFromData(loader, &global_data, id, type, file, &files, rows, cols)) | 						return LoadTexturesFromData(loader, &global_data, id, &files); | ||||||
| 							return false; |  | ||||||
| 					} | 					} | ||||||
| 					else | 					else | ||||||
| 					{ | 					{ | ||||||
| 						if (!LoadTexturesFromData(loader, &global_data, id, type, file, nullptr, rows, cols)) | 						return LoadTexturesFromData(loader, &global_data, id, type, file); | ||||||
| 							return false; |  | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | @ -413,6 +442,16 @@ namespace kiwano | ||||||
| 					if (auto attr = image->IntAttribute(L"rows")) rows = attr; | 					if (auto attr = image->IntAttribute(L"rows")) rows = attr; | ||||||
| 					if (auto attr = image->IntAttribute(L"cols")) cols = attr; | 					if (auto attr = image->IntAttribute(L"cols")) cols = attr; | ||||||
| 
 | 
 | ||||||
|  | 					if (rows || cols) | ||||||
|  | 					{ | ||||||
|  | 						Float32 padding_x = 0, padding_y = 0; | ||||||
|  | 						if (auto attr = image->FloatAttribute(L"padding-x")) padding_x = attr; | ||||||
|  | 						if (auto attr = image->FloatAttribute(L"padding-y")) padding_y = attr; | ||||||
|  | 
 | ||||||
|  | 						if (!LoadTexturesFromData(loader, &global_data, &id, &file, rows, cols, padding_x, padding_y)) | ||||||
|  | 							return false; | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
| 					if (file.empty() && !image->NoChildren()) | 					if (file.empty() && !image->NoChildren()) | ||||||
| 					{ | 					{ | ||||||
| 						Vector<const WChar*> files_arr; | 						Vector<const WChar*> files_arr; | ||||||
|  | @ -423,12 +462,12 @@ namespace kiwano | ||||||
| 								files_arr.push_back(path); | 								files_arr.push_back(path); | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 						if (!LoadTexturesFromData(loader, &global_data, &id, &type, &file, &files_arr, rows, cols)) | 						if (!LoadTexturesFromData(loader, &global_data, &id, &files_arr)) | ||||||
| 							return false; | 							return false; | ||||||
| 					} | 					} | ||||||
| 					else | 					else | ||||||
| 					{ | 					{ | ||||||
| 						if (!LoadTexturesFromData(loader, &global_data, &id, &type, &file, nullptr, rows, cols)) | 						if (!LoadTexturesFromData(loader, &global_data, &id, &type, &file)) | ||||||
| 							return false; | 							return false; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | @ -57,7 +57,7 @@ namespace kiwano | ||||||
| 
 | 
 | ||||||
| 		// 添加序列帧
 | 		// 添加序列帧
 | ||||||
| 		// 按行列数裁剪图片
 | 		// 按行列数裁剪图片
 | ||||||
| 		UInt32 AddFrameSequence(String const& id, String const& file_path, Int32 cols, Int32 rows = 1); | 		UInt32 AddFrameSequence(String const& id, String const& file_path, Int32 cols, Int32 rows = 1, Float32 padding_x = 0, Float32 padding_y = 0); | ||||||
| 
 | 
 | ||||||
| 		// 添加序列帧
 | 		// 添加序列帧
 | ||||||
| 		UInt32 AddFrameSequence(String const& id, FrameSequencePtr frames); | 		UInt32 AddFrameSequence(String const& id, FrameSequencePtr frames); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue