瀏覽代碼

Generate theme images in 'cache' directory, allow PNG source images

Brian Fiete 3 年之前
父節點
當前提交
1f0d2dcc82
共有 4 個文件被更改,包括 85 次插入57 次删除
  1. 72 48
      BeefTools/ImgCreate/ImgCreate.cpp
  2. 2 2
      BeefTools/ImgCreate/ImgCreate.vcxproj
  3. 二進制
      IDE/dist/images/ImgCreate.exe
  4. 11 7
      IDE/src/Settings.bf

+ 72 - 48
BeefTools/ImgCreate/ImgCreate.cpp

@@ -2,6 +2,7 @@
 #include "BeefySysLib/util/Array.h"
 #include "BeefySysLib/img/PSDReader.h"
 #include "BeefySysLib/img/PNGData.h"
+#include <direct.h>
 
 USING_NS_BF;
 
@@ -134,62 +135,82 @@ int main()
 					fileName = "UI_4.psd";
 
 				if (!FileExists(fileName))
-					continue;
-			}			
+				{
+					if (!isThemeDir)
+						continue;
 
-			if (!reader.Init(fileName))
+					fileName.RemoveFromEnd(3);
+					fileName += "png";
+					if (!FileExists(fileName))
+						continue;
+				}
+			}			
+			
+			if (fileName.EndsWith(".png"))
 			{
-				if (size == 0)
+				PNGData* pngData = new PNGData();
+				if (pngData->LoadFromFile(fileName))
 				{
-					printf("Failed to open %s - incorrect working directory?", fileName.c_str());
-					return 1;
+					imageData = pngData;
 				}
-
-				imageData = NULL;
-				continue;
 			}
-
-			if ((size == 0) && (pass == 0))
+			else
 			{
-				baseWidth = reader.mWidth;
-				baseHeight = reader.mHeight;
-			}
+				if (!reader.Init(fileName))
+				{
+					if (size == 0)
+					{
+						printf("Failed to open %s - incorrect working directory?", fileName.c_str());
+						return 1;
+					}
 
-			std::vector<int> layerIndices;
-			for (int layerIdx = 0; layerIdx < (int)reader.mPSDLayerInfoVector.size(); layerIdx++)
-			{
-				auto layer = reader.mPSDLayerInfoVector[layerIdx];
-				if (layer->mVisible)
-					layerIndices.insert(layerIndices.begin(), layerIdx);
-			}
-			
-			imageData = reader.ReadImageData();
-			if (imageData == NULL)
-			{
-				ImageData* rawImageData = reader.MergeLayers(NULL, layerIndices, NULL);;
-				if ((rawImageData->mX == 0) && (rawImageData->mY == 0) &&
-					(rawImageData->mWidth == reader.mWidth) &&
-					(rawImageData->mHeight == reader.mHeight))
+					imageData = NULL;
+					continue;
+				}
+
+				if ((size == 0) && (pass == 0))
 				{
-					imageData = rawImageData;
+					baseWidth = reader.mWidth;
+					baseHeight = reader.mHeight;
 				}
-				else
+
+				std::vector<int> layerIndices;
+				for (int layerIdx = 0; layerIdx < (int)reader.mPSDLayerInfoVector.size(); layerIdx++)
 				{
-					imageData = new ImageData();
-					imageData->CreateNew(reader.mWidth, reader.mHeight);
-					imageData->CopyFrom(rawImageData, 0, 0);
-					delete rawImageData;
+					auto layer = reader.mPSDLayerInfoVector[layerIdx];
+					if (layer->mVisible)
+						layerIndices.insert(layerIndices.begin(), layerIdx);
 				}
-			}
-// 			else
-// 			{
-// 				PNGData pngData;
-// 				pngData.mWidth = imageData->mWidth;
-// 				pngData.mHeight = imageData->mHeight;
-// 				pngData.mBits = imageData->mBits;
-// 				pngData.WriteToFile("c:\\temp\\test.png");
-// 				pngData.mBits = NULL;
-// 			}
+
+				imageData = reader.ReadImageData();
+
+				if (imageData == NULL)
+				{
+					ImageData* rawImageData = reader.MergeLayers(NULL, layerIndices, NULL);;
+					if ((rawImageData->mX == 0) && (rawImageData->mY == 0) &&
+						(rawImageData->mWidth == reader.mWidth) &&
+						(rawImageData->mHeight == reader.mHeight))
+					{
+						imageData = rawImageData;
+					}
+					else
+					{
+						imageData = new ImageData();
+						imageData->CreateNew(reader.mWidth, reader.mHeight);
+						imageData->CopyFrom(rawImageData, 0, 0);
+						delete rawImageData;
+					}
+				}
+				// 			else
+				// 			{
+				// 				PNGData pngData;
+				// 				pngData.mWidth = imageData->mWidth;
+				// 				pngData.mHeight = imageData->mHeight;
+				// 				pngData.mBits = imageData->mBits;
+				// 				pngData.WriteToFile("c:\\temp\\test.png");
+				// 				pngData.mBits = NULL;
+				// 			}
+			}			
 		}
 	}
 
@@ -265,6 +286,9 @@ int main()
 		return false;
 	};
 
+	if (isThemeDir)
+		_mkdir("cache");
+
 	for (int size = 0; size < 3; size++)
 	{
 		int scale = 1 << size;
@@ -284,11 +308,11 @@ int main()
 		if (isThemeDir)			
 		{
 			if (size == 0)
-				fileName = "UI.png";
+				fileName = "cache/UI.png";
 			else if (size == 1)
-				fileName = "UI_2.png";
+				fileName = "cache/UI_2.png";
 			else
-				fileName = "UI_4.png";
+				fileName = "cache/UI_4.png";
 		}
 		else
 		{

+ 2 - 2
BeefTools/ImgCreate/ImgCreate.vcxproj

@@ -42,13 +42,13 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>

二進制
IDE/dist/images/ImgCreate.exe


+ 11 - 7
IDE/src/Settings.bf

@@ -491,20 +491,24 @@ namespace IDE
 						for (int scale < 3)
 						{
 							String srcImgPath = scope .(absPath);
+							String srcImgPath2 = scope .(absPath);
 							String destImgPath = scope .(absPath);
 							switch (scale)
 							{
 							case 0:
 								srcImgPath.Append("UI.psd");
-								destImgPath.Append("UI.png");
+								srcImgPath2.Append("UI.png");
+								destImgPath.Append("cache/UI.png");
 							case 1:
 								srcImgPath.Append("UI_2.psd");
-								destImgPath.Append("UI_2.png");
+								srcImgPath2.Append("UI_2.png");
+								destImgPath.Append("cache/UI_2.png");
 							case 2:
 								srcImgPath.Append("UI_4.psd");
-								destImgPath.Append("UI_2.png");
+								srcImgPath2.Append("UI_2.png");
+								destImgPath.Append("cache/UI_2.png");
 							}
-							maxSrcImgTime = Math.Max(maxSrcImgTime, File.GetLastWriteTime(srcImgPath).GetValueOrDefault());
+							maxSrcImgTime = Math.Max(maxSrcImgTime, Math.Max(File.GetLastWriteTime(srcImgPath).GetValueOrDefault(), File.GetLastWriteTime(srcImgPath2).GetValueOrDefault()));
 							let destImageTime = File.GetLastWriteTime(destImgPath).GetValueOrDefault();
 							if (scale == 0)
 								minDestImgTime = destImageTime;
@@ -543,9 +547,9 @@ namespace IDE
 						String imgPath = scope .(absPath);
 						switch (scale)
 						{
-						case 0: imgPath.Append("UI.png");
-						case 1: imgPath.Append("UI_2.png");
-						case 2: imgPath.Append("UI_4.png");
+						case 0: imgPath.Append("cache/UI.png");
+						case 1: imgPath.Append("cache/UI_2.png");
+						case 2: imgPath.Append("cache/UI_4.png");
 						}
 
 						if (File.Exists(imgPath))