OSDN Git Service

Add "Enable image compare in folder compare" option to Options dialog (2)
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 22 Apr 2020 14:03:22 +0000 (23:03 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 22 Apr 2020 14:03:22 +0000 (23:03 +0900)
DownloadDeps.cmd
Externals/versions.txt
Externals/winimerge
Src/CompareEngines/ImageCompare.cpp
Src/CompareEngines/ImageCompare.h
Src/WinIMergeLib.h

index 6be2d95..79e4115 100644 (file)
@@ -8,7 +8,7 @@ https://github.com/WinMerge/winmerge/releases/download/Merge7z1900.1/Merge7z1900
 https://github.com/WinMerge/winmerge/releases/download/Merge7z1900.1/Merge7z1900.1-x64.zip!Build\X64 ^
 https://github.com/WinMerge/frhed/releases/download/0.10904.2017/frhed-0.10904.2017.3-win32.zip!Build ^
 https://github.com/WinMerge/frhed/releases/download/0.10904.2017/frhed-0.10904.2017.3-x64.zip!Build\X64 ^
-https://github.com/WinMerge/winimerge/releases/download/1.0.16.0/winimerge-1-0-16-0-exe.zip!Build ^
+https://github.com/WinMerge/winimerge/releases/download/1.0.17.0/winimerge-1-0-17-0-exe.zip!Build ^
 https://github.com/WinMerge/patch/releases/download/v2.5.9-7/patch-2.5.9-7-bin.zip!Build\GnuWin32 ^
 http://www.magicnotes.com/steelbytes/SBAppLocale_ENG.zip!Docs\Manual\Tools
 
index 8f65336..19be739 100644 (file)
@@ -7,7 +7,7 @@ POCO: 1.4.3p1
 boost: 1.72.0
 frhed: 0.10904.2017.3
 freeimage: 3.18.0
-WinIMerge: 1.0.16.0
+WinIMerge: 1.0.17.0
 Google C++ Testing Framework: 1.70
 GnuWin32 Patch for Windows: 2.5.9-7
 7-zip: 19.00
index ee23c3d..4237949 160000 (submodule)
@@ -1 +1 @@
-Subproject commit ee23c3d463dfbf45a94ea55a1670244a23583bd3
+Subproject commit 42379497937d355818228ea1b75f45254f2f21cc
index 7e51a1a..ae5914c 100644 (file)
@@ -17,12 +17,14 @@ namespace CompareEngines
 ImageCompare::ImageCompare()
        : m_colorDistanceThreshold(0.0)
        , m_pImgMergeWindow(nullptr)
-       , m_hModule(nullptr)
 {
-       HMODULE hModule = LoadLibraryW(L"WinIMerge\\WinIMergeLib.dll");
+       HMODULE hModule = GetModuleHandleW(L"WinIMergeLib.dll");
        if (hModule == nullptr)
-               return;
-       m_hModule = reinterpret_cast<void *>(hModule);
+       {
+               hModule = LoadLibraryW(L"WinIMerge\\WinIMergeLib.dll");
+               if (hModule == nullptr)
+                       return;
+       }
        IImgMergeWindow* (*pfnWinIMerge_CreateWindowless)() =
                (IImgMergeWindow * (*)())GetProcAddress(hModule, "WinIMerge_CreateWindowless");
        if (pfnWinIMerge_CreateWindowless == nullptr)
@@ -43,28 +45,30 @@ ImageCompare::~ImageCompare()
                                pfnWinIMerge_DestroyWindow(m_pImgMergeWindow);
                }
        }
-       if (m_hModule)
-               FreeLibrary(reinterpret_cast<HMODULE>(m_hModule));
 }
 
 int ImageCompare::compare_files(const String& file1, const String& file2) const
 {
-       bool bImgDiff = true;
        if (!m_pImgMergeWindow)
                return DIFFCODE::CMPERR;
+       int code = DIFFCODE::CMPERR;
        m_pImgMergeWindow->SetColorDistanceThreshold(m_colorDistanceThreshold);
-       if (!m_pImgMergeWindow->OpenImages(file1.c_str(), file2.c_str()))
-               return DIFFCODE::CMPERR;
-       if (m_pImgMergeWindow->GetPageCount(0) == m_pImgMergeWindow->GetPageCount(1))
+       if (m_pImgMergeWindow->OpenImages(file1.c_str(), file2.c_str()))
        {
-               for (int page = 0; page < m_pImgMergeWindow->GetPageCount(0); ++page)
+               bool bImgDiff = true;
+               if (m_pImgMergeWindow->GetPageCount(0) == m_pImgMergeWindow->GetPageCount(1))
                {
-                       m_pImgMergeWindow->SetCurrentPageAll(page);
-                       if (m_pImgMergeWindow->GetDiffCount() == 0)
-                               bImgDiff = false;
+                       for (int page = 0; page < m_pImgMergeWindow->GetPageCount(0); ++page)
+                       {
+                               m_pImgMergeWindow->SetCurrentPageAll(page);
+                               if (m_pImgMergeWindow->GetDiffCount() == 0)
+                                       bImgDiff = false;
+                       }
                }
+               code = bImgDiff ? DIFFCODE::DIFF : DIFFCODE::SAME;
+               m_pImgMergeWindow->CloseImages();
        }
-       return bImgDiff ? DIFFCODE::DIFF : DIFFCODE::SAME;
+       return code;
 }
 
 /**
index 9597450..7c07d8f 100644 (file)
@@ -32,7 +32,6 @@ private:
     int compare_files(const String& file1, const String& file2) const;
     mutable IImgMergeWindow *m_pImgMergeWindow;
     double m_colorDistanceThreshold;
-    void *m_hModule;
 };
 
 } // namespace CompareEngines
index f955821..ba26702 100644 (file)
@@ -148,6 +148,7 @@ struct IImgMergeWindow
        virtual bool ConvertToRealPos(int pane, const POINT& pt, POINT& ptReal) const = 0;\r
        virtual float GetVectorImageZoomRatio() const = 0;\r
        virtual void SetVectorImageZoomRatio(float zoom) = 0;\r
+       virtual bool CloseImages() = 0;\r
 };\r
 \r
 struct IImgToolWindow\r