{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE} = {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}\r
EndProjectSection\r
EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TortoiseIDiff", "TortoiseIDiff\TortoiseIDiff.vcproj", "{6D95829D-AE04-47A7-B66B-DC2F581DDF01}"\r
+EndProject\r
Global\r
GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ debug_static|Mixed Platforms = debug_static|Mixed Platforms\r
+ debug_static|Win32 = debug_static|Win32\r
+ debug_static|x64 = debug_static|x64\r
Debug|Mixed Platforms = Debug|Mixed Platforms\r
Debug|Win32 = Debug|Win32\r
Debug|x64 = Debug|x64\r
+ release_static|Mixed Platforms = release_static|Mixed Platforms\r
+ release_static|Win32 = release_static|Win32\r
+ release_static|x64 = release_static|x64\r
Release|Mixed Platforms = Release|Mixed Platforms\r
Release|Win32 = Release|Win32\r
Release|x64 = Release|x64\r
EndGlobalSection\r
GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.debug_static|x64.Build.0 = Debug|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Debug|Win32.ActiveCfg = Debug|Win32\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Debug|Win32.Build.0 = Debug|Win32\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Debug|x64.ActiveCfg = Debug|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Debug|x64.Build.0 = Debug|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.release_static|Win32.ActiveCfg = Release|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.release_static|x64.ActiveCfg = Release|x64\r
+ {7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.release_static|x64.Build.0 = Release|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Release|Mixed Platforms.Build.0 = Release|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Release|Win32.ActiveCfg = Release|Win32\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Release|Win32.Build.0 = Release|Win32\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Release|x64.ActiveCfg = Release|x64\r
{7CA5B1EB-8CC9-40A6-96D8-83649C1A870B}.Release|x64.Build.0 = Release|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.debug_static|x64.Build.0 = Debug|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Debug|Win32.ActiveCfg = Debug|Win32\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Debug|Win32.Build.0 = Debug|Win32\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Debug|x64.ActiveCfg = Debug|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Debug|x64.Build.0 = Debug|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.release_static|Win32.ActiveCfg = Release|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.release_static|x64.ActiveCfg = Release|x64\r
+ {50797F06-39C5-4802-8E2B-7B7A4EF03214}.release_static|x64.Build.0 = Release|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Release|Mixed Platforms.Build.0 = Release|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Release|Win32.ActiveCfg = Release|Win32\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Release|Win32.Build.0 = Release|Win32\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Release|x64.ActiveCfg = Release|x64\r
{50797F06-39C5-4802-8E2B-7B7A4EF03214}.Release|x64.Build.0 = Release|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.debug_static|x64.Build.0 = Debug|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Debug|Win32.ActiveCfg = Debug|Win32\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Debug|Win32.Build.0 = Debug|Win32\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Debug|x64.ActiveCfg = Debug|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Debug|x64.Build.0 = Debug|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.release_static|Win32.ActiveCfg = Release|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.release_static|x64.ActiveCfg = Release|x64\r
+ {BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.release_static|x64.Build.0 = Release|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Release|Mixed Platforms.Build.0 = Release|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Release|Win32.ActiveCfg = Release|Win32\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Release|Win32.Build.0 = Release|Win32\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Release|x64.ActiveCfg = Release|x64\r
{BC5A5F3B-E41A-4C56-B16F-263D2C6D6475}.Release|x64.Build.0 = Release|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.debug_static|x64.Build.0 = Debug|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Debug|Win32.ActiveCfg = Debug|Win32\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Debug|Win32.Build.0 = Debug|Win32\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Debug|x64.ActiveCfg = Debug|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Debug|x64.Build.0 = Debug|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.release_static|Win32.ActiveCfg = Release|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.release_static|x64.ActiveCfg = Release|x64\r
+ {E873DD32-5A31-4DE1-8341-A56A2A5489EA}.release_static|x64.Build.0 = Release|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Release|Mixed Platforms.Build.0 = Release|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Release|Win32.ActiveCfg = Release|Win32\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Release|Win32.Build.0 = Release|Win32\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Release|x64.ActiveCfg = Release|x64\r
{E873DD32-5A31-4DE1-8341-A56A2A5489EA}.Release|x64.Build.0 = Release|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.debug_static|x64.Build.0 = Debug|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Debug|Win32.ActiveCfg = Debug|Win32\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Debug|Win32.Build.0 = Debug|Win32\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Debug|x64.ActiveCfg = Debug|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Debug|x64.Build.0 = Debug|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.release_static|Win32.ActiveCfg = Release|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.release_static|x64.ActiveCfg = Release|x64\r
+ {A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.release_static|x64.Build.0 = Release|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Release|Mixed Platforms.Build.0 = Release|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Release|Win32.ActiveCfg = Release|Win32\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Release|Win32.Build.0 = Release|Win32\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Release|x64.ActiveCfg = Release|x64\r
{A2C38606-3D96-4A2C-B5C5-22CEAC523B37}.Release|x64.Build.0 = Release|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.debug_static|x64.Build.0 = Debug|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Debug|Win32.ActiveCfg = Debug|Win32\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Debug|Win32.Build.0 = Debug|Win32\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Debug|x64.ActiveCfg = Debug|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Debug|x64.Build.0 = Debug|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.release_static|Win32.ActiveCfg = Release|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.release_static|x64.ActiveCfg = Release|x64\r
+ {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.release_static|x64.Build.0 = Release|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Release|Mixed Platforms.Build.0 = Release|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Release|Win32.ActiveCfg = Release|Win32\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Release|Win32.Build.0 = Release|Win32\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Release|x64.ActiveCfg = Release|x64\r
{12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB}.Release|x64.Build.0 = Release|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.debug_static|x64.Build.0 = Debug|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Debug|Win32.ActiveCfg = Debug|Win32\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Debug|Win32.Build.0 = Debug|Win32\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Debug|x64.ActiveCfg = Debug|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Debug|x64.Build.0 = Debug|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.release_static|Win32.ActiveCfg = Release|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.release_static|x64.ActiveCfg = Release|x64\r
+ {4BE529FB-C2F2-49F7-A897-054B955564CF}.release_static|x64.Build.0 = Release|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Release|Mixed Platforms.Build.0 = Release|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Release|Win32.ActiveCfg = Release|Win32\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Release|Win32.Build.0 = Release|Win32\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Release|x64.ActiveCfg = Release|x64\r
{4BE529FB-C2F2-49F7-A897-054B955564CF}.Release|x64.Build.0 = Release|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.debug_static|x64.Build.0 = Debug|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Debug|Win32.ActiveCfg = Debug|Win32\r
{A5498556-CE09-4095-8335-08FC8370552D}.Debug|Win32.Build.0 = Debug|Win32\r
{A5498556-CE09-4095-8335-08FC8370552D}.Debug|x64.ActiveCfg = Debug|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Debug|x64.Build.0 = Debug|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.release_static|Win32.ActiveCfg = Release|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.release_static|x64.ActiveCfg = Release|x64\r
+ {A5498556-CE09-4095-8335-08FC8370552D}.release_static|x64.Build.0 = Release|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Release|Mixed Platforms.Build.0 = Release|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Release|Win32.ActiveCfg = Release|Win32\r
{A5498556-CE09-4095-8335-08FC8370552D}.Release|Win32.Build.0 = Release|Win32\r
{A5498556-CE09-4095-8335-08FC8370552D}.Release|x64.ActiveCfg = Release|x64\r
{A5498556-CE09-4095-8335-08FC8370552D}.Release|x64.Build.0 = Release|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.debug_static|x64.Build.0 = Debug|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Debug|Win32.ActiveCfg = Debug|x86\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Debug|x64.ActiveCfg = Debug|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Debug|x64.Build.0 = Debug|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.release_static|Win32.ActiveCfg = Release|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.release_static|x64.ActiveCfg = Release|x64\r
+ {150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.release_static|x64.Build.0 = Release|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Release|Mixed Platforms.Build.0 = Release|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Release|Win32.ActiveCfg = Release|x86\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Release|Win32.Build.0 = Release|x86\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Release|x64.ActiveCfg = Release|x64\r
{150172A5-8D02-4C00-ABB5-BD99D4B16B4C}.Release|x64.Build.0 = Release|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.debug_static|x64.Build.0 = Debug|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Debug|Win32.ActiveCfg = Debug|Win32\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Debug|Win32.Build.0 = Debug|Win32\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Debug|x64.ActiveCfg = Debug|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Debug|x64.Build.0 = Debug|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.release_static|Win32.ActiveCfg = Release|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.release_static|x64.ActiveCfg = Release|x64\r
+ {A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.release_static|x64.Build.0 = Release|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Release|Mixed Platforms.Build.0 = Release|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Release|Win32.ActiveCfg = Release|Win32\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Release|Win32.Build.0 = Release|Win32\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Release|x64.ActiveCfg = Release|x64\r
{A00D2EDC-B4F5-4B41-94BA-13961DE5D296}.Release|x64.Build.0 = Release|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.debug_static|x64.Build.0 = Debug|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Debug|Win32.ActiveCfg = Release|Win32\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Debug|Win32.Build.0 = Release|Win32\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Debug|x64.ActiveCfg = Release|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Debug|x64.Build.0 = Release|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.release_static|Win32.ActiveCfg = Release|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.release_static|x64.ActiveCfg = Release|x64\r
+ {13BC1836-2726-45C4-9249-5BA2BBBF8328}.release_static|x64.Build.0 = Release|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Release|Mixed Platforms.Build.0 = Release|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Release|Win32.ActiveCfg = Release|Win32\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Release|Win32.Build.0 = Release|Win32\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Release|x64.ActiveCfg = Release|x64\r
{13BC1836-2726-45C4-9249-5BA2BBBF8328}.Release|x64.Build.0 = Release|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.debug_static|x64.Build.0 = Debug|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Debug|Win32.ActiveCfg = Debug|Win32\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Debug|Win32.Build.0 = Debug|Win32\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Debug|x64.ActiveCfg = Debug|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Debug|x64.Build.0 = Debug|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.release_static|Win32.ActiveCfg = Release|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.release_static|x64.ActiveCfg = Release|x64\r
+ {D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.release_static|x64.Build.0 = Release|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Release|Mixed Platforms.Build.0 = Release|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Release|Win32.ActiveCfg = Release|Win32\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Release|Win32.Build.0 = Release|Win32\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Release|x64.ActiveCfg = Release|x64\r
{D3AFBFBE-5501-4077-B3B4-3D28BBCA8F20}.Release|x64.Build.0 = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.debug_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.debug_static|Mixed Platforms.Build.0 = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.debug_static|Win32.ActiveCfg = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.debug_static|x64.ActiveCfg = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.debug_static|x64.Build.0 = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Debug|Mixed Platforms.ActiveCfg = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Debug|Mixed Platforms.Build.0 = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Debug|Win32.ActiveCfg = Release|Win32\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Debug|Win32.Build.0 = Release|Win32\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Debug|x64.ActiveCfg = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Debug|x64.Build.0 = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.release_static|Win32.ActiveCfg = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.release_static|x64.ActiveCfg = Release|x64\r
+ {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.release_static|x64.Build.0 = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Release|Mixed Platforms.Build.0 = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Release|Win32.ActiveCfg = Release|Win32\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Release|Win32.Build.0 = Release|Win32\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Release|x64.ActiveCfg = Release|x64\r
{454D5FCC-E25A-4B45-9CA2-01ABB0FA5181}.Release|x64.Build.0 = Release|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.debug_static|x64.Build.0 = Debug|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Debug|Win32.ActiveCfg = Debug|Win32\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Debug|Win32.Build.0 = Debug|Win32\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Debug|x64.ActiveCfg = Debug|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Debug|x64.Build.0 = Debug|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.release_static|Win32.ActiveCfg = Release|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.release_static|x64.ActiveCfg = Release|x64\r
+ {62507C2F-9290-4342-910F-BFC44DF99B01}.release_static|x64.Build.0 = Release|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Release|Mixed Platforms.Build.0 = Release|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Release|Win32.ActiveCfg = Release|Win32\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Release|Win32.Build.0 = Release|Win32\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Release|x64.ActiveCfg = Release|x64\r
{62507C2F-9290-4342-910F-BFC44DF99B01}.Release|x64.Build.0 = Release|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.debug_static|x64.Build.0 = Debug|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Debug|Win32.ActiveCfg = Debug|Win32\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Debug|Win32.Build.0 = Debug|Win32\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Debug|x64.ActiveCfg = Debug|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Debug|x64.Build.0 = Debug|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.release_static|Win32.ActiveCfg = Release|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.release_static|x64.ActiveCfg = Release|x64\r
+ {2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.release_static|x64.Build.0 = Release|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Release|Mixed Platforms.Build.0 = Release|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Release|Win32.ActiveCfg = Release|Win32\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Release|Win32.Build.0 = Release|Win32\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Release|x64.ActiveCfg = Release|x64\r
{2C879469-DB8F-4BF0-B016-AE864D2A7BBC}.Release|x64.Build.0 = Release|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.debug_static|Mixed Platforms.ActiveCfg = debug_static|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.debug_static|Mixed Platforms.Build.0 = debug_static|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.debug_static|Win32.ActiveCfg = debug_static|Win32\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.debug_static|Win32.Build.0 = debug_static|Win32\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.debug_static|x64.ActiveCfg = debug_static|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.debug_static|x64.Build.0 = debug_static|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Debug|Win32.ActiveCfg = Debug|Win32\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Debug|Win32.Build.0 = Debug|Win32\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Debug|x64.ActiveCfg = Debug|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Debug|x64.Build.0 = Debug|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.release_static|Mixed Platforms.ActiveCfg = release_static|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.release_static|Mixed Platforms.Build.0 = release_static|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.release_static|Win32.ActiveCfg = release_static|Win32\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.release_static|Win32.Build.0 = release_static|Win32\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.release_static|x64.ActiveCfg = release_static|x64\r
+ {72EFB681-1397-4193-BBF9-CA05AC52B75D}.release_static|x64.Build.0 = release_static|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Release|Mixed Platforms.Build.0 = Release|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Release|Win32.ActiveCfg = Release|Win32\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Release|Win32.Build.0 = Release|Win32\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Release|x64.ActiveCfg = Release|x64\r
{72EFB681-1397-4193-BBF9-CA05AC52B75D}.Release|x64.Build.0 = Release|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.debug_static|x64.Build.0 = Debug|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Debug|Win32.ActiveCfg = Debug|Win32\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Debug|Win32.Build.0 = Debug|Win32\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Debug|x64.ActiveCfg = Debug|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Debug|x64.Build.0 = Debug|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.release_static|Win32.ActiveCfg = Release|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.release_static|x64.ActiveCfg = Release|x64\r
+ {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.release_static|x64.Build.0 = Release|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Release|Mixed Platforms.Build.0 = Release|x64\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Release|Win32.ActiveCfg = Release|Win32\r
{1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99}.Release|x64.ActiveCfg = Release|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.debug_static|x64.Build.0 = Debug|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Debug|Win32.ActiveCfg = Debug|Win32\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Debug|Win32.Build.0 = Debug|Win32\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Debug|x64.ActiveCfg = Debug|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Debug|x64.Build.0 = Debug|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.release_static|Win32.ActiveCfg = Release|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.release_static|x64.ActiveCfg = Release|x64\r
+ {EC88E7EC-3074-4841-BA45-B938D098EFF6}.release_static|x64.Build.0 = Release|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Release|Mixed Platforms.Build.0 = Release|x64\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Release|Win32.ActiveCfg = Release|Win32\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Release|Win32.Build.0 = Release|Win32\r
{EC88E7EC-3074-4841-BA45-B938D098EFF6}.Release|x64.ActiveCfg = Release|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.debug_static|x64.Build.0 = Debug|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Debug|Win32.ActiveCfg = Debug|Win32\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Debug|Win32.Build.0 = Debug|Win32\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Debug|x64.ActiveCfg = Debug|Win32\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.release_static|Win32.ActiveCfg = Release|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.release_static|x64.ActiveCfg = Release|x64\r
+ {E8C01071-3B47-4A3F-9168-AA58A4635638}.release_static|x64.Build.0 = Release|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Release|Mixed Platforms.Build.0 = Release|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Release|Win32.ActiveCfg = Release|Win32\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Release|Win32.Build.0 = Release|Win32\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Release|x64.ActiveCfg = Release|x64\r
{E8C01071-3B47-4A3F-9168-AA58A4635638}.Release|x64.Build.0 = Release|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.debug_static|Mixed Platforms.ActiveCfg = debug_static|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.debug_static|Mixed Platforms.Build.0 = debug_static|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.debug_static|Win32.ActiveCfg = debug_static|Win32\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.debug_static|Win32.Build.0 = debug_static|Win32\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.debug_static|x64.ActiveCfg = debug_static|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.debug_static|x64.Build.0 = debug_static|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Debug|Win32.ActiveCfg = Debug|Win32\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Debug|Win32.Build.0 = Debug|Win32\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Debug|x64.ActiveCfg = Debug|Win32\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.release_static|Mixed Platforms.ActiveCfg = release_static|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.release_static|Mixed Platforms.Build.0 = release_static|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.release_static|Win32.ActiveCfg = release_static|Win32\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.release_static|Win32.Build.0 = release_static|Win32\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.release_static|x64.ActiveCfg = release_static|x64\r
+ {8ABB4F84-891A-4748-8507-F5494842173E}.release_static|x64.Build.0 = release_static|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Release|Mixed Platforms.Build.0 = Release|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Release|Win32.ActiveCfg = Release|Win32\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Release|Win32.Build.0 = Release|Win32\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Release|x64.ActiveCfg = Release|x64\r
{8ABB4F84-891A-4748-8507-F5494842173E}.Release|x64.Build.0 = Release|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.debug_static|x64.Build.0 = Debug|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Debug|Win32.ActiveCfg = Debug|Win32\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Debug|Win32.Build.0 = Debug|Win32\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Debug|x64.ActiveCfg = Debug|Win32\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.release_static|Win32.ActiveCfg = Release|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.release_static|x64.ActiveCfg = Release|x64\r
+ {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.release_static|x64.Build.0 = Release|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Release|Mixed Platforms.Build.0 = Release|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Release|Win32.ActiveCfg = Release|Win32\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Release|Win32.Build.0 = Release|Win32\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Release|x64.ActiveCfg = Release|x64\r
{AE6AAFBA-9992-452A-9EB8-DD69402A4ACE}.Release|x64.Build.0 = Release|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.debug_static|x64.Build.0 = Debug|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Debug|Win32.ActiveCfg = Debug|Win32\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Debug|Win32.Build.0 = Debug|Win32\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Debug|x64.ActiveCfg = Debug|Win32\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.release_static|Win32.ActiveCfg = Release|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.release_static|x64.ActiveCfg = Release|x64\r
+ {4472028D-4ACF-474E-AA95-9B7E12B50F60}.release_static|x64.Build.0 = Release|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Release|Mixed Platforms.Build.0 = Release|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Release|Win32.ActiveCfg = Release|Win32\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Release|Win32.Build.0 = Release|Win32\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Release|x64.ActiveCfg = Release|x64\r
{4472028D-4ACF-474E-AA95-9B7E12B50F60}.Release|x64.Build.0 = Release|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.debug_static|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.debug_static|Mixed Platforms.Build.0 = Debug|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.debug_static|Win32.ActiveCfg = Debug|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.debug_static|x64.ActiveCfg = Debug|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.debug_static|x64.Build.0 = Debug|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Debug|Win32.ActiveCfg = Debug|Win32\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Debug|Win32.Build.0 = Debug|Win32\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Debug|x64.ActiveCfg = Debug|Win32\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.release_static|Mixed Platforms.ActiveCfg = Release|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.release_static|Mixed Platforms.Build.0 = Release|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.release_static|Win32.ActiveCfg = Release|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.release_static|x64.ActiveCfg = Release|x64\r
+ {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.release_static|x64.Build.0 = Release|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Release|Mixed Platforms.Build.0 = Release|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Release|Win32.ActiveCfg = Release|Win32\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Release|Win32.Build.0 = Release|Win32\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Release|x64.ActiveCfg = Release|x64\r
{6BD19BAE-4041-4E85-B576-AAC9D54CAAB9}.Release|x64.Build.0 = Release|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.debug_static|Mixed Platforms.ActiveCfg = debug_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.debug_static|Mixed Platforms.Build.0 = debug_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.debug_static|Win32.ActiveCfg = debug_static|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.debug_static|Win32.Build.0 = debug_static|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.debug_static|x64.ActiveCfg = debug_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.debug_static|x64.Build.0 = debug_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Debug|Mixed Platforms.Build.0 = Debug|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Debug|Win32.Build.0 = Debug|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Debug|x64.ActiveCfg = Debug|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Debug|x64.Build.0 = Debug|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.release_static|Mixed Platforms.ActiveCfg = release_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.release_static|Mixed Platforms.Build.0 = release_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.release_static|Win32.ActiveCfg = release_static|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.release_static|Win32.Build.0 = release_static|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.release_static|x64.ActiveCfg = release_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.release_static|x64.Build.0 = release_static|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Release|Mixed Platforms.ActiveCfg = Release|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Release|Mixed Platforms.Build.0 = Release|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Release|Win32.ActiveCfg = Release|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Release|Win32.Build.0 = Release|Win32\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Release|x64.ActiveCfg = Release|x64\r
+ {6D95829D-AE04-47A7-B66B-DC2F581DDF01}.Release|x64.Build.0 = Release|x64\r
EndGlobalSection\r
GlobalSection(SolutionProperties) = preSolution\r
HideSolutionNode = FALSE\r
<ComponentRef Id="C__TortoiseMergeShortcuts" />\r
\r
<ComponentRef Id="C__TortoiseBlame" />\r
-<!-- \r
+ \r
<ComponentRef Id="C__TortoiseIDiff" />\r
<ComponentRef Id="C__TortoiseIDiffShortcuts" />\r
--->\r
+\r
<ComponentRef Id="C__TortoiseUDiff" />\r
\r
<ComponentRef Id="C__PlainSettingsShortcuts" />\r
<File Id="F__SciLexer" ShortName="SCILEX.DLL" Name="SciLexer.dll" DiskId="1" Source="..\..\bin\$(var.ReleasePath)\bin\SciLexer.dll" />\r
</Component>\r
\r
-<!--\r
+\r
<Component Id="C__TortoiseIDiff" Guid="$(var.GuidTortoiseIDiff)" Win64="$(var.Win64YesNo)">\r
\r
<File Id="F__TortoiseIDiff" ShortName="TIDIFF.EXE" Name="TortoiseIDiff.exe" DiskId="1" Source="..\..\bin\$(var.ReleasePath)\bin\TortoiseIDiff.exe" KeyPath="yes" />\r
<Shortcut Id="S__TortoiseIDiff" Directory="D_TortoisePrgMenu" ShortName="TIDIFF" Name="TortoiseIDiff" Advertise="no"\r
Target="[INSTALLDIR]bin\TortoiseIDiff.exe" Description="View Diff's of image files" Show="normal" />\r
</Component>\r
--->\r
+\r
<Component Id="C__TortoiseUDiff" Guid="$(var.GuidTortoiseUDiff)" Win64="$(var.Win64YesNo)">\r
<File Id="F__TortoiseUDiff" ShortName="TUDIFF.EXE" Name="TortoiseUDiff.exe" DiskId="1" Source="..\..\bin\$(var.ReleasePath)\bin\TortoiseUDiff.exe" KeyPath="yes" />\r
</Component>\r
--- /dev/null
+#include "StdAfx.h"\r
+#include "Resource.h"\r
+#include "AboutDlg.h"\r
+#include "Registry.h"\r
+#include "..\version.h"\r
+#include <string>\r
+#include <Commdlg.h>\r
+\r
+using namespace std;\r
+\r
+CAboutDlg::CAboutDlg(HWND hParent)\r
+{\r
+ m_hParent = hParent;\r
+}\r
+\r
+CAboutDlg::~CAboutDlg(void)\r
+{\r
+}\r
+\r
+LRESULT CAboutDlg::DlgFunc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ UNREFERENCED_PARAMETER(lParam);\r
+ switch (uMsg)\r
+ {\r
+ case WM_INITDIALOG:\r
+ {\r
+ InitDialog(hwndDlg, IDI_TORTOISEIDIFF);\r
+ // initialize the controls\r
+ m_link.ConvertStaticToHyperlink(hwndDlg, IDC_WEBLINK, _T("http://tortoisesvn.net"));\r
+ TCHAR verbuf[1024] = {0};\r
+ TCHAR maskbuf[1024] = {0};\r
+ if (!::LoadString (hResource, IDS_VERSION, maskbuf, 1024))\r
+ {\r
+ SecureZeroMemory(maskbuf, sizeof(maskbuf));\r
+ }\r
+ _stprintf_s(verbuf, 1024, maskbuf, TSVN_VERMAJOR, TSVN_VERMINOR, TSVN_VERMICRO, TSVN_VERBUILD);\r
+ SetDlgItemText(hwndDlg, IDC_ABOUTVERSION, verbuf);\r
+ }\r
+ return TRUE;\r
+ case WM_COMMAND:\r
+ return DoCommand(LOWORD(wParam));\r
+ default:\r
+ return FALSE;\r
+ }\r
+}\r
+\r
+LRESULT CAboutDlg::DoCommand(int id)\r
+{\r
+ switch (id)\r
+ {\r
+ case IDOK:\r
+ // fall through\r
+ case IDCANCEL:\r
+ EndDialog(*this, id);\r
+ break;\r
+ }\r
+ return 1;\r
+}\r
+\r
--- /dev/null
+// TortoiseSVN - a Windows shell extension for easy version control\r
+\r
+// Copyright (C) 2007 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+#pragma once\r
+#include "basedialog.h"\r
+#include "hyperlink_base.h"\r
+\r
+/**\r
+ * \ingroup TortoiseIDiff\r
+ * about dialog.\r
+ */\r
+class CAboutDlg : public CDialog\r
+{\r
+public:\r
+ CAboutDlg(HWND hParent);\r
+ ~CAboutDlg(void);\r
+\r
+ void SetHiddenWnd(HWND hWnd) {m_hHiddenWnd = hWnd;}\r
+protected:\r
+ LRESULT CALLBACK DlgFunc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);\r
+ LRESULT DoCommand(int id);\r
+\r
+private:\r
+ HWND m_hParent;\r
+ HWND m_hHiddenWnd;\r
+ CHyperLink m_link;\r
+};\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006 - 2009 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#include "StdAfx.h"\r
+#include "commctrl.h"\r
+#include "Commdlg.h"\r
+#include "TortoiseIDiff.h"\r
+#include "MainWindow.h"\r
+#include "AboutDlg.h"\r
+\r
+#pragma comment(lib, "comctl32.lib")\r
+\r
+tstring CMainWindow::leftpicpath;\r
+tstring CMainWindow::leftpictitle;\r
+\r
+tstring CMainWindow::rightpicpath;\r
+tstring CMainWindow::rightpictitle;\r
+\r
+bool CMainWindow::RegisterAndCreateWindow()\r
+{\r
+ WNDCLASSEX wcx; \r
+\r
+ // Fill in the window class structure with default parameters \r
+ wcx.cbSize = sizeof(WNDCLASSEX);\r
+ wcx.style = CS_HREDRAW | CS_VREDRAW;\r
+ wcx.lpfnWndProc = CWindow::stWinMsgHandler;\r
+ wcx.cbClsExtra = 0;\r
+ wcx.cbWndExtra = 0;\r
+ wcx.hInstance = hResource;\r
+ wcx.hCursor = LoadCursor(NULL, IDC_SIZEWE);\r
+ wcx.lpszClassName = ResString(hResource, IDS_APP_TITLE);\r
+ wcx.hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_TORTOISEIDIFF));\r
+ wcx.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);\r
+ wcx.lpszMenuName = MAKEINTRESOURCE(IDC_TORTOISEIDIFF);\r
+ wcx.hIconSm = LoadIcon(wcx.hInstance, MAKEINTRESOURCE(IDI_TORTOISEIDIFF));\r
+ if (RegisterWindow(&wcx))\r
+ {\r
+ if (Create(WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE, NULL))\r
+ {\r
+ ShowWindow(m_hwnd, SW_SHOW);\r
+ UpdateWindow(m_hwnd);\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+}\r
+\r
+void CMainWindow::PositionChildren(RECT * clientrect /* = NULL */)\r
+{\r
+ RECT tbRect;\r
+ if (clientrect == NULL)\r
+ return;\r
+ SendMessage(hwndTB, TB_AUTOSIZE, 0, 0);\r
+ GetWindowRect(hwndTB, &tbRect);\r
+ LONG tbHeight = tbRect.bottom-tbRect.top-1;\r
+ HDWP hdwp = BeginDeferWindowPos(2);\r
+ if (bOverlap)\r
+ {\r
+ SetWindowPos(picWindow1, NULL, clientrect->left, clientrect->top+tbHeight, clientrect->right-clientrect->left, clientrect->bottom-clientrect->top-tbHeight, SWP_SHOWWINDOW);\r
+ }\r
+ else\r
+ {\r
+ if (bVertical)\r
+ {\r
+ RECT child;\r
+ child.left = clientrect->left;\r
+ child.top = clientrect->top+tbHeight;\r
+ child.right = clientrect->right;\r
+ child.bottom = nSplitterPos-(SPLITTER_BORDER/2);\r
+ if (hdwp) hdwp = DeferWindowPos(hdwp, picWindow1, NULL, child.left, child.top, child.right-child.left, child.bottom-child.top, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ child.top = nSplitterPos+(SPLITTER_BORDER/2);\r
+ child.bottom = clientrect->bottom;\r
+ if (hdwp) hdwp = DeferWindowPos(hdwp, picWindow2, NULL, child.left, child.top, child.right-child.left, child.bottom-child.top, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ }\r
+ else\r
+ {\r
+ RECT child;\r
+ child.left = clientrect->left;\r
+ child.top = clientrect->top+tbHeight;\r
+ child.right = nSplitterPos-(SPLITTER_BORDER/2);\r
+ child.bottom = clientrect->bottom;\r
+ if (hdwp) hdwp = DeferWindowPos(hdwp, picWindow1, NULL, child.left, child.top, child.right-child.left, child.bottom-child.top, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ child.left = nSplitterPos+(SPLITTER_BORDER/2);\r
+ child.right = clientrect->right;\r
+ if (hdwp) hdwp = DeferWindowPos(hdwp, picWindow2, NULL, child.left, child.top, child.right-child.left, child.bottom-child.top, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ }\r
+ }\r
+ if (hdwp) EndDeferWindowPos(hdwp);\r
+ picWindow1.SetTransparentColor(transparentColor);\r
+ picWindow2.SetTransparentColor(transparentColor);\r
+ InvalidateRect(*this, NULL, FALSE);\r
+}\r
+\r
+LRESULT CALLBACK CMainWindow::WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (uMsg)\r
+ {\r
+ case WM_CREATE:\r
+ {\r
+ m_hwnd = hwnd;\r
+ picWindow1.RegisterAndCreateWindow(hwnd);\r
+ picWindow1.SetPic(leftpicpath, leftpictitle, true);\r
+ picWindow2.RegisterAndCreateWindow(hwnd);\r
+ picWindow2.SetPic(rightpicpath, rightpictitle, false);\r
+\r
+ picWindow1.SetOtherPicWindow(&picWindow2);\r
+ picWindow2.SetOtherPicWindow(&picWindow1);\r
+ // center the splitter\r
+ RECT rect;\r
+ GetClientRect(hwnd, &rect);\r
+ nSplitterPos = (rect.right-rect.left-SPLITTER_BORDER)/2;\r
+ CreateToolbar();\r
+ PositionChildren(&rect);\r
+ picWindow1.FitImageInWindow();\r
+ picWindow2.FitImageInWindow();\r
+ }\r
+ break;\r
+ case WM_COMMAND:\r
+ {\r
+ return DoCommand(LOWORD(wParam));\r
+ }\r
+ break;\r
+ case WM_PAINT:\r
+ {\r
+ PAINTSTRUCT ps;\r
+ HDC hdc;\r
+ RECT rect;\r
+\r
+ ::GetClientRect(*this, &rect);\r
+ hdc = BeginPaint(hwnd, &ps);\r
+ SetBkColor(hdc, GetSysColor(COLOR_3DFACE));\r
+ ::ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);\r
+ EndPaint(hwnd, &ps);\r
+ }\r
+ break;\r
+ case WM_GETMINMAXINFO:\r
+ {\r
+ MINMAXINFO * mmi = (MINMAXINFO*)lParam;\r
+ mmi->ptMinTrackSize.x = WINDOW_MINWIDTH;\r
+ mmi->ptMinTrackSize.y = WINDOW_MINHEIGHT;\r
+ return 0;\r
+ }\r
+ break;\r
+ case WM_SIZE:\r
+ {\r
+ RECT rect;\r
+ GetClientRect(hwnd, &rect);\r
+ if (bVertical)\r
+ {\r
+ RECT tbRect;\r
+ GetWindowRect(hwndTB, &tbRect);\r
+ LONG tbHeight = tbRect.bottom-tbRect.top-1;\r
+ nSplitterPos = (rect.bottom-rect.top-SPLITTER_BORDER+tbHeight)/2;\r
+ }\r
+ else\r
+ nSplitterPos = (rect.right-rect.left-SPLITTER_BORDER)/2;\r
+ PositionChildren(&rect);\r
+ }\r
+ break;\r
+ case WM_SETCURSOR:\r
+ {\r
+ if ((HWND)wParam == *this)\r
+ {\r
+ RECT rect;\r
+ POINT pt;\r
+ GetClientRect(*this, &rect);\r
+ GetCursorPos(&pt);\r
+ ScreenToClient(*this, &pt);\r
+ if (PtInRect(&rect, pt))\r
+ {\r
+ if (bVertical)\r
+ {\r
+ HCURSOR hCur = LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS));\r
+ SetCursor(hCur);\r
+ }\r
+ else\r
+ {\r
+ HCURSOR hCur = LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE));\r
+ SetCursor(hCur);\r
+ }\r
+ return TRUE;\r
+ }\r
+ }\r
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);\r
+ }\r
+ break;\r
+ case WM_LBUTTONDOWN:\r
+ Splitter_OnLButtonDown(hwnd, uMsg, wParam, lParam);\r
+ break;\r
+ case WM_LBUTTONUP:\r
+ Splitter_OnLButtonUp(hwnd, uMsg, wParam, lParam);\r
+ break;\r
+ case WM_MOUSEMOVE:\r
+ Splitter_OnMouseMove(hwnd, uMsg, wParam, lParam);\r
+ break;\r
+ case WM_MOUSEWHEEL:\r
+ {\r
+ // find out if the mouse cursor is over one of the views, and if\r
+ // it is, pass the mouse wheel message to that view\r
+ POINT pt;\r
+ DWORD ptW = GetMessagePos();\r
+ pt.x = GET_X_LPARAM(ptW);\r
+ pt.y = GET_Y_LPARAM(ptW);\r
+ RECT rect;\r
+ GetWindowRect(picWindow1, &rect);\r
+ if (PtInRect(&rect, pt))\r
+ {\r
+ picWindow1.OnMouseWheel(GET_KEYSTATE_WPARAM(wParam), GET_WHEEL_DELTA_WPARAM(wParam));\r
+ }\r
+ else\r
+ {\r
+ GetWindowRect(picWindow2, &rect);\r
+ if (PtInRect(&rect, pt))\r
+ {\r
+ picWindow2.OnMouseWheel(GET_KEYSTATE_WPARAM(wParam), GET_WHEEL_DELTA_WPARAM(wParam));\r
+ }\r
+ }\r
+ }\r
+ break;\r
+ case WM_MOUSEHWHEEL:\r
+ {\r
+ // find out if the mouse cursor is over one of the views, and if\r
+ // it is, pass the mouse wheel message to that view\r
+ POINT pt;\r
+ DWORD ptW = GetMessagePos();\r
+ pt.x = GET_X_LPARAM(ptW);\r
+ pt.y = GET_Y_LPARAM(ptW);\r
+ RECT rect;\r
+ GetWindowRect(picWindow1, &rect);\r
+ if (PtInRect(&rect, pt))\r
+ {\r
+ picWindow1.OnMouseWheel(GET_KEYSTATE_WPARAM(wParam)|MK_SHIFT, GET_WHEEL_DELTA_WPARAM(wParam));\r
+ }\r
+ else\r
+ {\r
+ GetWindowRect(picWindow2, &rect);\r
+ if (PtInRect(&rect, pt))\r
+ {\r
+ picWindow2.OnMouseWheel(GET_KEYSTATE_WPARAM(wParam)|MK_SHIFT, GET_WHEEL_DELTA_WPARAM(wParam));\r
+ }\r
+ }\r
+ }\r
+ break;\r
+ case WM_NOTIFY:\r
+ {\r
+ LPNMHDR pNMHDR = (LPNMHDR)lParam;\r
+ if (pNMHDR->code == TTN_GETDISPINFO)\r
+ {\r
+ LPTOOLTIPTEXT lpttt; \r
+\r
+ lpttt = (LPTOOLTIPTEXT) lParam; \r
+ lpttt->hinst = hResource; \r
+\r
+ // Specify the resource identifier of the descriptive \r
+ // text for the given button. \r
+ TCHAR stringbuf[MAX_PATH] = {0};\r
+ MENUITEMINFO mii;\r
+ mii.cbSize = sizeof(MENUITEMINFO);\r
+ mii.fMask = MIIM_TYPE;\r
+ mii.dwTypeData = stringbuf;\r
+ mii.cch = sizeof(stringbuf)/sizeof(TCHAR);\r
+ GetMenuItemInfo(GetMenu(*this), (UINT)lpttt->hdr.idFrom, FALSE, &mii);\r
+ lpttt->lpszText = stringbuf;\r
+ }\r
+ }\r
+ break;\r
+ case WM_DESTROY:\r
+ bWindowClosed = TRUE;\r
+ PostQuitMessage(0);\r
+ break;\r
+ case WM_CLOSE:\r
+ ImageList_Destroy(hToolbarImgList);\r
+ ::DestroyWindow(m_hwnd);\r
+ break;\r
+ default:\r
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);\r
+ }\r
+\r
+ return 0;\r
+};\r
+\r
+LRESULT CMainWindow::DoCommand(int id)\r
+{\r
+ switch (id) \r
+ {\r
+ case ID_FILE_OPEN:\r
+ {\r
+ if (OpenDialog())\r
+ {\r
+ picWindow1.SetPic(leftpicpath, _T(""), true);\r
+ picWindow2.SetPic(rightpicpath, _T(""), false);\r
+ if (bOverlap)\r
+ {\r
+ picWindow1.SetSecondPic(picWindow2.GetPic(), rightpictitle, rightpicpath);\r
+ }\r
+ else\r
+ {\r
+ picWindow1.SetSecondPic();\r
+ }\r
+ RECT rect;\r
+ GetClientRect(*this, &rect);\r
+ PositionChildren(&rect);\r
+ picWindow1.FitImageInWindow();\r
+ picWindow2.FitImageInWindow();\r
+ }\r
+ }\r
+ break;\r
+ case ID_VIEW_IMAGEINFO:\r
+ {\r
+ bShowInfo = !bShowInfo;\r
+ HMENU hMenu = GetMenu(*this);\r
+ UINT uCheck = MF_BYCOMMAND;\r
+ uCheck |= bShowInfo ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_IMAGEINFO, uCheck);\r
+\r
+ picWindow1.ShowInfo(bShowInfo);\r
+ picWindow2.ShowInfo(bShowInfo);\r
+\r
+ // change the state of the toolbar button\r
+ TBBUTTONINFO tbi;\r
+ tbi.cbSize = sizeof(TBBUTTONINFO);\r
+ tbi.dwMask = TBIF_STATE;\r
+ tbi.fsState = bShowInfo ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_IMAGEINFO, (LPARAM)&tbi);\r
+ }\r
+ break;\r
+ case ID_VIEW_OVERLAPIMAGES:\r
+ {\r
+ bOverlap = !bOverlap;\r
+ HMENU hMenu = GetMenu(*this);\r
+ UINT uCheck = MF_BYCOMMAND;\r
+ uCheck |= bOverlap ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_OVERLAPIMAGES, uCheck);\r
+ uCheck |= (m_BlendType == CPicWindow::BLEND_ALPHA) ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_BLENDALPHA, uCheck);\r
+\r
+ // change the state of the toolbar button\r
+ TBBUTTONINFO tbi;\r
+ tbi.cbSize = sizeof(TBBUTTONINFO);\r
+ tbi.dwMask = TBIF_STATE;\r
+ tbi.fsState = bOverlap ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_OVERLAPIMAGES, (LPARAM)&tbi);\r
+\r
+ tbi.fsState = (m_BlendType == CPicWindow::BLEND_ALPHA) ? TBSTATE_CHECKED : 0;\r
+ if (bOverlap)\r
+ tbi.fsState |= TBSTATE_ENABLED;\r
+ else\r
+ tbi.fsState = 0;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_BLENDALPHA, (LPARAM)&tbi);\r
+\r
+ if (bOverlap)\r
+ tbi.fsState = 0;\r
+ else\r
+ tbi.fsState = bVertical ? TBSTATE_ENABLED | TBSTATE_CHECKED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_ARRANGEVERTICAL, (LPARAM)&tbi);\r
+\r
+ ShowWindow(picWindow2, bOverlap ? SW_HIDE : SW_SHOW);\r
+\r
+ if (bOverlap)\r
+ {\r
+ picWindow1.StopTimer();\r
+ picWindow2.StopTimer();\r
+ picWindow1.SetSecondPic(picWindow2.GetPic(), rightpictitle, rightpicpath, \r
+ picWindow2.GetHPos(), picWindow2.GetVPos());\r
+ picWindow1.SetBlendAlpha(m_BlendType, 0.5f);\r
+ }\r
+ else\r
+ {\r
+ picWindow1.SetSecondPic();\r
+ }\r
+\r
+\r
+ RECT rect;\r
+ GetClientRect(*this, &rect);\r
+ PositionChildren(&rect);\r
+\r
+ if ((bFitSizes)&&(bOverlap))\r
+ {\r
+ picWindow1.FitSizes(bFitSizes);\r
+ }\r
+ return 0;\r
+ }\r
+ break;\r
+ case ID_VIEW_BLENDALPHA:\r
+ {\r
+ if (m_BlendType == CPicWindow::BLEND_ALPHA)\r
+ m_BlendType = CPicWindow::BLEND_XOR;\r
+ else\r
+ m_BlendType = CPicWindow::BLEND_ALPHA;\r
+\r
+ HMENU hMenu = GetMenu(*this);\r
+ UINT uCheck = MF_BYCOMMAND;\r
+ uCheck |= (m_BlendType == CPicWindow::BLEND_ALPHA) ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_BLENDALPHA, uCheck);\r
+\r
+ // change the state of the toolbar button\r
+ TBBUTTONINFO tbi;\r
+ tbi.cbSize = sizeof(TBBUTTONINFO);\r
+ tbi.dwMask = TBIF_STATE;\r
+ tbi.fsState = (m_BlendType == CPicWindow::BLEND_ALPHA) ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_BLENDALPHA, (LPARAM)&tbi);\r
+ picWindow1.SetBlendAlpha(m_BlendType, picWindow1.GetBlendAlpha());\r
+ PositionChildren();\r
+ }\r
+ break;\r
+ case ID_VIEW_TRANSPARENTCOLOR:\r
+ {\r
+ static COLORREF customColors[16] = {0};\r
+ CHOOSECOLOR ccDlg;\r
+ memset(&ccDlg, 0, sizeof(ccDlg));\r
+ ccDlg.lStructSize = sizeof(ccDlg);\r
+ ccDlg.hwndOwner = m_hwnd;\r
+ ccDlg.rgbResult = transparentColor;\r
+ ccDlg.lpCustColors = customColors;\r
+ ccDlg.Flags = CC_RGBINIT | CC_FULLOPEN;\r
+ if(ChooseColor(&ccDlg))\r
+ {\r
+ transparentColor = ccDlg.rgbResult;\r
+ picWindow1.SetTransparentColor(transparentColor);\r
+ picWindow2.SetTransparentColor(transparentColor);\r
+ // The color picker takes the focus and we don't get it back.\r
+ ::SetFocus(picWindow1);\r
+ }\r
+ }\r
+ break;\r
+ case ID_VIEW_FITTOGETHER:\r
+ {\r
+ bFitSizes = !bFitSizes;\r
+ picWindow1.FitSizes(bFitSizes);\r
+ picWindow2.FitSizes(bFitSizes);\r
+\r
+ HMENU hMenu = GetMenu(*this);\r
+ UINT uCheck = MF_BYCOMMAND;\r
+ uCheck |= bFitSizes ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_FITTOGETHER, uCheck);\r
+\r
+ // change the state of the toolbar button\r
+ TBBUTTONINFO tbi;\r
+ tbi.cbSize = sizeof(TBBUTTONINFO);\r
+ tbi.dwMask = TBIF_STATE;\r
+ tbi.fsState = bFitSizes ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_FITTOGETHER, (LPARAM)&tbi);\r
+ }\r
+ break;\r
+ case ID_VIEW_LINKIMAGESTOGETHER:\r
+ {\r
+ bLinkedPositions = !bLinkedPositions;\r
+ picWindow1.LinkPositions(bLinkedPositions);\r
+ picWindow2.LinkPositions(bLinkedPositions);\r
+\r
+ HMENU hMenu = GetMenu(*this);\r
+ UINT uCheck = MF_BYCOMMAND;\r
+ uCheck |= bLinkedPositions ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_LINKIMAGESTOGETHER, uCheck);\r
+\r
+ // change the state of the toolbar button\r
+ TBBUTTONINFO tbi;\r
+ tbi.cbSize = sizeof(TBBUTTONINFO);\r
+ tbi.dwMask = TBIF_STATE;\r
+ tbi.fsState = bLinkedPositions ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_LINKIMAGESTOGETHER, (LPARAM)&tbi);\r
+ }\r
+ break;\r
+ case ID_VIEW_ALPHA0:\r
+ picWindow1.SetBlendAlpha(m_BlendType, 0.0f);\r
+ break;\r
+ case ID_VIEW_ALPHA255:\r
+ picWindow1.SetBlendAlpha(m_BlendType, 1.0f);\r
+ break;\r
+ case ID_VIEW_ALPHA127:\r
+ picWindow1.SetBlendAlpha(m_BlendType, 0.5f);\r
+ break;\r
+ case ID_VIEW_ALPHATOGGLE:\r
+ picWindow1.ToggleAlpha();\r
+ break;\r
+ case ID_VIEW_FITIMAGESINWINDOW:\r
+ {\r
+ picWindow1.FitImageInWindow();\r
+ picWindow2.FitImageInWindow();\r
+ }\r
+ break;\r
+ case ID_VIEW_ORININALSIZE:\r
+ {\r
+ picWindow1.SetZoom(1.0, false);\r
+ picWindow2.SetZoom(1.0, false);\r
+ }\r
+ break;\r
+ case ID_VIEW_ZOOMIN:\r
+ {\r
+ picWindow1.Zoom(true, false);\r
+ if (!bFitSizes)\r
+ picWindow2.Zoom(true, false);\r
+ }\r
+ break;\r
+ case ID_VIEW_ZOOMOUT:\r
+ {\r
+ picWindow1.Zoom(false, false);\r
+ if (!bFitSizes)\r
+ picWindow2.Zoom(false, false);\r
+ }\r
+ break;\r
+ case ID_VIEW_ARRANGEVERTICAL:\r
+ {\r
+ bVertical = !bVertical;\r
+ RECT rect;\r
+ GetClientRect(*this, &rect);\r
+ if (bVertical)\r
+ {\r
+ RECT tbRect;\r
+ GetWindowRect(hwndTB, &tbRect);\r
+ LONG tbHeight = tbRect.bottom-tbRect.top-1;\r
+ nSplitterPos = (rect.bottom-rect.top-SPLITTER_BORDER+tbHeight)/2;\r
+ }\r
+ else\r
+ {\r
+ nSplitterPos = (rect.right-rect.left-SPLITTER_BORDER)/2;\r
+ }\r
+ HMENU hMenu = GetMenu(*this);\r
+ UINT uCheck = MF_BYCOMMAND;\r
+ uCheck |= bVertical ? MF_CHECKED : MF_UNCHECKED;\r
+ CheckMenuItem(hMenu, ID_VIEW_ARRANGEVERTICAL, uCheck);\r
+ // change the state of the toolbar button\r
+ TBBUTTONINFO tbi;\r
+ tbi.cbSize = sizeof(TBBUTTONINFO);\r
+ tbi.dwMask = TBIF_STATE;\r
+ tbi.fsState = bVertical ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED;\r
+ SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_ARRANGEVERTICAL, (LPARAM)&tbi);\r
+\r
+ PositionChildren(&rect);\r
+ }\r
+ break;\r
+ case ID_ABOUT:\r
+ {\r
+ CAboutDlg dlg(*this);\r
+ dlg.DoModal(hInst, IDD_ABOUT, *this);\r
+ }\r
+ break;\r
+ case IDM_EXIT:\r
+ ::PostQuitMessage(0);\r
+ return 0;\r
+ break;\r
+ default:\r
+ break;\r
+ };\r
+ return 1;\r
+}\r
+\r
+// splitter stuff\r
+void CMainWindow::DrawXorBar(HDC hdc, int x1, int y1, int width, int height)\r
+{\r
+ static WORD _dotPatternBmp[8] = \r
+ { \r
+ 0x0055, 0x00aa, 0x0055, 0x00aa, \r
+ 0x0055, 0x00aa, 0x0055, 0x00aa\r
+ };\r
+\r
+ HBITMAP hbm;\r
+ HBRUSH hbr, hbrushOld;\r
+\r
+ hbm = CreateBitmap(8, 8, 1, 1, _dotPatternBmp);\r
+ hbr = CreatePatternBrush(hbm);\r
+\r
+ SetBrushOrgEx(hdc, x1, y1, 0);\r
+ hbrushOld = (HBRUSH)SelectObject(hdc, hbr);\r
+\r
+ PatBlt(hdc, x1, y1, width, height, PATINVERT);\r
+\r
+ SelectObject(hdc, hbrushOld);\r
+\r
+ DeleteObject(hbr);\r
+ DeleteObject(hbm);\r
+}\r
+\r
+LRESULT CMainWindow::Splitter_OnLButtonDown(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ POINT pt;\r
+ HDC hdc;\r
+ RECT rect;\r
+ RECT clientrect;\r
+\r
+ pt.x = (short)LOWORD(lParam); // horizontal position of cursor \r
+ pt.y = (short)HIWORD(lParam);\r
+\r
+ GetClientRect(hwnd, &clientrect);\r
+ GetWindowRect(hwnd, &rect);\r
+ POINT zero = {0,0};\r
+ ClientToScreen(hwnd, &zero);\r
+ OffsetRect(&clientrect, zero.x-rect.left, zero.y-rect.top);\r
+\r
+ //convert the mouse coordinates relative to the top-left of\r
+ //the window\r
+ ClientToScreen(hwnd, &pt);\r
+ pt.x -= rect.left;\r
+ pt.y -= rect.top;\r
+\r
+ //same for the window coordinates - make them relative to 0,0\r
+ OffsetRect(&rect, -rect.left, -rect.top);\r
+\r
+ if (pt.x < 0)\r
+ pt.x = 0;\r
+ if (pt.x > rect.right-4) \r
+ pt.x = rect.right-4;\r
+ if (pt.y < 0)\r
+ pt.y = 0;\r
+ if (pt.y > rect.bottom-4)\r
+ pt.y = rect.bottom-4;\r
+\r
+ bDragMode = true;\r
+\r
+ SetCapture(hwnd);\r
+\r
+ hdc = GetWindowDC(hwnd);\r
+ if (bVertical)\r
+ DrawXorBar(hdc, clientrect.left, pt.y+2, clientrect.right-clientrect.left-2, 4);\r
+ else\r
+ DrawXorBar(hdc, pt.x+2, clientrect.top, 4, clientrect.bottom-clientrect.top-2);\r
+ ReleaseDC(hwnd, hdc);\r
+\r
+ oldx = pt.x;\r
+ oldy = pt.y;\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+LRESULT CMainWindow::Splitter_OnLButtonUp(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ HDC hdc;\r
+ RECT rect;\r
+ RECT clientrect;\r
+\r
+ POINT pt;\r
+ pt.x = (short)LOWORD(lParam); // horizontal position of cursor \r
+ pt.y = (short)HIWORD(lParam);\r
+\r
+ if (bDragMode == FALSE)\r
+ return 0;\r
+\r
+ GetClientRect(hwnd, &clientrect);\r
+ GetWindowRect(hwnd, &rect);\r
+ POINT zero = {0,0};\r
+ ClientToScreen(hwnd, &zero);\r
+ OffsetRect(&clientrect, zero.x-rect.left, zero.y-rect.top);\r
+\r
+ ClientToScreen(hwnd, &pt);\r
+ pt.x -= rect.left;\r
+ pt.y -= rect.top;\r
+\r
+ OffsetRect(&rect, -rect.left, -rect.top);\r
+\r
+ if (pt.x < 0)\r
+ pt.x = 0;\r
+ if (pt.x > rect.right-4) \r
+ pt.x = rect.right-4;\r
+ if (pt.y < 0)\r
+ pt.y = 0;\r
+ if (pt.y > rect.bottom-4)\r
+ pt.y = rect.bottom-4;\r
+\r
+ hdc = GetWindowDC(hwnd);\r
+ if (bVertical)\r
+ DrawXorBar(hdc, clientrect.left, oldy+2, clientrect.right-clientrect.left-2, 4); \r
+ else\r
+ DrawXorBar(hdc, oldx+2, clientrect.top, 4, clientrect.bottom-clientrect.top-2); \r
+ ReleaseDC(hwnd, hdc);\r
+\r
+ oldx = pt.x;\r
+ oldy = pt.y;\r
+\r
+ bDragMode = false;\r
+\r
+ //convert the splitter position back to screen coords.\r
+ GetWindowRect(hwnd, &rect);\r
+ pt.x += rect.left;\r
+ pt.y += rect.top;\r
+\r
+ //now convert into CLIENT coordinates\r
+ ScreenToClient(hwnd, &pt);\r
+ GetClientRect(hwnd, &rect);\r
+ if (bVertical)\r
+ nSplitterPos = pt.y;\r
+ else\r
+ nSplitterPos = pt.x;\r
+\r
+ ReleaseCapture();\r
+\r
+ //position the child controls\r
+ PositionChildren(&rect);\r
+ return 0;\r
+}\r
+\r
+LRESULT CMainWindow::Splitter_OnMouseMove(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ HDC hdc;\r
+ RECT rect;\r
+ RECT clientrect;\r
+\r
+ POINT pt;\r
+\r
+ if (bDragMode == FALSE)\r
+ return 0;\r
+\r
+ pt.x = (short)LOWORD(lParam); // horizontal position of cursor \r
+ pt.y = (short)HIWORD(lParam);\r
+\r
+ GetClientRect(hwnd, &clientrect);\r
+ GetWindowRect(hwnd, &rect);\r
+ POINT zero = {0,0};\r
+ ClientToScreen(hwnd, &zero);\r
+ OffsetRect(&clientrect, zero.x-rect.left, zero.y-rect.top);\r
+\r
+ //convert the mouse coordinates relative to the top-left of\r
+ //the window\r
+ ClientToScreen(hwnd, &pt);\r
+ pt.x -= rect.left;\r
+ pt.y -= rect.top;\r
+\r
+ //same for the window coordinates - make them relative to 0,0\r
+ OffsetRect(&rect, -rect.left, -rect.top);\r
+\r
+ if (pt.x < 0)\r
+ pt.x = 0;\r
+ if (pt.x > rect.right-4) \r
+ pt.x = rect.right-4;\r
+ if (pt.y < 0)\r
+ pt.y = 0;\r
+ if (pt.y > rect.bottom-4)\r
+ pt.y = rect.bottom-4;\r
+\r
+ if ((wParam & MK_LBUTTON) && ((bVertical && (pt.y != oldy)) || (!bVertical && (pt.x != oldx))))\r
+ {\r
+ hdc = GetWindowDC(hwnd);\r
+\r
+ if (bVertical)\r
+ {\r
+ DrawXorBar(hdc, clientrect.left, oldy+2, clientrect.right-clientrect.left-2, 4);\r
+ DrawXorBar(hdc, clientrect.left, pt.y+2, clientrect.right-clientrect.left-2, 4);\r
+ }\r
+ else\r
+ {\r
+ DrawXorBar(hdc, oldx+2, clientrect.top, 4, clientrect.bottom-clientrect.top-2);\r
+ DrawXorBar(hdc, pt.x+2, clientrect.top, 4, clientrect.bottom-clientrect.top-2);\r
+ }\r
+\r
+ ReleaseDC(hwnd, hdc);\r
+\r
+ oldx = pt.x;\r
+ oldy = pt.y;\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+bool CMainWindow::OpenDialog()\r
+{\r
+ return (DialogBox(hResource, MAKEINTRESOURCE(IDD_OPEN), *this, (DLGPROC)OpenDlgProc)==IDOK);\r
+}\r
+\r
+BOOL CALLBACK CMainWindow::OpenDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (message) \r
+ {\r
+ case WM_INITDIALOG:\r
+ {\r
+ // center on the parent window\r
+ HWND hParentWnd = ::GetParent(hwndDlg);\r
+ RECT parentrect, childrect, centeredrect;\r
+ GetWindowRect(hParentWnd, &parentrect);\r
+ GetWindowRect(hwndDlg, &childrect);\r
+ centeredrect.left = parentrect.left + ((parentrect.right-parentrect.left-childrect.right+childrect.left)/2);\r
+ centeredrect.right = centeredrect.left + (childrect.right-childrect.left);\r
+ centeredrect.top = parentrect.top + ((parentrect.bottom-parentrect.top-childrect.bottom+childrect.top)/2);\r
+ centeredrect.bottom = centeredrect.top + (childrect.bottom-childrect.top);\r
+ SetWindowPos(hwndDlg, NULL, centeredrect.left, centeredrect.top, centeredrect.right-centeredrect.left, centeredrect.bottom-centeredrect.top, SWP_SHOWWINDOW);\r
+ SetFocus(hwndDlg);\r
+ }\r
+ break;\r
+ case WM_COMMAND: \r
+ switch (LOWORD(wParam)) \r
+ {\r
+ case IDC_LEFTBROWSE:\r
+ {\r
+ TCHAR path[MAX_PATH] = {0};\r
+ if (AskForFile(hwndDlg, path))\r
+ {\r
+ SetDlgItemText(hwndDlg, IDC_LEFTIMAGE, path);\r
+ }\r
+ }\r
+ break;\r
+ case IDC_RIGHTBROWSE:\r
+ {\r
+ TCHAR path[MAX_PATH] = {0};\r
+ if (AskForFile(hwndDlg, path))\r
+ {\r
+ SetDlgItemText(hwndDlg, IDC_RIGHTIMAGE, path);\r
+ }\r
+ }\r
+ break;\r
+ case IDOK: \r
+ {\r
+ TCHAR path[MAX_PATH];\r
+ if (!GetDlgItemText(hwndDlg, IDC_LEFTIMAGE, path, MAX_PATH)) \r
+ *path = 0;\r
+ leftpicpath = path;\r
+ if (!GetDlgItemText(hwndDlg, IDC_RIGHTIMAGE, path, MAX_PATH))\r
+ *path = 0;\r
+ rightpicpath = path;\r
+ }\r
+ // Fall through. \r
+ case IDCANCEL: \r
+ EndDialog(hwndDlg, wParam); \r
+ return TRUE; \r
+ } \r
+ } \r
+ return FALSE; \r
+}\r
+\r
+bool CMainWindow::AskForFile(HWND owner, TCHAR * path)\r
+{\r
+ OPENFILENAME ofn = {0}; // common dialog box structure\r
+ // Initialize OPENFILENAME\r
+ ofn.lStructSize = sizeof(OPENFILENAME);\r
+ ofn.hwndOwner = owner;\r
+ ofn.lpstrFile = path;\r
+ ofn.nMaxFile = MAX_PATH;\r
+ ofn.lpstrTitle = ResString(::hResource, IDS_OPENIMAGEFILE);\r
+ ofn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_EXPLORER;\r
+ ofn.hInstance = ::hResource;\r
+ TCHAR filters[] = _T("Images\0*.wmf;*.jpg;*jpeg;*.bmp;*.gif;*.png;*.ico;*.dib;*.emf\0All (*.*)\0*.*\0\0");\r
+ ofn.lpstrFilter = filters;\r
+ ofn.nFilterIndex = 1;\r
+ // Display the Open dialog box. \r
+ if (GetOpenFileName(&ofn)==FALSE)\r
+ {\r
+ return false;\r
+ }\r
+ return true;\r
+}\r
+\r
+bool CMainWindow::CreateToolbar()\r
+{\r
+ // Ensure that the common control DLL is loaded. \r
+ INITCOMMONCONTROLSEX icex;\r
+ icex.dwSize = sizeof(INITCOMMONCONTROLSEX);\r
+ icex.dwICC = ICC_BAR_CLASSES | ICC_WIN95_CLASSES;\r
+ InitCommonControlsEx(&icex);\r
+\r
+ hwndTB = CreateWindowEx(0, \r
+ TOOLBARCLASSNAME, \r
+ (LPCTSTR)NULL,\r
+ WS_CHILD | WS_BORDER | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS, \r
+ 0, 0, 0, 0, \r
+ *this,\r
+ (HMENU)IDC_TORTOISEIDIFF, \r
+ hResource, \r
+ NULL);\r
+ if (hwndTB == INVALID_HANDLE_VALUE)\r
+ return false;\r
+\r
+ SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);\r
+\r
+ TBBUTTON tbb[12];\r
+ // create an imagelist containing the icons for the toolbar\r
+ hToolbarImgList = ImageList_Create(24, 24, ILC_COLOR32 | ILC_MASK, 12, 4);\r
+ if (hToolbarImgList == NULL)\r
+ return false;\r
+ int index = 0;\r
+ HICON hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_OVERLAP));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_OVERLAPIMAGES; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_BLEND));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_BLENDALPHA; \r
+ tbb[index].fsState = 0; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_LINK));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_LINKIMAGESTOGETHER; \r
+ tbb[index].fsState = TBSTATE_ENABLED | TBSTATE_CHECKED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_FITTOGETHER));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_FITTOGETHER; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ tbb[index].iBitmap = 0; \r
+ tbb[index].idCommand = 0; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_SEP; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_VERTICAL));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_ARRANGEVERTICAL; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_FITINWINDOW));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_FITIMAGESINWINDOW; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_ORIGSIZE));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_ORININALSIZE; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_ZOOMIN));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_ZOOMIN; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_ZOOMOUT));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_ZOOMOUT; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ tbb[index].iBitmap = 0; \r
+ tbb[index].idCommand = 0; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_SEP; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_IMGINFO));\r
+ tbb[index].iBitmap = ImageList_AddIcon(hToolbarImgList, hIcon); \r
+ tbb[index].idCommand = ID_VIEW_IMAGEINFO; \r
+ tbb[index].fsState = TBSTATE_ENABLED; \r
+ tbb[index].fsStyle = BTNS_BUTTON; \r
+ tbb[index].dwData = 0; \r
+ tbb[index++].iString = 0; \r
+\r
+ SendMessage(hwndTB, TB_SETIMAGELIST, 0, (LPARAM)hToolbarImgList);\r
+ SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM)index, (LPARAM) (LPTBBUTTON) &tbb); \r
+ SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); \r
+ ShowWindow(hwndTB, SW_SHOW); \r
+ return true; \r
+\r
+}\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006-2007,2009 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#pragma once\r
+#include "BaseWindow.h"\r
+#include "PicWindow.h"\r
+#include "commctrl.h"\r
+#include "TortoiseIDiff.h"\r
+\r
+#define SPLITTER_BORDER 2\r
+\r
+#define WINDOW_MINHEIGHT 200\r
+#define WINDOW_MINWIDTH 200\r
+\r
+/**\r
+ * \ingroup TortoiseIDiff\r
+ * The main window of TortoiseIDiff.\r
+ * Hosts the two image views, the menu, toolbar, slider, ...\r
+ */\r
+class CMainWindow : public CWindow\r
+{\r
+public:\r
+ CMainWindow(HINSTANCE hInst, const WNDCLASSEX* wcx = NULL) : CWindow(hInst, wcx)\r
+ , picWindow1(hInst)\r
+ , picWindow2(hInst)\r
+ , oldx(-4)\r
+ , oldy(-4)\r
+ , bMoved(false)\r
+ , bDragMode(false)\r
+ , nSplitterPos(100)\r
+ , bOverlap(false)\r
+ , bShowInfo(false)\r
+ , bVertical(false)\r
+ , bLinkedPositions(true)\r
+ , bFitSizes(false)\r
+ , transparentColor(::GetSysColor(COLOR_WINDOW))\r
+ , m_BlendType(CPicWindow::BLEND_ALPHA)\r
+ { \r
+ SetWindowTitle((LPCTSTR)ResString(hResource, IDS_APP_TITLE));\r
+ };\r
+\r
+ /**\r
+ * Registers the window class and creates the window.\r
+ */\r
+ bool RegisterAndCreateWindow();\r
+\r
+ /**\r
+ * Sets the image path and title for the left image view.\r
+ */\r
+ void SetLeft(tstring leftpath, tstring lefttitle) {leftpicpath=leftpath; leftpictitle=lefttitle;}\r
+ /**\r
+ * Sets the image path and the title for the right image view.\r
+ */\r
+ void SetRight(tstring rightpath, tstring righttitle) {rightpicpath=rightpath; rightpictitle=righttitle;}\r
+\r
+protected:\r
+ /// the message handler for this window\r
+ LRESULT CALLBACK WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);\r
+ /// Handles all the WM_COMMAND window messages (e.g. menu commands)\r
+ LRESULT DoCommand(int id);\r
+\r
+ /// Positions the child windows. Call this after the window sizes/positions have changed.\r
+ void PositionChildren(RECT * clientrect = NULL);\r
+ /// Shows the "Open images" dialog where the user can select the images to diff\r
+ bool OpenDialog();\r
+ static BOOL CALLBACK OpenDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
+ static bool AskForFile(HWND owner, TCHAR * path);\r
+\r
+ // splitter methods\r
+ void DrawXorBar(HDC hdc, int x1, int y1, int width, int height);\r
+ LRESULT Splitter_OnLButtonDown(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);\r
+ LRESULT Splitter_OnLButtonUp(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);\r
+ LRESULT Splitter_OnMouseMove(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);\r
+\r
+ // toolbar\r
+ bool CreateToolbar();\r
+ HWND hwndTB;\r
+ HIMAGELIST hToolbarImgList;\r
+\r
+ // command line params\r
+ static tstring leftpicpath;\r
+ static tstring leftpictitle;\r
+\r
+ static tstring rightpicpath;\r
+ static tstring rightpictitle;\r
+\r
+ // image data\r
+ CPicWindow picWindow1;\r
+ CPicWindow picWindow2;\r
+ bool bShowInfo;\r
+ COLORREF transparentColor;\r
+\r
+ // splitter data\r
+ int oldx;\r
+ int oldy;\r
+ bool bMoved;\r
+ bool bDragMode;\r
+ int nSplitterPos;\r
+\r
+ // one/two pane view\r
+ bool bOverlap;\r
+ bool bVertical;\r
+ bool bLinkedPositions;\r
+ bool bFitSizes;\r
+ CPicWindow::BlendType m_BlendType;\r
+\r
+};\r
+\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006 - 2008 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#include "StdAfx.h"\r
+#include "NiceTrackbar.h"\r
+#include <tchar.h>\r
+#include <CommCtrl.h>\r
+#include <WindowsX.h>\r
+\r
+\r
+LRESULT CALLBACK CNiceTrackbar::NiceTrackbarProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ CNiceTrackbar* self = (CNiceTrackbar*)GetWindowLongPtr(hwnd, GWLP_USERDATA);\r
+\r
+ switch (message) {\r
+ case WM_LBUTTONDOWN:\r
+ self->m_Dragging = true;\r
+ self->m_DragChanged = false;\r
+ SetCapture(hwnd);\r
+ //SetFocus(hwnd);\r
+ if (self->SetThumb(lParam)) {\r
+ self->m_DragChanged = true;\r
+ self->PostMessageToParent(TB_THUMBTRACK);\r
+ }\r
+ return 0;\r
+ case WM_MOUSEMOVE:\r
+ if (self->m_Dragging)\r
+ {\r
+ if (self->SetThumb(lParam))\r
+ {\r
+ self->m_DragChanged = true;\r
+ self->PostMessageToParent(TB_THUMBTRACK);\r
+ }\r
+ return 0;\r
+ }\r
+ break;\r
+ case WM_LBUTTONUP:\r
+ if (self->m_Dragging)\r
+ {\r
+ self->m_Dragging = false;\r
+ ReleaseCapture();\r
+ if (self->SetThumb(lParam))\r
+ {\r
+ self->PostMessageToParent(TB_ENDTRACK);\r
+ self->m_DragChanged = true;\r
+ }\r
+ if (self->m_DragChanged)\r
+ {\r
+ self->PostMessageToParent(TB_THUMBPOSITION);\r
+ self->m_DragChanged = false;\r
+ }\r
+ return 0;\r
+ }\r
+ break;\r
+ case WM_DESTROY:\r
+ SetWindowLongPtr (hwnd, GWLP_WNDPROC, (LONG_PTR)self->m_OrigProc);\r
+ break;\r
+ }\r
+ return CallWindowProc (self->m_OrigProc, hwnd, message, wParam, lParam);\r
+}\r
+\r
+\r
+void CNiceTrackbar::ConvertTrackbarToNice( HWND window )\r
+{\r
+ m_Window = window;\r
+\r
+ // setup this pointer\r
+ SetWindowLongPtr( window, GWLP_USERDATA, (LONG_PTR)this );\r
+\r
+ // subclass it\r
+ m_OrigProc = (WNDPROC)SetWindowLongPtr( window, GWLP_WNDPROC, (LONG_PTR)NiceTrackbarProc );\r
+}\r
+\r
+\r
+bool CNiceTrackbar::SetThumb (LPARAM lparamPoint)\r
+{\r
+ POINT point = { GET_X_LPARAM(lparamPoint), GET_Y_LPARAM(lparamPoint) };\r
+ const int nMin = (int)SendMessage(m_Window, TBM_GETRANGEMIN, 0, 0l);\r
+ const int nMax = (int)SendMessage(m_Window, TBM_GETRANGEMAX, 0, 0l);\r
+ RECT rc;\r
+ SendMessage(m_Window, TBM_GETCHANNELRECT, 0, (LPARAM)&rc);\r
+ double ratio;\r
+ if (GetWindowLong(m_Window, GWL_STYLE) & TBS_VERT)\r
+ {\r
+ // note: for vertical trackbar, it still returns the rectangle as if it was horizontal\r
+ ratio = (double)(point.y - rc.left)/(rc.right - rc.left);\r
+ }\r
+ else\r
+ {\r
+ ratio = (double)(point.x - rc.left)/(rc.right - rc.left);\r
+ }\r
+\r
+ int nNewPos = (int)(nMin + (nMax-nMin)*ratio + 0.5); // round the result to go to the nearest tick mark\r
+\r
+ const bool changed = (nNewPos != (int)SendMessage(m_Window, TBM_GETPOS, 0, 0));\r
+ if (changed)\r
+ {\r
+ SendMessage(m_Window, TBM_SETPOS, TRUE, nNewPos);\r
+ }\r
+ return changed;\r
+}\r
+\r
+\r
+void CNiceTrackbar::PostMessageToParent (int tbCode) const\r
+{\r
+ HWND parent = GetParent(m_Window);\r
+ if (parent) {\r
+ int pos = (int)SendMessage(m_Window, TBM_GETPOS, 0, 0);\r
+ bool vert = (GetWindowLong(m_Window, GWL_STYLE) & TBS_VERT) != 0;\r
+ PostMessage( parent, vert ? WM_VSCROLL : WM_HSCROLL, (WPARAM)((pos << 16) | tbCode), (LPARAM)m_Window );\r
+ }\r
+}\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006 - 2008 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#pragma once\r
+\r
+/**\r
+ * \ingroup TortoiseIDiff\r
+ * Subclassed trackbar control that jumps to the mouse click positions immediately, instead of\r
+ * changing the value "towards it".\r
+ */\r
+class CNiceTrackbar {\r
+public:\r
+ CNiceTrackbar() : m_Window(NULL), m_OrigProc(NULL), m_Dragging(false), m_DragChanged(false) { }\r
+\r
+ HWND GetWindow() const { return m_Window; }\r
+ bool IsValid() const { return m_Window != NULL; }\r
+\r
+ void ConvertTrackbarToNice( HWND window );\r
+\r
+private:\r
+ static LRESULT CALLBACK NiceTrackbarProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);\r
+ void PostMessageToParent (int tbCode) const;\r
+ bool SetThumb (LPARAM lparamPoint);\r
+\r
+private:\r
+ HWND m_Window;\r
+ WNDPROC m_OrigProc;\r
+ bool m_Dragging;\r
+ bool m_DragChanged;\r
+};\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006-2009 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#include "StdAfx.h"\r
+#include "shellapi.h"\r
+#include "commctrl.h"\r
+#include "PicWindow.h"\r
+#include "math.h"\r
+\r
+#pragma comment(lib, "Msimg32.lib")\r
+#pragma comment(lib, "shell32.lib")\r
+\r
+bool CPicWindow::RegisterAndCreateWindow(HWND hParent)\r
+{\r
+ WNDCLASSEX wcx; \r
+\r
+ // Fill in the window class structure with default parameters \r
+ wcx.cbSize = sizeof(WNDCLASSEX);\r
+ wcx.style = CS_HREDRAW | CS_VREDRAW;\r
+ wcx.lpfnWndProc = CWindow::stWinMsgHandler;\r
+ wcx.cbClsExtra = 0;\r
+ wcx.cbWndExtra = 0;\r
+ wcx.hInstance = hResource;\r
+ wcx.hCursor = LoadCursor(NULL, IDC_ARROW);\r
+ wcx.lpszClassName = _T("TortoiseIDiffPicWindow");\r
+ wcx.hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_TORTOISEIDIFF));\r
+ wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);\r
+ wcx.lpszMenuName = MAKEINTRESOURCE(IDC_TORTOISEIDIFF);\r
+ wcx.hIconSm = LoadIcon(wcx.hInstance, MAKEINTRESOURCE(IDI_TORTOISEIDIFF));\r
+ RegisterWindow(&wcx);\r
+ if (CreateEx(WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE, WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE, hParent))\r
+ {\r
+ ShowWindow(m_hwnd, SW_SHOW);\r
+ UpdateWindow(m_hwnd);\r
+ CreateButtons();\r
+ return true;\r
+ }\r
+ return false;\r
+}\r
+\r
+void CPicWindow::PositionTrackBar()\r
+{\r
+ RECT rc;\r
+ GetClientRect(&rc);\r
+ HWND slider = m_AlphaSlider.GetWindow();\r
+ if ((pSecondPic)&&(m_blend == BLEND_ALPHA))\r
+ {\r
+ MoveWindow(slider, 0, rc.top-4+SLIDER_WIDTH, SLIDER_WIDTH, rc.bottom-rc.top-SLIDER_WIDTH+8, true);\r
+ ShowWindow(slider, SW_SHOW);\r
+ MoveWindow(hwndAlphaToggleBtn, 0, rc.top-4, SLIDER_WIDTH, SLIDER_WIDTH, true);\r
+ ShowWindow(hwndAlphaToggleBtn, SW_SHOW);\r
+ }\r
+ else\r
+ {\r
+ ShowWindow(slider, SW_HIDE);\r
+ ShowWindow(hwndAlphaToggleBtn, SW_HIDE);\r
+ }\r
+}\r
+\r
+LRESULT CALLBACK CPicWindow::WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ TRACKMOUSEEVENT mevt;\r
+ switch (uMsg)\r
+ {\r
+ case WM_CREATE:\r
+ {\r
+ // create a slider control\r
+ CreateTrackbar(hwnd);\r
+ ShowWindow(m_AlphaSlider.GetWindow(), SW_HIDE);\r
+ //Create the tooltips\r
+ TOOLINFO ti;\r
+ RECT rect; // for client area coordinates\r
+\r
+ hwndTT = CreateWindowEx(WS_EX_TOPMOST,\r
+ TOOLTIPS_CLASS,\r
+ NULL,\r
+ WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, \r
+ CW_USEDEFAULT,\r
+ CW_USEDEFAULT,\r
+ CW_USEDEFAULT,\r
+ CW_USEDEFAULT,\r
+ hwnd,\r
+ NULL,\r
+ hResource,\r
+ NULL\r
+ );\r
+\r
+ SetWindowPos(hwndTT,\r
+ HWND_TOPMOST,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);\r
+\r
+ ::GetClientRect(hwnd, &rect);\r
+\r
+ ti.cbSize = sizeof(TOOLINFO);\r
+ ti.uFlags = TTF_TRACK | TTF_ABSOLUTE;\r
+ ti.hwnd = hwnd;\r
+ ti.hinst = hResource;\r
+ ti.uId = 0;\r
+ ti.lpszText = LPSTR_TEXTCALLBACK;\r
+ // ToolTip control will cover the whole window\r
+ ti.rect.left = rect.left; \r
+ ti.rect.top = rect.top;\r
+ ti.rect.right = rect.right;\r
+ ti.rect.bottom = rect.bottom;\r
+\r
+ SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); \r
+ SendMessage(hwndTT, TTM_SETMAXTIPWIDTH, 0, 600);\r
+ nHSecondScrollPos = 0;\r
+ nVSecondScrollPos = 0;\r
+ }\r
+ break;\r
+ case WM_SETFOCUS:\r
+ case WM_KILLFOCUS:\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ break;\r
+ case WM_ERASEBKGND:\r
+ return 1;\r
+ break;\r
+ case WM_PAINT:\r
+ Paint(hwnd);\r
+ break;\r
+ case WM_SIZE:\r
+ PositionTrackBar();\r
+ SetupScrollBars();\r
+ break;\r
+ case WM_VSCROLL:\r
+ if ((pSecondPic)&&((HWND)lParam == m_AlphaSlider.GetWindow()))\r
+ {\r
+ if (LOWORD(wParam) == TB_THUMBTRACK)\r
+ {\r
+ // while tracking, only redraw after 50 milliseconds\r
+ ::SetTimer(*this, TIMER_ALPHASLIDER, 50, NULL);\r
+ }\r
+ else\r
+ SetBlendAlpha(m_blend, SendMessage(m_AlphaSlider.GetWindow(), TBM_GETPOS, 0, 0) / 16.0f);\r
+ }\r
+ else\r
+ {\r
+ UINT nPos = HIWORD(wParam);\r
+ bool bForceUpdate = false;\r
+ if (LOWORD(wParam) == SB_THUMBTRACK || LOWORD(wParam) == SB_THUMBPOSITION)\r
+ {\r
+ // Get true 32-bit scroll position\r
+ SCROLLINFO si;\r
+ si.cbSize = sizeof(SCROLLINFO);\r
+ si.fMask = SIF_TRACKPOS;\r
+ GetScrollInfo(*this, SB_VERT, &si);\r
+ nPos = si.nTrackPos;\r
+ bForceUpdate = true;\r
+ }\r
+\r
+ OnVScroll(LOWORD(wParam), nPos);\r
+ if (bLinkedPositions)\r
+ {\r
+ pTheOtherPic->OnVScroll(LOWORD(wParam), nPos);\r
+ if (bForceUpdate)\r
+ ::UpdateWindow(*pTheOtherPic);\r
+ }\r
+ }\r
+ break;\r
+ case WM_HSCROLL:\r
+ {\r
+ UINT nPos = HIWORD(wParam);\r
+ bool bForceUpdate = false;\r
+ if (LOWORD(wParam) == SB_THUMBTRACK || LOWORD(wParam) == SB_THUMBPOSITION)\r
+ {\r
+ // Get true 32-bit scroll position\r
+ SCROLLINFO si;\r
+ si.cbSize = sizeof(SCROLLINFO);\r
+ si.fMask = SIF_TRACKPOS;\r
+ GetScrollInfo(*this, SB_VERT, &si);\r
+ nPos = si.nTrackPos;\r
+ bForceUpdate = true;\r
+ }\r
+\r
+ OnHScroll(LOWORD(wParam), nPos);\r
+ if (bLinkedPositions)\r
+ {\r
+ pTheOtherPic->OnHScroll(LOWORD(wParam), nPos);\r
+ if (bForceUpdate)\r
+ ::UpdateWindow(*pTheOtherPic);\r
+ }\r
+ }\r
+ break;\r
+ case WM_MOUSEWHEEL:\r
+ {\r
+ OnMouseWheel(GET_KEYSTATE_WPARAM(wParam), GET_WHEEL_DELTA_WPARAM(wParam));\r
+ if (bFitSizes)\r
+ pTheOtherPic->OnMouseWheel(GET_KEYSTATE_WPARAM(wParam), GET_WHEEL_DELTA_WPARAM(wParam));\r
+ }\r
+ break;\r
+ case WM_MOUSEHWHEEL:\r
+ {\r
+ OnMouseWheel(GET_KEYSTATE_WPARAM(wParam)|MK_SHIFT, GET_WHEEL_DELTA_WPARAM(wParam));\r
+ if (bFitSizes)\r
+ pTheOtherPic->OnMouseWheel(GET_KEYSTATE_WPARAM(wParam)|MK_SHIFT, GET_WHEEL_DELTA_WPARAM(wParam));\r
+ }\r
+ break;\r
+ case WM_LBUTTONDOWN:\r
+ SetFocus(*this);\r
+ ptPanStart.x = GET_X_LPARAM(lParam);\r
+ ptPanStart.y = GET_Y_LPARAM(lParam);\r
+ startVScrollPos = nVScrollPos;\r
+ startHScrollPos = nHScrollPos;\r
+ startVSecondScrollPos = nVSecondScrollPos;\r
+ startHSecondScrollPos = nHSecondScrollPos;\r
+ SetCapture(*this);\r
+ break;\r
+ case WM_LBUTTONUP:\r
+ ReleaseCapture();\r
+ break;\r
+ case WM_MOUSELEAVE:\r
+ m_lastTTPos.x = 0;\r
+ m_lastTTPos.y = 0;\r
+ SendMessage(hwndTT, TTM_TRACKACTIVATE, FALSE, 0);\r
+ break;\r
+ case WM_MOUSEMOVE:\r
+ {\r
+ mevt.cbSize = sizeof(TRACKMOUSEEVENT);\r
+ mevt.dwFlags = TME_LEAVE;\r
+ mevt.dwHoverTime = HOVER_DEFAULT;\r
+ mevt.hwndTrack = *this;\r
+ ::TrackMouseEvent(&mevt);\r
+ POINT pt = {((int)(short)LOWORD(lParam)), ((int)(short)HIWORD(lParam))};\r
+ if (pt.y < HEADER_HEIGHT)\r
+ {\r
+ ClientToScreen(*this, &pt);\r
+ if ((abs(m_lastTTPos.x - pt.x) > 20)||(abs(m_lastTTPos.y - pt.y) > 10))\r
+ {\r
+ m_lastTTPos = pt;\r
+ pt.x += 15;\r
+ pt.y += 15;\r
+ SendMessage(hwndTT, TTM_TRACKPOSITION, 0, MAKELONG(pt.x, pt.y));\r
+ TOOLINFO ti = {0};\r
+ ti.cbSize = sizeof(TOOLINFO);\r
+ ti.hwnd = *this;\r
+ ti.uId = 0;\r
+ SendMessage(hwndTT, TTM_TRACKACTIVATE, TRUE, (LPARAM)&ti);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ SendMessage(hwndTT, TTM_TRACKACTIVATE, FALSE, 0);\r
+ m_lastTTPos.x = 0;\r
+ m_lastTTPos.y = 0;\r
+ }\r
+ if (wParam & MK_LBUTTON)\r
+ {\r
+ // pan the image\r
+ int xPos = GET_X_LPARAM(lParam); \r
+ int yPos = GET_Y_LPARAM(lParam);\r
+ if (wParam & MK_CONTROL)\r
+ {\r
+ nHSecondScrollPos = startHSecondScrollPos + (ptPanStart.x - xPos);\r
+ nVSecondScrollPos = startVSecondScrollPos + (ptPanStart.y - yPos);\r
+ }\r
+ else\r
+ {\r
+ nHScrollPos = startHScrollPos + (ptPanStart.x - xPos);\r
+ nVScrollPos = startVScrollPos + (ptPanStart.y - yPos);\r
+ }\r
+ SetupScrollBars();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+ UpdateWindow(*this);\r
+ if (bLinkedPositions)\r
+ {\r
+ pTheOtherPic->nHScrollPos = nHScrollPos;\r
+ pTheOtherPic->nVScrollPos = nVScrollPos;\r
+ pTheOtherPic->SetupScrollBars();\r
+ InvalidateRect(*pTheOtherPic, NULL, TRUE);\r
+ UpdateWindow(*pTheOtherPic);\r
+ }\r
+ }\r
+ }\r
+ break;\r
+ case WM_SETCURSOR:\r
+ {\r
+ // we show a hand cursor if the image can be dragged,\r
+ // and a hand-down cursor if the image is currently dragged\r
+ if ((*this == (HWND)wParam)&&(LOWORD(lParam)==HTCLIENT))\r
+ {\r
+ RECT rect;\r
+ GetClientRect(&rect);\r
+ LONG width = picture.m_Width;\r
+ LONG height = picture.m_Height;\r
+ if (pSecondPic)\r
+ {\r
+ width = max(width, pSecondPic->m_Width);\r
+ height = max(height, pSecondPic->m_Height);\r
+ }\r
+\r
+ if ((GetKeyState(VK_LBUTTON)&0x8000)||(HIWORD(lParam) == WM_LBUTTONDOWN))\r
+ {\r
+ SetCursor(curHandDown);\r
+ }\r
+ else\r
+ {\r
+ SetCursor(curHand);\r
+ }\r
+ return TRUE;\r
+ }\r
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);\r
+ }\r
+ break;\r
+ case WM_DROPFILES:\r
+ {\r
+ HDROP hDrop = (HDROP)wParam; \r
+ TCHAR szFileName[MAX_PATH];\r
+ // we only use the first file dropped (if multiple files are dropped)\r
+ DragQueryFile(hDrop, 0, szFileName, sizeof(szFileName)/sizeof(TCHAR));\r
+ SetPic(szFileName, _T(""), bMainPic);\r
+ FitImageInWindow();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+ }\r
+ break;\r
+ case WM_COMMAND:\r
+ {\r
+ switch (LOWORD(wParam))\r
+ {\r
+ case LEFTBUTTON_ID:\r
+ {\r
+ PrevImage();\r
+ if (bLinkedPositions)\r
+ pTheOtherPic->PrevImage();\r
+ return 0;\r
+ }\r
+ break;\r
+ case RIGHTBUTTON_ID:\r
+ {\r
+ NextImage();\r
+ if (bLinkedPositions)\r
+ pTheOtherPic->NextImage();\r
+ return 0;\r
+ }\r
+ break;\r
+ case PLAYBUTTON_ID:\r
+ {\r
+ bPlaying = !bPlaying;\r
+ Animate(bPlaying);\r
+ if (bLinkedPositions)\r
+ pTheOtherPic->Animate(bPlaying);\r
+ return 0;\r
+ }\r
+ break;\r
+ case ALPHATOGGLEBUTTON_ID:\r
+ {\r
+ WORD msg = HIWORD(wParam);\r
+ switch (msg)\r
+ {\r
+ case BN_DOUBLECLICKED:\r
+ {\r
+ SendMessage(hwndAlphaToggleBtn, BM_SETSTATE, 1, 0);\r
+ SetTimer(*this, ID_ALPHATOGGLETIMER, 1000, NULL);\r
+ }\r
+ break;\r
+ case BN_CLICKED:\r
+ KillTimer(*this, ID_ALPHATOGGLETIMER);\r
+ ToggleAlpha();\r
+ break;\r
+ }\r
+ return 0;\r
+ }\r
+ break;\r
+ case BLENDALPHA_ID:\r
+ {\r
+ m_blend = BLEND_ALPHA;\r
+ PositionTrackBar();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+ }\r
+ break;\r
+ case BLENDXOR_ID:\r
+ {\r
+ m_blend = BLEND_XOR;\r
+ PositionTrackBar();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+ case WM_TIMER:\r
+ {\r
+ switch (wParam)\r
+ {\r
+ case ID_ANIMATIONTIMER:\r
+ {\r
+ nCurrentFrame++;\r
+ if (nCurrentFrame > picture.GetNumberOfFrames(0))\r
+ nCurrentFrame = 1;\r
+ long delay = picture.SetActiveFrame(nCurrentFrame);\r
+ delay = max(100, delay);\r
+ SetTimer(*this, ID_ANIMATIONTIMER, delay, NULL);\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ }\r
+ break;\r
+ case TIMER_ALPHASLIDER:\r
+ {\r
+ SetBlendAlpha(m_blend, SendMessage(m_AlphaSlider.GetWindow(), TBM_GETPOS, 0, 0)/16.0f);\r
+ KillTimer(*this, TIMER_ALPHASLIDER);\r
+ }\r
+ break;\r
+ case ID_ALPHATOGGLETIMER:\r
+ {\r
+ ToggleAlpha();\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+ case WM_NOTIFY:\r
+ {\r
+ LPNMHDR pNMHDR = (LPNMHDR)lParam;\r
+ if (pNMHDR->code == TTN_GETDISPINFO)\r
+ {\r
+ if ((HWND)wParam == m_AlphaSlider.GetWindow())\r
+ {\r
+ LPTOOLTIPTEXT lpttt; \r
+\r
+ lpttt = (LPTOOLTIPTEXT) lParam; \r
+ lpttt->hinst = hResource; \r
+ TCHAR stringbuf[MAX_PATH] = {0};\r
+ _stprintf_s(stringbuf, MAX_PATH, _T("%i%% alpha"), (int)(SendMessage(m_AlphaSlider.GetWindow(),TBM_GETPOS,0,0)/16.0f*100.0f));\r
+ lpttt->lpszText = stringbuf;\r
+ }\r
+ else\r
+ {\r
+ NMTTDISPINFOA* pTTTA = (NMTTDISPINFOA*)pNMHDR;\r
+ NMTTDISPINFOW* pTTTW = (NMTTDISPINFOW*)pNMHDR;\r
+ BuildInfoString(m_wszTip, sizeof(m_wszTip)/sizeof(TCHAR), true);\r
+ if (pNMHDR->code == TTN_NEEDTEXTW)\r
+ {\r
+ pTTTW->lpszText = m_wszTip;\r
+ }\r
+ else\r
+ {\r
+ pTTTA->lpszText = m_szTip;\r
+ ::WideCharToMultiByte(CP_ACP, 0, m_wszTip, -1, m_szTip, 8192, NULL, NULL);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ break;\r
+ case WM_DESTROY:\r
+ DestroyIcon(hLeft);\r
+ DestroyIcon(hRight);\r
+ DestroyIcon(hPlay);\r
+ DestroyIcon(hStop);\r
+ bWindowClosed = TRUE;\r
+ break;\r
+ default:\r
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);\r
+ }\r
+\r
+ return 0;\r
+};\r
+\r
+void CPicWindow::NextImage()\r
+{\r
+ nCurrentDimension++;\r
+ if (nCurrentDimension > picture.GetNumberOfDimensions())\r
+ nCurrentDimension = picture.GetNumberOfDimensions();\r
+ nCurrentFrame++;\r
+ if (nCurrentFrame > picture.GetNumberOfFrames(0))\r
+ nCurrentFrame = picture.GetNumberOfFrames(0);\r
+ picture.SetActiveFrame(nCurrentFrame >= nCurrentDimension ? nCurrentFrame : nCurrentDimension);\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ PositionChildren();\r
+}\r
+\r
+void CPicWindow::PrevImage()\r
+{\r
+ nCurrentDimension--;\r
+ if (nCurrentDimension < 1)\r
+ nCurrentDimension = 1;\r
+ nCurrentFrame--;\r
+ if (nCurrentFrame < 1)\r
+ nCurrentFrame = 1;\r
+ picture.SetActiveFrame(nCurrentFrame >= nCurrentDimension ? nCurrentFrame : nCurrentDimension);\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ PositionChildren();\r
+}\r
+\r
+void CPicWindow::Animate(bool bStart)\r
+{\r
+ if (bStart)\r
+ {\r
+ SendMessage(hwndPlayBtn, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hStop);\r
+ SetTimer(*this, ID_ANIMATIONTIMER, 0, NULL);\r
+ }\r
+ else\r
+ {\r
+ SendMessage(hwndPlayBtn, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hPlay);\r
+ KillTimer(*this, ID_ANIMATIONTIMER);\r
+ }\r
+}\r
+\r
+void CPicWindow::SetPic(tstring path, tstring title, bool bFirst)\r
+{\r
+ bMainPic = bFirst;\r
+ picpath=path;pictitle=title;\r
+ picture.SetInterpolationMode(InterpolationModeHighQualityBicubic);\r
+ bValid = picture.Load(picpath);\r
+ nDimensions = picture.GetNumberOfDimensions();\r
+ if (nDimensions)\r
+ nFrames = picture.GetNumberOfFrames(0);\r
+ if (bValid)\r
+ {\r
+ picscale = 1.0;\r
+ PositionChildren();\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ }\r
+}\r
+\r
+void CPicWindow::DrawViewTitle(HDC hDC, RECT * rect)\r
+{\r
+ HFONT hFont = NULL;\r
+ hFont = CreateFont(-MulDiv(pSecondPic ? 8 : 10, GetDeviceCaps(hDC, LOGPIXELSY), 72), 0, 0, 0, FW_DONTCARE, false, false, false, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH, _T("MS Shell Dlg"));\r
+ HFONT hFontOld = (HFONT)SelectObject(hDC, (HGDIOBJ)hFont);\r
+\r
+ RECT textrect;\r
+ textrect.left = rect->left;\r
+ textrect.top = rect->top;\r
+ textrect.right = rect->right;\r
+ textrect.bottom = rect->top + HEADER_HEIGHT;\r
+ if (HasMultipleImages())\r
+ textrect.bottom += HEADER_HEIGHT;\r
+\r
+ COLORREF crBk, crFg;\r
+ crBk = ::GetSysColor(COLOR_SCROLLBAR);\r
+ crFg = ::GetSysColor(COLOR_WINDOWTEXT);\r
+ SetBkColor(hDC, crBk);\r
+ ::ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &textrect, NULL, 0, NULL);\r
+\r
+ if (GetFocus() == *this)\r
+ DrawEdge(hDC, &textrect, EDGE_BUMP, BF_RECT);\r
+ else\r
+ DrawEdge(hDC, &textrect, EDGE_ETCHED, BF_RECT);\r
+\r
+ SetTextColor(hDC, crFg);\r
+\r
+ // use the path if no title is set.\r
+ tstring * title = pictitle.empty() ? &picpath : &pictitle;\r
+\r
+ tstring realtitle = *title;\r
+ tstring imgnumstring;\r
+\r
+ if (HasMultipleImages())\r
+ {\r
+ TCHAR buf[MAX_PATH];\r
+ if (nFrames > 1)\r
+ _stprintf_s(buf, sizeof(buf)/sizeof(TCHAR), (const TCHAR *)ResString(hResource, IDS_DIMENSIONSANDFRAMES), nCurrentFrame, nFrames);\r
+ else\r
+ _stprintf_s(buf, sizeof(buf)/sizeof(TCHAR), (const TCHAR *)ResString(hResource, IDS_DIMENSIONSANDFRAMES), nCurrentDimension, nDimensions);\r
+ imgnumstring = buf;\r
+ }\r
+\r
+ SIZE stringsize;\r
+ if (GetTextExtentPoint32(hDC, realtitle.c_str(), (int)realtitle.size(), &stringsize))\r
+ {\r
+ int nStringLength = stringsize.cx;\r
+ int texttop = pSecondPic ? textrect.top + (HEADER_HEIGHT/2) - stringsize.cy : textrect.top + (HEADER_HEIGHT/2) - stringsize.cy/2;\r
+ ExtTextOut(hDC, \r
+ max(textrect.left + ((textrect.right-textrect.left)-nStringLength)/2, 1),\r
+ texttop,\r
+ ETO_CLIPPED,\r
+ &textrect,\r
+ realtitle.c_str(),\r
+ (UINT)realtitle.size(),\r
+ NULL);\r
+ if (pSecondPic)\r
+ {\r
+ realtitle = (pictitle2.empty() ? picpath2 : pictitle2);\r
+ ExtTextOut(hDC, \r
+ max(textrect.left + ((textrect.right-textrect.left)-nStringLength)/2, 1),\r
+ texttop + stringsize.cy,\r
+ ETO_CLIPPED,\r
+ &textrect,\r
+ realtitle.c_str(),\r
+ (UINT)realtitle.size(),\r
+ NULL);\r
+ }\r
+ }\r
+ if (HasMultipleImages())\r
+ {\r
+ if (GetTextExtentPoint32(hDC, imgnumstring.c_str(), (int)imgnumstring.size(), &stringsize))\r
+ {\r
+ int nStringLength = stringsize.cx;\r
+\r
+ ExtTextOut(hDC, \r
+ max(textrect.left + ((textrect.right-textrect.left)-nStringLength)/2, 1),\r
+ textrect.top + HEADER_HEIGHT + (HEADER_HEIGHT/2) - stringsize.cy/2,\r
+ ETO_CLIPPED,\r
+ &textrect,\r
+ imgnumstring.c_str(),\r
+ (UINT)imgnumstring.size(),\r
+ NULL);\r
+ }\r
+ }\r
+ SelectObject(hDC, (HGDIOBJ)hFontOld);\r
+ DeleteObject(hFont);\r
+}\r
+\r
+void CPicWindow::SetupScrollBars()\r
+{\r
+ RECT rect;\r
+ GetClientRect(&rect);\r
+\r
+ SCROLLINFO si = {sizeof(si)};\r
+\r
+ si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE | SIF_DISABLENOSCROLL;\r
+\r
+ double width = double(picture.m_Width)*picscale;\r
+ double height = double(picture.m_Height)*picscale;\r
+ if (pSecondPic)\r
+ {\r
+ width = max(width, double(pSecondPic->m_Width)*pTheOtherPic->GetZoom());\r
+ height = max(height, double(pSecondPic->m_Height)*pTheOtherPic->GetZoom());\r
+ }\r
+\r
+ bool bShowHScrollBar = (nHScrollPos > 0); // left of pic is left of window\r
+ bShowHScrollBar = bShowHScrollBar || (width-nHScrollPos > rect.right); // right of pic is outside right of window\r
+ bShowHScrollBar = bShowHScrollBar || (width+nHScrollPos > rect.right); // right of pic is outside right of window\r
+ bool bShowVScrollBar = (nVScrollPos > 0); // top of pic is above window\r
+ bShowVScrollBar = bShowVScrollBar || (height-nVScrollPos+rect.top > rect.bottom); // bottom of pic is below window\r
+ bShowVScrollBar = bShowVScrollBar || (height+nVScrollPos+rect.top > rect.bottom); // bottom of pic is below window\r
+\r
+ // if the image is smaller than the window, we don't need the scrollbars\r
+ ShowScrollBar(*this, SB_HORZ, bShowHScrollBar);\r
+ ShowScrollBar(*this, SB_VERT, bShowVScrollBar);\r
+\r
+ if (bShowVScrollBar)\r
+ {\r
+ si.nPos = nVScrollPos;\r
+ si.nPage = rect.bottom-rect.top;\r
+ if (height < rect.bottom-rect.top)\r
+ {\r
+ if (nVScrollPos > 0)\r
+ {\r
+ si.nMin = 0;\r
+ si.nMax = rect.bottom+nVScrollPos-rect.top;\r
+ }\r
+ else\r
+ {\r
+ si.nMin = nVScrollPos;\r
+ si.nMax = int(height);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (nVScrollPos > 0)\r
+ {\r
+ si.nMin = 0;\r
+ si.nMax = int(max(height, rect.bottom+nVScrollPos-rect.top));\r
+ }\r
+ else\r
+ {\r
+ si.nMin = 0;\r
+ si.nMax = int(height-nVScrollPos);\r
+ }\r
+ }\r
+ SetScrollInfo(*this, SB_VERT, &si, TRUE);\r
+ }\r
+\r
+ if (bShowHScrollBar)\r
+ {\r
+ si.nPos = nHScrollPos;\r
+ si.nPage = rect.right-rect.left;\r
+ if (width < rect.right-rect.left)\r
+ {\r
+ if (nHScrollPos > 0)\r
+ {\r
+ si.nMin = 0;\r
+ si.nMax = rect.right+nHScrollPos-rect.left;\r
+ }\r
+ else\r
+ {\r
+ si.nMin = nHScrollPos;\r
+ si.nMax = int(width);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (nHScrollPos > 0)\r
+ {\r
+ si.nMin = 0;\r
+ si.nMax = int(max(width, rect.right+nHScrollPos-rect.left));\r
+ }\r
+ else\r
+ {\r
+ si.nMin = 0;\r
+ si.nMax = int(width-nHScrollPos);\r
+ }\r
+ }\r
+ SetScrollInfo(*this, SB_HORZ, &si, TRUE);\r
+ }\r
+\r
+ PositionChildren();\r
+}\r
+\r
+void CPicWindow::OnVScroll(UINT nSBCode, UINT nPos)\r
+{\r
+ RECT rect;\r
+ GetClientRect(&rect);\r
+\r
+ switch (nSBCode)\r
+ {\r
+ case SB_BOTTOM:\r
+ nVScrollPos = LONG(double(picture.GetHeight())*picscale);;\r
+ break;\r
+ case SB_TOP:\r
+ nVScrollPos = 0;\r
+ break;\r
+ case SB_LINEDOWN:\r
+ nVScrollPos++;\r
+ break;\r
+ case SB_LINEUP:\r
+ nVScrollPos--;\r
+ break;\r
+ case SB_PAGEDOWN:\r
+ nVScrollPos += (rect.bottom-rect.top);\r
+ break;\r
+ case SB_PAGEUP:\r
+ nVScrollPos -= (rect.bottom-rect.top);\r
+ break;\r
+ case SB_THUMBPOSITION:\r
+ nVScrollPos = nPos;\r
+ break;\r
+ case SB_THUMBTRACK:\r
+ nVScrollPos = nPos;\r
+ break;\r
+ default:\r
+ return;\r
+ }\r
+ LONG height = LONG(double(picture.GetHeight())*picscale);\r
+ if (pSecondPic)\r
+ {\r
+ height = max(height, LONG(double(pSecondPic->GetHeight())*picscale));\r
+ }\r
+ SetupScrollBars();\r
+ PositionChildren();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+}\r
+\r
+void CPicWindow::OnHScroll(UINT nSBCode, UINT nPos)\r
+{\r
+ RECT rect;\r
+ GetClientRect(&rect);\r
+\r
+ switch (nSBCode)\r
+ {\r
+ case SB_RIGHT:\r
+ nHScrollPos = LONG(double(picture.GetWidth())*picscale);\r
+ break;\r
+ case SB_LEFT:\r
+ nHScrollPos = 0;\r
+ break;\r
+ case SB_LINERIGHT:\r
+ nHScrollPos++;\r
+ break;\r
+ case SB_LINELEFT:\r
+ nHScrollPos--;\r
+ break;\r
+ case SB_PAGERIGHT:\r
+ nHScrollPos += (rect.right-rect.left);\r
+ break;\r
+ case SB_PAGELEFT:\r
+ nHScrollPos -= (rect.right-rect.left);\r
+ break;\r
+ case SB_THUMBPOSITION:\r
+ nHScrollPos = nPos;\r
+ break;\r
+ case SB_THUMBTRACK:\r
+ nHScrollPos = nPos;\r
+ break;\r
+ default:\r
+ return;\r
+ }\r
+ LONG width = LONG(double(picture.GetWidth())*picscale);\r
+ if (pSecondPic)\r
+ {\r
+ width = max(width, LONG(double(pSecondPic->GetWidth())*picscale));\r
+ }\r
+ SetupScrollBars();\r
+ PositionChildren();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+}\r
+\r
+void CPicWindow::OnMouseWheel(short fwKeys, short zDelta)\r
+{\r
+ RECT rect;\r
+ GetClientRect(&rect);\r
+ LONG width = long(double(picture.m_Width)*picscale);\r
+ LONG height = long(double(picture.m_Height)*picscale);\r
+ if (pSecondPic)\r
+ {\r
+ width = max(width, long(double(pSecondPic->m_Width)*picscale));\r
+ height = max(height, long(double(pSecondPic->m_Height)*picscale));\r
+ }\r
+ if ((fwKeys & MK_SHIFT)&&(fwKeys & MK_CONTROL)&&(pSecondPic))\r
+ {\r
+ // ctrl+shift+wheel: change the alpha channel\r
+ float a = blendAlpha;\r
+ a -= float(zDelta)/120.0f/4.0f;\r
+ if (a < 0.0f)\r
+ a = 0.0f;\r
+ else if (a > 1.0f)\r
+ a = 1.0f;\r
+ SetBlendAlpha(m_blend, a);\r
+ }\r
+ else if (fwKeys & MK_SHIFT)\r
+ {\r
+ // shift means scrolling sideways\r
+ OnHScroll(SB_THUMBPOSITION, GetHPos()-zDelta);\r
+ if ((bLinkedPositions)&&(pTheOtherPic))\r
+ {\r
+ pTheOtherPic->OnHScroll(SB_THUMBPOSITION, pTheOtherPic->GetHPos()-zDelta);\r
+ }\r
+ }\r
+ else if (fwKeys & MK_CONTROL)\r
+ {\r
+ // control means adjusting the scale factor\r
+ Zoom(zDelta>0, true);\r
+ if ((!bFitSizes)&&(pTheOtherPic))\r
+ pTheOtherPic->Zoom(zDelta>0, true);\r
+ PositionChildren();\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ SetWindowPos(*this, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOREPOSITION|SWP_NOMOVE);\r
+ }\r
+ else\r
+ {\r
+ OnVScroll(SB_THUMBPOSITION, GetVPos()-zDelta);\r
+ if ((bLinkedPositions)&&(pTheOtherPic))\r
+ {\r
+ pTheOtherPic->OnVScroll(SB_THUMBPOSITION, pTheOtherPic->GetVPos()-zDelta);\r
+ }\r
+ }\r
+}\r
+\r
+void CPicWindow::GetClientRect(RECT * pRect)\r
+{\r
+ ::GetClientRect(*this, pRect);\r
+ pRect->top += HEADER_HEIGHT;\r
+ if (HasMultipleImages())\r
+ {\r
+ pRect->top += HEADER_HEIGHT;\r
+ }\r
+ if (pSecondPic)\r
+ pRect->left += SLIDER_WIDTH;\r
+}\r
+\r
+void CPicWindow::GetClientRectWithScrollbars(RECT * pRect)\r
+{\r
+ GetClientRect(pRect);\r
+ ::GetWindowRect(*this, pRect);\r
+ pRect->right = pRect->right-pRect->left;\r
+ pRect->bottom = pRect->bottom-pRect->top;\r
+ pRect->top = 0;\r
+ pRect->left = 0;\r
+ pRect->top += HEADER_HEIGHT;\r
+ if (HasMultipleImages())\r
+ {\r
+ pRect->top += HEADER_HEIGHT;\r
+ }\r
+ if (pSecondPic)\r
+ pRect->left += SLIDER_WIDTH;\r
+};\r
+\r
+\r
+void CPicWindow::SetZoom(double dZoom, bool centermouse)\r
+{\r
+ // Set the interpolation mode depending on zoom\r
+ double oldPicscale = picscale;\r
+ if (dZoom < 1.0)\r
+ { // Zoomed out, use high quality bicubic\r
+ picture.SetInterpolationMode(InterpolationModeHighQualityBicubic);\r
+ if (pSecondPic)\r
+ pSecondPic->SetInterpolationMode(InterpolationModeHighQualityBicubic);\r
+ }\r
+ else if (!((int)(dZoom*100.0)%100))\r
+ { // "Even" zoom sizes should be shown w-o any interpolation\r
+ picture.SetInterpolationMode(InterpolationModeNearestNeighbor);\r
+ if (pSecondPic)\r
+ pSecondPic->SetInterpolationMode(InterpolationModeNearestNeighbor);\r
+ }\r
+ else\r
+ { // Arbitrary zoomed in, use bilinear that is semi-smoothed\r
+ picture.SetInterpolationMode(InterpolationModeBilinear);\r
+ if (pSecondPic)\r
+ pSecondPic->SetInterpolationMode(InterpolationModeBilinear);\r
+ }\r
+ picscale = dZoom;\r
+\r
+ if ((bFitSizes)&&(bMainPic))\r
+ {\r
+ double width, height;\r
+ double zoomWidth, zoomHeight;\r
+ width = double(picture.m_Width)*dZoom;\r
+ height = double(picture.m_Height)*dZoom;\r
+ zoomWidth = width/double(pTheOtherPic->GetPic()->m_Width);\r
+ zoomHeight = height/double(pTheOtherPic->GetPic()->m_Height);\r
+ pTheOtherPic->SetZoom(min(zoomWidth, zoomHeight), centermouse);\r
+ }\r
+\r
+ // adjust the scrollbar positions according to the new zoom and the\r
+ // mouse position: if possible, keep the pixel where the mouse pointer\r
+ // is at the same position after the zoom\r
+ POINT cpos;\r
+ DWORD ptW = GetMessagePos();\r
+ cpos.x = GET_X_LPARAM(ptW);\r
+ cpos.y = GET_Y_LPARAM(ptW);\r
+ ScreenToClient(*this, &cpos);\r
+ RECT clientrect;\r
+ GetClientRect(&clientrect);\r
+ if ((PtInRect(&clientrect, cpos))&&(centermouse))\r
+ {\r
+ // the mouse pointer is over our window\r
+ nHScrollPos = int(double(nHScrollPos + cpos.x)*(dZoom/oldPicscale))-cpos.x;\r
+ nVScrollPos = int(double(nVScrollPos + cpos.y)*(dZoom/oldPicscale))-cpos.y;\r
+ }\r
+ else\r
+ {\r
+ nHScrollPos = int(double(nHScrollPos + ((clientrect.right-clientrect.left)/2))*(dZoom/oldPicscale))-((clientrect.right-clientrect.left)/2);\r
+ nVScrollPos = int(double(nVScrollPos + ((clientrect.bottom-clientrect.top)/2))*(dZoom/oldPicscale))-((clientrect.bottom-clientrect.top)/2);\r
+ }\r
+\r
+ SetupScrollBars();\r
+ PositionChildren();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+}\r
+\r
+void CPicWindow::Zoom(bool in, bool centermouse)\r
+{\r
+ double zoomFactor;\r
+\r
+ // Find correct zoom factor and quantize picscale\r
+ if (!in && picscale <= 0.2)\r
+ {\r
+ picscale = 0.1;\r
+ zoomFactor = 0;\r
+ }\r
+ else if ((in && picscale < 1.0) || (!in && picscale <= 1.0))\r
+ {\r
+ picscale = 0.1 * RoundDouble(picscale/0.1, 0); // Quantize to 0.1\r
+ zoomFactor = 0.1;\r
+ }\r
+ else if ((in && picscale < 2.0) || (!in && picscale <= 2.0))\r
+ {\r
+ picscale = 0.25 * RoundDouble(picscale/0.25, 0); // Quantize to 0.25\r
+ zoomFactor = 0.25;\r
+ }\r
+ else\r
+ {\r
+ picscale = RoundDouble(picscale,0);\r
+ zoomFactor = 1;\r
+ }\r
+\r
+ // Set zoom\r
+ if (in)\r
+ {\r
+ if ((pSecondPic)&&(!bFitSizes))\r
+ pTheOtherPic->SetZoom(pTheOtherPic->GetZoom()+zoomFactor, false);\r
+ SetZoom(picscale+zoomFactor, centermouse);\r
+ }\r
+ else\r
+ {\r
+ if ((pSecondPic)&&(!bFitSizes))\r
+ pTheOtherPic->SetZoom(pTheOtherPic->GetZoom()-zoomFactor, false);\r
+ SetZoom(picscale-zoomFactor, centermouse);\r
+ }\r
+}\r
+\r
+double CPicWindow::RoundDouble(double doValue, int nPrecision)\r
+{\r
+ static const double doBase = 10.0;\r
+ double doComplete5, doComplete5i;\r
+\r
+ doComplete5 = doValue * pow(doBase, (double) (nPrecision + 1));\r
+\r
+ if (doValue < 0.0)\r
+ {\r
+ doComplete5 -= 5.0;\r
+ }\r
+ else\r
+ {\r
+ doComplete5 += 5.0;\r
+ }\r
+\r
+ doComplete5 /= doBase;\r
+ modf(doComplete5, &doComplete5i);\r
+\r
+ return doComplete5i / pow(doBase, (double) nPrecision);\r
+}\r
+void CPicWindow::FitImageInWindow()\r
+{\r
+ RECT rect;\r
+ double dZoom = 1.0;\r
+\r
+ GetClientRectWithScrollbars(&rect);\r
+\r
+ if (rect.right-rect.left)\r
+ {\r
+ if (((rect.right - rect.left) > picture.m_Width+2)&&((rect.bottom - rect.top)> picture.m_Height+2))\r
+ {\r
+ // image is smaller than the window\r
+ dZoom = 1.0;\r
+ }\r
+ else\r
+ {\r
+ // image is bigger than the window\r
+ double xscale = double(rect.right-rect.left-2)/double(picture.m_Width);\r
+ double yscale = double(rect.bottom-rect.top-2)/double(picture.m_Height);\r
+ dZoom = min(yscale, xscale);\r
+ }\r
+ if (pSecondPic)\r
+ {\r
+ if (((rect.right - rect.left) > pSecondPic->m_Width+2)&&((rect.bottom - rect.top)> pSecondPic->m_Height+2))\r
+ {\r
+ // image is smaller than the window\r
+ pTheOtherPic->SetZoom(min(1.0, dZoom), false);\r
+ }\r
+ else\r
+ {\r
+ // image is bigger than the window\r
+ double xscale = double(rect.right-rect.left-2)/double(pSecondPic->m_Width);\r
+ double yscale = double(rect.bottom-rect.top-2)/double(pSecondPic->m_Height);\r
+ pTheOtherPic->SetZoom(min(yscale, xscale), false);\r
+ }\r
+ nHSecondScrollPos = 0;\r
+ nVSecondScrollPos = 0;\r
+ }\r
+ SetZoom(dZoom, false);\r
+ }\r
+ CenterImage();\r
+ PositionChildren();\r
+ InvalidateRect(*this, NULL, TRUE);\r
+}\r
+\r
+void CPicWindow::CenterImage()\r
+{\r
+ RECT rect;\r
+ GetClientRectWithScrollbars(&rect);\r
+ double width = (double(picture.m_Width)*picscale) + 2.0;\r
+ double height = (double(picture.m_Height)*picscale) + 2.0;\r
+ if (pSecondPic)\r
+ {\r
+ width = max(width, (double(pSecondPic->m_Width)*pTheOtherPic->GetZoom()) + 2.0);\r
+ height = max(height, (double(pSecondPic->m_Height)*pTheOtherPic->GetZoom()) + 2.0);\r
+ }\r
+\r
+ bool bPicWidthBigger = (int(width) > (rect.right-rect.left));\r
+ bool bPicHeightBigger = (int(height) > (rect.bottom-rect.top));\r
+ // set the scroll position so that the image is drawn centered in the window\r
+ // if the window is bigger than the image\r
+ if (!bPicWidthBigger)\r
+ {\r
+ nHScrollPos = -((rect.right-rect.left+4)-int(width))/2;\r
+ }\r
+ if (!bPicHeightBigger)\r
+ {\r
+ nVScrollPos = -((rect.bottom-rect.top+4)-int(height))/2;\r
+ }\r
+ SetupScrollBars();\r
+}\r
+\r
+void CPicWindow::FitSizes(bool bFit)\r
+{\r
+ bFitSizes = bFit;\r
+\r
+ if (bFitSizes)\r
+ {\r
+ nHSecondScrollPos = 0;\r
+ nVSecondScrollPos = 0;\r
+ }\r
+ SetZoom(GetZoom(), false);\r
+}\r
+\r
+void CPicWindow::ShowPicWithBorder(HDC hdc, const RECT &bounds, CPicture &pic, double scale)\r
+{\r
+ ::SetBkColor(hdc, transparentColor);\r
+ ::ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &bounds, NULL, 0, NULL);\r
+\r
+ RECT picrect;\r
+ picrect.left = bounds.left - nHScrollPos;\r
+ picrect.top = bounds.top - nVScrollPos;\r
+ if (!bLinkedPositions && (pTheOtherPic) && (&pic != &picture))\r
+ {\r
+ picrect.left = bounds.left - nHSecondScrollPos;\r
+ picrect.top = bounds.top - nVSecondScrollPos;\r
+ }\r
+ picrect.right = (picrect.left + LONG(double(pic.m_Width) * scale));\r
+ picrect.bottom = (picrect.top + LONG(double(pic.m_Height) * scale));\r
+\r
+ pic.Show(hdc, picrect);\r
+\r
+ RECT border;\r
+ border.left = picrect.left-1;\r
+ border.top = picrect.top-1;\r
+ border.right = picrect.right+1;\r
+ border.bottom = picrect.bottom+1;\r
+\r
+ HPEN hPen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_3DDKSHADOW));\r
+ HPEN hOldPen = (HPEN)SelectObject(hdc, hPen);\r
+ MoveToEx(hdc, border.left, border.top, NULL);\r
+ LineTo(hdc, border.left, border.bottom);\r
+ LineTo(hdc, border.right, border.bottom);\r
+ LineTo(hdc, border.right, border.top);\r
+ LineTo(hdc, border.left, border.top);\r
+ SelectObject(hdc, hOldPen);\r
+ DeleteObject(hPen);\r
+}\r
+\r
+void CPicWindow::Paint(HWND hwnd)\r
+{\r
+ PAINTSTRUCT ps;\r
+ HDC hdc;\r
+ RECT rect, fullrect;\r
+\r
+ GetUpdateRect(hwnd, &rect, FALSE);\r
+ if (IsRectEmpty(&rect))\r
+ return;\r
+\r
+ ::GetClientRect(*this, &fullrect);\r
+ hdc = BeginPaint(hwnd, &ps);\r
+ {\r
+ // Exclude the alpha control and button\r
+ if ((pSecondPic)&&(m_blend == BLEND_ALPHA))\r
+ ExcludeClipRect(hdc, 0, m_inforect.top-4, SLIDER_WIDTH, m_inforect.bottom+4);\r
+\r
+ CMyMemDC memDC(hdc);\r
+ if ((pSecondPic)&&(m_blend != BLEND_ALPHA))\r
+ {\r
+ // erase the place where the alpha slider would be\r
+ ::SetBkColor(memDC, transparentColor);\r
+ RECT bounds = {0, m_inforect.top-4, SLIDER_WIDTH, m_inforect.bottom+4};\r
+ ::ExtTextOut(memDC, 0, 0, ETO_OPAQUE, &bounds, NULL, 0, NULL);\r
+ }\r
+\r
+ GetClientRect(&rect);\r
+ if (bValid)\r
+ {\r
+ ShowPicWithBorder(memDC, rect, picture, picscale);\r
+ if (pSecondPic)\r
+ {\r
+ HDC secondhdc = CreateCompatibleDC(hdc);\r
+ HBITMAP hBitmap = CreateCompatibleBitmap(hdc, rect.right - rect.left, rect.bottom - rect.top);\r
+ HBITMAP hOldBitmap = (HBITMAP)SelectObject(secondhdc, hBitmap);\r
+ SetWindowOrgEx(secondhdc, rect.left, rect.top, NULL);\r
+\r
+ if ((pSecondPic)&&(m_blend != BLEND_ALPHA))\r
+ {\r
+ // erase the place where the alpha slider would be\r
+ ::SetBkColor(secondhdc, transparentColor);\r
+ RECT bounds = {0, m_inforect.top-4, SLIDER_WIDTH, m_inforect.bottom+4};\r
+ ::ExtTextOut(secondhdc, 0, 0, ETO_OPAQUE, &bounds, NULL, 0, NULL);\r
+ }\r
+ ShowPicWithBorder(secondhdc, rect, *pSecondPic, pTheOtherPic->GetZoom());\r
+\r
+ if (m_blend == BLEND_ALPHA)\r
+ {\r
+ BLENDFUNCTION blender;\r
+ blender.AlphaFormat = 0;\r
+ blender.BlendFlags = 0;\r
+ blender.BlendOp = AC_SRC_OVER;\r
+ blender.SourceConstantAlpha = (BYTE)(blendAlpha*255);\r
+ AlphaBlend(memDC, \r
+ rect.left,\r
+ rect.top,\r
+ rect.right-rect.left,\r
+ rect.bottom-rect.top,\r
+ secondhdc,\r
+ rect.left,\r
+ rect.top,\r
+ rect.right-rect.left,\r
+ rect.bottom-rect.top,\r
+ blender);\r
+ }\r
+ else if (m_blend == BLEND_XOR)\r
+ {\r
+ BitBlt(memDC, \r
+ rect.left,\r
+ rect.top,\r
+ rect.right-rect.left,\r
+ rect.bottom-rect.top,\r
+ secondhdc,\r
+ rect.left,\r
+ rect.top,\r
+ //rect.right-rect.left,\r
+ //rect.bottom-rect.top,\r
+ SRCINVERT);\r
+ InvertRect(memDC, &rect);\r
+ }\r
+ SelectObject(secondhdc, hOldBitmap);\r
+ DeleteObject(hBitmap);\r
+ DeleteDC(secondhdc);\r
+ }\r
+ int sliderwidth = 0;\r
+ if ((pSecondPic)&&(m_blend == BLEND_ALPHA))\r
+ sliderwidth = SLIDER_WIDTH;\r
+ m_inforect.left = rect.left+4+sliderwidth;\r
+ m_inforect.top = rect.top;\r
+ m_inforect.right = rect.right+sliderwidth;\r
+ m_inforect.bottom = rect.bottom;\r
+\r
+ SetBkColor(memDC, transparentColor);\r
+ if (bShowInfo)\r
+ {\r
+ TCHAR infostring[8192];\r
+ BuildInfoString(infostring, sizeof(infostring)/sizeof(TCHAR), false);\r
+ // set the font\r
+ NONCLIENTMETRICS metrics = {0};\r
+ metrics.cbSize = sizeof(NONCLIENTMETRICS);\r
+ SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &metrics, FALSE);\r
+ HFONT hFont = CreateFontIndirect(&metrics.lfStatusFont);\r
+ HFONT hFontOld = (HFONT)SelectObject(memDC, (HGDIOBJ)hFont);\r
+ // find out how big the rectangle for the text has to be\r
+ DrawText(memDC, infostring, -1, &m_inforect, DT_EDITCONTROL | DT_EXPANDTABS | DT_LEFT | DT_VCENTER | DT_CALCRECT);\r
+\r
+ // the text should be drawn with a four pixel offset to the window borders\r
+ m_inforect.top = rect.bottom - (m_inforect.bottom-m_inforect.top) - 4;\r
+ m_inforect.bottom = rect.bottom-4;\r
+\r
+ // first draw an edge rectangle\r
+ RECT edgerect;\r
+ edgerect.left = m_inforect.left-4;\r
+ edgerect.top = m_inforect.top-4;\r
+ edgerect.right = m_inforect.right+4;\r
+ edgerect.bottom = m_inforect.bottom+4;\r
+ ::ExtTextOut(memDC, 0, 0, ETO_OPAQUE, &edgerect, NULL, 0, NULL);\r
+ DrawEdge(memDC, &edgerect, EDGE_BUMP, BF_RECT | BF_SOFT);\r
+\r
+ SetTextColor(memDC, GetSysColor(COLOR_WINDOWTEXT));\r
+ DrawText(memDC, infostring, -1, &m_inforect, DT_EDITCONTROL | DT_EXPANDTABS | DT_LEFT | DT_VCENTER);\r
+ SelectObject(memDC, (HGDIOBJ)hFontOld);\r
+ DeleteObject(hFont);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ SetBkColor(memDC, ::GetSysColor(COLOR_WINDOW));\r
+ ::ExtTextOut(memDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);\r
+ SIZE stringsize;\r
+ ResString str = ResString(hResource, IDS_INVALIDIMAGEINFO);\r
+ if (GetTextExtentPoint32(memDC, str, (int)_tcslen(str), &stringsize))\r
+ {\r
+ int nStringLength = stringsize.cx;\r
+\r
+ ExtTextOut(memDC, \r
+ max(rect.left + ((rect.right-rect.left)-nStringLength)/2, 1),\r
+ rect.top + ((rect.bottom-rect.top) - stringsize.cy)/2,\r
+ ETO_CLIPPED,\r
+ &rect,\r
+ str,\r
+ (UINT)_tcslen(str),\r
+ NULL);\r
+ }\r
+ }\r
+ DrawViewTitle(memDC, &fullrect);\r
+ }\r
+ EndPaint(hwnd, &ps);\r
+}\r
+\r
+bool CPicWindow::CreateButtons()\r
+{\r
+ // Ensure that the common control DLL is loaded. \r
+ INITCOMMONCONTROLSEX icex;\r
+ icex.dwSize = sizeof(INITCOMMONCONTROLSEX);\r
+ icex.dwICC = ICC_BAR_CLASSES | ICC_WIN95_CLASSES;\r
+ InitCommonControlsEx(&icex);\r
+\r
+ hwndLeftBtn = CreateWindowEx(0, \r
+ _T("BUTTON"), \r
+ (LPCTSTR)NULL,\r
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_ICON | BS_FLAT, \r
+ 0, 0, 0, 0, \r
+ (HWND)*this,\r
+ (HMENU)LEFTBUTTON_ID,\r
+ hResource, \r
+ NULL);\r
+ if (hwndLeftBtn == INVALID_HANDLE_VALUE)\r
+ return false;\r
+ hLeft = (HICON)LoadImage(hResource, MAKEINTRESOURCE(IDI_BACKWARD), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT);\r
+ SendMessage(hwndLeftBtn, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hLeft);\r
+ hwndRightBtn = CreateWindowEx(0, \r
+ _T("BUTTON"), \r
+ (LPCTSTR)NULL,\r
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_ICON | BS_FLAT, \r
+ 0, 0, 0, 0, \r
+ *this,\r
+ (HMENU)RIGHTBUTTON_ID,\r
+ hResource, \r
+ NULL);\r
+ if (hwndRightBtn == INVALID_HANDLE_VALUE)\r
+ return false;\r
+ hRight = (HICON)LoadImage(hResource, MAKEINTRESOURCE(IDI_FORWARD), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT);\r
+ SendMessage(hwndRightBtn, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hRight);\r
+ hwndPlayBtn = CreateWindowEx(0, \r
+ _T("BUTTON"), \r
+ (LPCTSTR)NULL,\r
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_ICON | BS_FLAT, \r
+ 0, 0, 0, 0, \r
+ *this,\r
+ (HMENU)PLAYBUTTON_ID,\r
+ hResource, \r
+ NULL);\r
+ if (hwndPlayBtn == INVALID_HANDLE_VALUE)\r
+ return false;\r
+ hPlay = (HICON)LoadImage(hResource, MAKEINTRESOURCE(IDI_START), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT);\r
+ hStop = (HICON)LoadImage(hResource, MAKEINTRESOURCE(IDI_STOP), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT);\r
+ SendMessage(hwndPlayBtn, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hPlay);\r
+ hwndAlphaToggleBtn = CreateWindowEx(0, \r
+ _T("BUTTON"), \r
+ (LPCTSTR)NULL,\r
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_ICON | BS_FLAT | BS_NOTIFY | BS_PUSHLIKE, \r
+ 0, 0, 0, 0, \r
+ (HWND)*this,\r
+ (HMENU)ALPHATOGGLEBUTTON_ID,\r
+ hResource, \r
+ NULL);\r
+ if (hwndAlphaToggleBtn == INVALID_HANDLE_VALUE)\r
+ return false;\r
+ hAlphaToggle = (HICON)LoadImage(hResource, MAKEINTRESOURCE(IDI_ALPHATOGGLE), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT);\r
+ SendMessage(hwndAlphaToggleBtn, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hAlphaToggle);\r
+\r
+ return true;\r
+}\r
+\r
+void CPicWindow::PositionChildren()\r
+{\r
+ RECT rect;\r
+ ::GetClientRect(*this, &rect);\r
+ if (HasMultipleImages())\r
+ {\r
+ SetWindowPos(hwndLeftBtn, HWND_TOP, rect.left+3, rect.top + HEADER_HEIGHT + (HEADER_HEIGHT-16)/2, 16, 16, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ SetWindowPos(hwndRightBtn, HWND_TOP, rect.left+23, rect.top + HEADER_HEIGHT + (HEADER_HEIGHT-16)/2, 16, 16, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ if (nFrames > 1)\r
+ SetWindowPos(hwndPlayBtn, HWND_TOP, rect.left+43, rect.top + HEADER_HEIGHT + (HEADER_HEIGHT-16)/2, 16, 16, SWP_FRAMECHANGED|SWP_SHOWWINDOW);\r
+ else\r
+ ShowWindow(hwndPlayBtn, SW_HIDE);\r
+ }\r
+ else\r
+ {\r
+ ShowWindow(hwndLeftBtn, SW_HIDE);\r
+ ShowWindow(hwndRightBtn, SW_HIDE);\r
+ ShowWindow(hwndPlayBtn, SW_HIDE);\r
+ }\r
+ PositionTrackBar();\r
+}\r
+\r
+bool CPicWindow::HasMultipleImages()\r
+{\r
+ return (((nDimensions > 1)||(nFrames > 1))&&(pSecondPic == NULL));\r
+}\r
+\r
+void CPicWindow::CreateTrackbar(HWND hwndParent)\r
+{ \r
+ HWND hwndTrack = CreateWindowEx( \r
+ 0, // no extended styles \r
+ TRACKBAR_CLASS, // class name \r
+ _T("Trackbar Control"), // title (caption) \r
+ WS_CHILD | WS_VISIBLE | TBS_VERT | TBS_TOOLTIPS | TBS_AUTOTICKS, // style \r
+ 10, 10, // position \r
+ 200, 30, // size \r
+ hwndParent, // parent window \r
+ (HMENU)TRACKBAR_ID, // control identifier \r
+ hInst, // instance \r
+ NULL // no WM_CREATE parameter \r
+ );\r
+\r
+ SendMessage(hwndTrack, TBM_SETRANGE, \r
+ (WPARAM) TRUE, // redraw flag \r
+ (LPARAM) MAKELONG(0, 16)); // min. & max. positions \r
+ SendMessage(hwndTrack, TBM_SETTIPSIDE, \r
+ (WPARAM) TBTS_TOP,\r
+ (LPARAM) 0);\r
+\r
+ m_AlphaSlider.ConvertTrackbarToNice(hwndTrack);\r
+}\r
+\r
+void CPicWindow::BuildInfoString(TCHAR * buf, int size, bool bTooltip)\r
+{\r
+ // Unfortunately, we need two different strings for the tooltip\r
+ // and the info box. Because the tooltips use a different tab size\r
+ // than ExtTextOut(), and to keep the output aligned we therefore\r
+ // need two different strings.\r
+ // Note: some translations could end up with two identical strings, but\r
+ // in English we need two - even if we wouldn't need two in English, some\r
+ // translation might then need two again.\r
+ if (pSecondPic)\r
+ {\r
+ _stprintf_s(buf, size, \r
+ (TCHAR const *)ResString(hResource, bTooltip ? IDS_DUALIMAGEINFOTT : IDS_DUALIMAGEINFO),\r
+ picture.GetFileSizeAsText().c_str(), picture.GetFileSizeAsText(false).c_str(),\r
+ picture.m_Width, picture.m_Height,\r
+ picture.GetHorizontalResolution(), picture.GetVerticalResolution(),\r
+ picture.m_ColorDepth,\r
+ (UINT)(GetZoom()*100.0),\r
+ pSecondPic->GetFileSizeAsText().c_str(), pSecondPic->GetFileSizeAsText(false).c_str(),\r
+ pSecondPic->m_Width, pSecondPic->m_Height,\r
+ pSecondPic->GetHorizontalResolution(), pSecondPic->GetVerticalResolution(),\r
+ pSecondPic->m_ColorDepth,\r
+ (UINT)(pTheOtherPic->GetZoom()*100.0));\r
+ }\r
+ else\r
+ {\r
+ _stprintf_s(buf, size, \r
+ (TCHAR const *)ResString(hResource, bTooltip ? IDS_IMAGEINFOTT : IDS_IMAGEINFO),\r
+ picture.GetFileSizeAsText().c_str(), picture.GetFileSizeAsText(false).c_str(),\r
+ picture.m_Width, picture.m_Height,\r
+ picture.GetHorizontalResolution(), picture.GetVerticalResolution(),\r
+ picture.m_ColorDepth,\r
+ (UINT)(GetZoom()*100.0));\r
+ }\r
+}\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006-2009 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#pragma once\r
+#include "commctrl.h"\r
+#include "BaseWindow.h"\r
+#include "TortoiseIDiff.h"\r
+#include "Picture.h"\r
+#include "NiceTrackbar.h"\r
+\r
+#define HEADER_HEIGHT 30\r
+\r
+#define ID_ANIMATIONTIMER 100\r
+#define TIMER_ALPHASLIDER 101\r
+#define ID_ALPHATOGGLETIMER 102\r
+\r
+#define LEFTBUTTON_ID 101\r
+#define RIGHTBUTTON_ID 102\r
+#define PLAYBUTTON_ID 103\r
+#define ALPHATOGGLEBUTTON_ID 104\r
+#define BLENDALPHA_ID 105\r
+#define BLENDXOR_ID 106\r
+\r
+#define TRACKBAR_ID 101\r
+#define SLIDER_HEIGHT 30\r
+#define SLIDER_WIDTH 30\r
+\r
+\r
+#ifndef GET_X_LPARAM\r
+#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))\r
+#endif\r
+#ifndef GET_Y_LPARAM\r
+#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))\r
+#endif\r
+\r
+/**\r
+ * \ingroup TortoiseIDiff\r
+ * The image view window.\r
+ * Shows an image and provides methods to scale the image or alpha blend it\r
+ * over another image.\r
+ */\r
+class CPicWindow : public CWindow\r
+{\r
+public:\r
+ CPicWindow(HINSTANCE hInst, const WNDCLASSEX* wcx = NULL) : CWindow(hInst, wcx)\r
+ , bValid(false)\r
+ , nHScrollPos(0)\r
+ , nVScrollPos(0)\r
+ , picscale(1.0)\r
+ , transparentColor(::GetSysColor(COLOR_WINDOW))\r
+ , pSecondPic(NULL)\r
+ , blendAlpha(0.5f)\r
+ , bShowInfo(false)\r
+ , nDimensions(0)\r
+ , nCurrentDimension(1)\r
+ , nFrames(0)\r
+ , nCurrentFrame(1)\r
+ , bPlaying(false)\r
+ , pTheOtherPic(NULL)\r
+ , bLinkedPositions(true)\r
+ , bFitSizes(false)\r
+ , m_blend(BLEND_ALPHA)\r
+ , bMainPic(false)\r
+ { \r
+ SetWindowTitle(_T("Picture Window"));\r
+ m_lastTTPos.x = 0;\r
+ m_lastTTPos.y = 0;\r
+ };\r
+\r
+ enum BlendType\r
+ {\r
+ BLEND_ALPHA,\r
+ BLEND_XOR,\r
+ };\r
+ /// Registers the window class and creates the window\r
+ bool RegisterAndCreateWindow(HWND hParent);\r
+\r
+ /// Sets the image path and title to show\r
+ void SetPic(tstring path, tstring title, bool bFirst);\r
+ /// Returns the CPicture image object. Used to get an already loaded image\r
+ /// object without having to load it again.\r
+ CPicture * GetPic() {return &picture;}\r
+ /// Sets the path and title of the second image which is alpha blended over the original\r
+ void SetSecondPic(CPicture * pPicture = NULL, const tstring& sectit = _T(""), const tstring& secpath = _T(""), int hpos = 0, int vpos = 0)\r
+ {\r
+ pSecondPic = pPicture;\r
+ pictitle2 = sectit;\r
+ picpath2 = secpath;\r
+ nVSecondScrollPos = vpos;\r
+ nHSecondScrollPos = hpos;\r
+ }\r
+\r
+ void StopTimer() {KillTimer(*this, ID_ANIMATIONTIMER);}\r
+ \r
+ /// Returns the currently used alpha blending value (0.0-1.0)\r
+ float GetBlendAlpha() const { return blendAlpha; }\r
+ /// Sets the alpha blending value\r
+ void SetBlendAlpha(BlendType type, float a) \r
+ {\r
+ m_blend = type;\r
+ blendAlpha = a;\r
+ if (m_AlphaSlider.IsValid())\r
+ SendMessage(m_AlphaSlider.GetWindow(), TBM_SETPOS, (WPARAM)1, (LPARAM)(a*16.0f));\r
+ PositionTrackBar();\r
+ InvalidateRect(*this, NULL, FALSE);\r
+ }\r
+ /// Toggle the alpha blending value\r
+ void ToggleAlpha()\r
+ {\r
+ if( 0.0f != GetBlendAlpha() )\r
+ SetBlendAlpha(m_blend, 0.0f);\r
+ else\r
+ SetBlendAlpha(m_blend, 1.0f);\r
+ }\r
+\r
+ /// Set the color that this PicWindow will display behind transparent images.\r
+ void SetTransparentColor(COLORREF back) { transparentColor = back; InvalidateRect(*this, NULL, false); }\r
+\r
+ /// Resizes the image to fit into the window. Small images are not enlarged.\r
+ void FitImageInWindow();\r
+ /// center the image in the view\r
+ void CenterImage();\r
+ /// Makes both images the same size, fitting into the window\r
+ void FitSizes(bool bFit);\r
+ /// Sets the zoom factor of the image\r
+ void SetZoom(double dZoom, bool centermouse);\r
+ /// Returns the currently used zoom factor in which the image is shown.\r
+ double GetZoom() {return picscale;}\r
+ /// Zooms in (true) or out (false) in nice steps\r
+ void Zoom(bool in, bool centermouse);\r
+ /// Sets the 'Other' pic window\r
+ void SetOtherPicWindow(CPicWindow * pWnd) {pTheOtherPic = pWnd;}\r
+ /// Links/Unlinks the two pic windows\r
+ void LinkPositions(bool bLink) {bLinkedPositions = bLink;}\r
+\r
+ void ShowInfo(bool bShow = true) {bShowInfo = bShow; InvalidateRect(*this, NULL, false);}\r
+ /// Sets up the scrollbars as needed\r
+ void SetupScrollBars();\r
+\r
+ bool HasMultipleImages();\r
+\r
+ int GetHPos() {return nHScrollPos;}\r
+ int GetVPos() {return nVScrollPos;}\r
+ void SetZoomValue(double z) {picscale = z; InvalidateRect(*this, NULL, FALSE);}\r
+\r
+ /// Handles the mouse wheel\r
+ void OnMouseWheel(short fwKeys, short zDelta);\r
+protected:\r
+ /// the message handler for this window\r
+ LRESULT CALLBACK WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);\r
+ /// Draws the view title bar\r
+ void DrawViewTitle(HDC hDC, RECT * rect);\r
+ /// Creates the image buttons\r
+ bool CreateButtons();\r
+ /// Handles vertical scrolling\r
+ void OnVScroll(UINT nSBCode, UINT nPos);\r
+ /// Handles horizontal scrolling\r
+ void OnHScroll(UINT nSBCode, UINT nPos);\r
+ /// Returns the client rectangle, without the scrollbars and the view title.\r
+ /// Basically the rectangle the image can use.\r
+ void GetClientRect(RECT * pRect);\r
+ /// Returns the client rectangle, without the view title but with the scrollbars\r
+ void GetClientRectWithScrollbars(RECT * pRect);\r
+ /// the WM_PAINT function\r
+ void Paint(HWND hwnd);\r
+ /// Draw pic to hdc, with a border, scaled by scale.\r
+ void ShowPicWithBorder(HDC hdc, const RECT &bounds, CPicture &pic, double scale);\r
+ /// Positions the buttons\r
+ void PositionChildren();\r
+ /// Rounds a double to a given precision\r
+ double RoundDouble(double doValue, int nPrecision);\r
+ /// advance to the next image in the file\r
+ void NextImage();\r
+ /// go back to the previous image in the file\r
+ void PrevImage();\r
+ /// starts/stops the animation\r
+ void Animate(bool bStart);\r
+ /// Creates the trackbar (the alpha blending slider control)\r
+ void CreateTrackbar(HWND hwndParent);\r
+ /// Moves the alpha slider trackbar to the correct position\r
+ void PositionTrackBar();\r
+ /// creates the info string used in the info box and the tooltips\r
+ void BuildInfoString(TCHAR * buf, int size, bool bTooltip);\r
+\r
+ tstring picpath; ///< the path to the image we show\r
+ tstring pictitle; ///< the string to show in the image view as a title\r
+ CPicture picture; ///< the picture object of the image\r
+ bool bValid; ///< true if the picture object is valid, i.e. if the image could be loaded and can be shown\r
+ double picscale; ///< the scale factor of the image\r
+ COLORREF transparentColor; ///< the color to draw under the images\r
+ bool bFirstpaint; ///< true if the image is painted the first time. Used to initialize some stuff when the window is valid for sure.\r
+ CPicture * pSecondPic; ///< if set, this is the picture to draw transparently above the original\r
+ CPicWindow * pTheOtherPic; ///< pointer to the other picture window. Used for "linking" the two windows when scrolling/zooming/...\r
+ bool bMainPic; ///< if true, this is the first image\r
+ bool bLinkedPositions; ///< if true, the two image windows are linked together for scrolling/zooming/...\r
+ bool bFitSizes; ///< if true, the two image windows are always zoomed so they match their size\r
+ BlendType m_blend; ///< type of blending to use\r
+ tstring pictitle2; ///< the title of the second picture\r
+ tstring picpath2; ///< the path of the second picture\r
+ float blendAlpha; ///<the alpha value for transparency blending\r
+ bool bShowInfo; ///< true if the info rectangle of the image should be shown\r
+ TCHAR m_wszTip[8192];\r
+ char m_szTip[8192];\r
+ POINT m_lastTTPos;\r
+ HWND hwndTT;\r
+ // scrollbar info\r
+ int nVScrollPos; ///< vertical scroll position\r
+ int nHScrollPos; ///< horizontal scroll position\r
+ int nVSecondScrollPos; ///< vertical scroll position of second pic at the moment of enabling overlap mode\r
+ int nHSecondScrollPos; ///< horizontal scroll position of second pic at the moment of enabling overlap mode\r
+ POINT ptPanStart; ///< the point of the last mouse click\r
+ int startVScrollPos; ///< the vertical scroll position when panning starts\r
+ int startHScrollPos; ///< the horizontal scroll position when panning starts\r
+ int startVSecondScrollPos; ///< the vertical scroll position of the second pic when panning starts\r
+ int startHSecondScrollPos; ///< the horizontal scroll position of the second pic when panning starts\r
+ // image frames/dimensions\r
+ UINT nDimensions;\r
+ UINT nCurrentDimension;\r
+ UINT nFrames;\r
+ UINT nCurrentFrame;\r
+\r
+ // controls\r
+ HWND hwndLeftBtn;\r
+ HWND hwndRightBtn;\r
+ HWND hwndPlayBtn;\r
+ CNiceTrackbar m_AlphaSlider;\r
+ HWND hwndAlphaToggleBtn;\r
+ HICON hLeft;\r
+ HICON hRight;\r
+ HICON hPlay;\r
+ HICON hStop;\r
+ HICON hAlphaToggle;\r
+ bool bPlaying;\r
+ RECT m_inforect;\r
+};\r
+\r
+\r
+\r
+\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006 - 2007 - Stefan Kueng\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#include "stdafx.h"\r
+#include "MainWindow.h"\r
+#include "CmdLineParser.h"\r
+#include "registry.h"\r
+#include "LangDll.h"\r
+#include "TortoiseIDiff.h"\r
+\r
+#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")\r
+\r
+// Global Variables:\r
+HINSTANCE hInst; // current instance\r
+HINSTANCE hResource; // the resource dll\r
+HCURSOR curHand;\r
+HCURSOR curHandDown;\r
+\r
+int APIENTRY _tWinMain(HINSTANCE hInstance,\r
+ HINSTANCE hPrevInstance,\r
+ LPTSTR lpCmdLine,\r
+ int nCmdShow)\r
+{\r
+ UNREFERENCED_PARAMETER(hPrevInstance);\r
+\r
+ CRegStdDWORD loc = CRegStdDWORD(_T("Software\\TortoiseSVN\\LanguageID"), 1033);\r
+ long langId = loc;\r
+\r
+ CLangDll langDLL;\r
+ hResource = langDLL.Init(_T("TortoiseIDiff"), langId);\r
+ if (hResource == NULL)\r
+ hResource = hInstance;\r
+\r
+ CCmdLineParser parser(lpCmdLine);\r
+\r
+ if (parser.HasKey(_T("?")) || parser.HasKey(_T("help")))\r
+ {\r
+ TCHAR buf[1024];\r
+ LoadString(hResource, IDS_COMMANDLINEHELP, buf, sizeof(buf)/sizeof(TCHAR));\r
+ MessageBox(NULL, buf, _T("TortoiseIDiff"), MB_ICONINFORMATION);\r
+ langDLL.Close();\r
+ return 0;\r
+ }\r
+\r
+\r
+ MSG msg;\r
+ HACCEL hAccelTable;\r
+\r
+ hInst = hInstance;\r
+\r
+ INITCOMMONCONTROLSEX used = {\r
+ sizeof(INITCOMMONCONTROLSEX),\r
+ ICC_STANDARD_CLASSES | ICC_BAR_CLASSES | ICC_WIN95_CLASSES\r
+ };\r
+ InitCommonControlsEx(&used);\r
+\r
+ // load the cursors we need\r
+ curHand = (HCURSOR)LoadImage(hInst, MAKEINTRESOURCE(IDC_PANCUR), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE);\r
+ curHandDown = (HCURSOR)LoadImage(hInst, MAKEINTRESOURCE(IDC_PANDOWNCUR), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE);\r
+\r
+ CMainWindow mainWindow(hResource);\r
+\r
+\r
+ mainWindow.SetLeft(parser.HasVal(_T("left")) ? parser.GetVal(_T("left")) : _T(""), parser.HasVal(_T("lefttitle")) ? parser.GetVal(_T("lefttitle")) : _T(""));\r
+ mainWindow.SetRight(parser.HasVal(_T("right")) ? parser.GetVal(_T("right")) : _T(""), parser.HasVal(_T("righttitle")) ? parser.GetVal(_T("righttitle")) : _T(""));\r
+ if (mainWindow.RegisterAndCreateWindow())\r
+ {\r
+ hAccelTable = LoadAccelerators(hResource, MAKEINTRESOURCE(IDR_TORTOISEIDIFF));\r
+ if (!parser.HasVal(_T("left")))\r
+ {\r
+ PostMessage(mainWindow, WM_COMMAND, ID_FILE_OPEN, 0);\r
+ }\r
+ if (parser.HasKey(_T("overlay")))\r
+ {\r
+ PostMessage(mainWindow, WM_COMMAND, ID_VIEW_OVERLAPIMAGES, 0);\r
+ }\r
+ if (parser.HasKey(_T("fit")))\r
+ {\r
+ PostMessage(mainWindow, WM_COMMAND, ID_VIEW_FITTOGETHER, 0);\r
+ }\r
+ if (parser.HasKey(_T("showinfo")))\r
+ {\r
+ PostMessage(mainWindow, WM_COMMAND, ID_VIEW_IMAGEINFO, 0);\r
+ }\r
+ // Main message loop:\r
+ while (GetMessage(&msg, NULL, 0, 0))\r
+ {\r
+ if (!TranslateAccelerator(mainWindow, hAccelTable, &msg))\r
+ {\r
+ TranslateMessage(&msg);\r
+ DispatchMessage(&msg);\r
+ }\r
+ }\r
+ return (int) msg.wParam;\r
+ }\r
+ langDLL.Close();\r
+ DestroyCursor(curHand);\r
+ DestroyCursor(curHandDown);\r
+ return 1;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+// TortoiseIDiff - an image diff viewer in TortoiseSVN\r
+\r
+// Copyright (C) 2006 - Stefan Kueng\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#pragma once\r
+\r
+#include "resource.h"\r
+\r
+extern HINSTANCE hInst;\r
+extern HINSTANCE hResource;\r
+extern HCURSOR curHand;\r
+extern HCURSOR curHandDown;\r
--- /dev/null
+// Microsoft Visual C++ generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#define APSTUDIO_HIDDEN_SYMBOLS\r
+#include "windows.h"\r
+#undef APSTUDIO_HIDDEN_SYMBOLS\r
+#ifndef APSTUDIO_INVOKED\r
+#include "TortoiseIDiff.rc2"\r
+#endif\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Neutral resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_TORTOISEIDIFF ICON "TortoiseIDiff.ico"\r
+IDI_OVERLAP ICON "overlap.ico"\r
+IDI_FITINWINDOW ICON "fitinwindow.ico"\r
+IDI_ORIGSIZE ICON "origsize.ico"\r
+IDI_ZOOMIN ICON "zoomin.ico"\r
+IDI_ZOOMOUT ICON "zoomout.ico"\r
+IDI_IMGINFO ICON "imginfo.ico"\r
+IDI_FORWARD ICON "player_fwd.ico"\r
+IDI_BACKWARD ICON "player_rew.ico"\r
+IDI_START ICON "player_start.ico"\r
+IDI_STOP ICON "player_stop.ico"\r
+IDI_VERTICAL ICON "vertical.ico"\r
+IDI_LINK ICON "link.ico"\r
+IDI_ALPHATOGGLE ICON "alphatoggle.ico"\r
+IDI_FITTOGETHER ICON "fittogether.ico"\r
+IDI_BLEND ICON "blend.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Cursor\r
+//\r
+\r
+IDC_PANCUR CURSOR "..\\Resources\\pan.cur"\r
+IDC_PANDOWNCUR CURSOR "..\\Resources\\pandown.cur"\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE \r
+BEGIN\r
+ "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE \r
+BEGIN\r
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
+ "#include ""windows.h""\r\n"\r
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
+ "#ifndef APSTUDIO_INVOKED\r\n"\r
+ "#include ""TortoiseIDiff.rc2""\r\n"\r
+ "#endif\0"\r
+END\r
+\r
+3 TEXTINCLUDE \r
+BEGIN\r
+ "\r\n"\r
+ "\0"\r
+END\r
+\r
+#endif // APSTUDIO_INVOKED\r
+\r
+#endif // Neutral resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDC_TORTOISEIDIFF MENU \r
+BEGIN\r
+ POPUP "&File"\r
+ BEGIN\r
+ MENUITEM "&Open", ID_FILE_OPEN\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "E&xit", IDM_EXIT\r
+ END\r
+ POPUP "&View"\r
+ BEGIN\r
+ MENUITEM "&Overlay images", ID_VIEW_OVERLAPIMAGES\r
+ MENUITEM "Blend Alpha", ID_VIEW_BLENDALPHA\r
+ MENUITEM "&Link image positions", ID_VIEW_LINKIMAGESTOGETHER, CHECKED\r
+ MENUITEM "Fit image &sizes", ID_VIEW_FITTOGETHER\r
+ MENUITEM "&Fit Images in window", ID_VIEW_FITIMAGESINWINDOW\r
+ MENUITEM "Ori&ginal size", ID_VIEW_ORININALSIZE\r
+ MENUITEM "Transparent &color...", ID_VIEW_TRANSPARENTCOLOR\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "Zoo&m out", ID_VIEW_ZOOMOUT\r
+ MENUITEM "Zoom i&n", ID_VIEW_ZOOMIN\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "&Image Info", ID_VIEW_IMAGEINFO\r
+ MENUITEM "Arrange &Vertical", ID_VIEW_ARRANGEVERTICAL\r
+ END\r
+ MENUITEM "?", ID_ABOUT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_OPEN DIALOGEX 0, 0, 286, 78\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Load Images"\r
+FONT 8, "MS Shell Dlg", 400, 0, 0x1\r
+BEGIN\r
+ LTEXT "Left image",IDC_STATIC,7,9,59,8\r
+ EDITTEXT IDC_LEFTIMAGE,66,7,187,14,ES_AUTOHSCROLL\r
+ PUSHBUTTON "...",IDC_LEFTBROWSE,258,7,21,14\r
+ LTEXT "Right image",IDC_STATIC,7,33,59,8\r
+ EDITTEXT IDC_RIGHTIMAGE,66,31,187,14,ES_AUTOHSCROLL\r
+ PUSHBUTTON "...",IDC_RIGHTBROWSE,258,31,21,14\r
+ DEFPUSHBUTTON "OK",IDOK,169,57,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,229,57,50,14\r
+END\r
+\r
+IDD_ABOUT DIALOGEX 0, 0, 258, 86\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "TortoiseIDiff"\r
+FONT 8, "MS Shell Dlg", 400, 0, 0x1\r
+BEGIN\r
+ DEFPUSHBUTTON "OK",IDOK,201,65,50,14\r
+ ICON IDI_TORTOISEIDIFF,IDC_STATIC,15,15,21,20\r
+ LTEXT "TortoiseIDiff - An image diff tool, part of TortoiseSVN",IDC_STATIC,53,15,198,21\r
+ LTEXT "Version",IDC_ABOUTVERSION,53,42,198,8\r
+ LTEXT "http://tortoisesvn.net",IDC_WEBLINK,53,71,140,8\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO \r
+BEGIN\r
+ IDD_OPEN, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 279\r
+ VERTGUIDE, 66\r
+ VERTGUIDE, 253\r
+ VERTGUIDE, 258\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 71\r
+ END\r
+\r
+ IDD_ABOUT, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 251\r
+ VERTGUIDE, 53\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 79\r
+ END\r
+END\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDR_TORTOISEIDIFF ACCELERATORS \r
+BEGIN\r
+ "O", ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT\r
+ VK_UP, ID_VIEW_ALPHA0, VIRTKEY, NOINVERT\r
+ VK_LEFT, ID_VIEW_ALPHA127, VIRTKEY, NOINVERT\r
+ VK_RIGHT, ID_VIEW_ALPHA127, VIRTKEY, NOINVERT\r
+ VK_DOWN, ID_VIEW_ALPHA255, VIRTKEY, NOINVERT\r
+ VK_SPACE, ID_VIEW_ALPHATOGGLE, VIRTKEY, NOINVERT\r
+ "V", ID_VIEW_ARRANGEVERTICAL, VIRTKEY, CONTROL, NOINVERT\r
+ "F", ID_VIEW_FITIMAGESINWINDOW, VIRTKEY, NOINVERT\r
+ "b", ID_VIEW_BACKGROUNDCOLOR, ASCII, NOINVERT\r
+ "i", ID_VIEW_IMAGEINFO, ASCII, NOINVERT\r
+ "S", ID_VIEW_ORININALSIZE, VIRTKEY, NOINVERT\r
+ "O", ID_VIEW_OVERLAPIMAGES, VIRTKEY, NOINVERT\r
+ "+", ID_VIEW_ZOOMIN, ASCII, NOINVERT\r
+ VK_OEM_MINUS, ID_VIEW_ZOOMOUT, VIRTKEY, NOINVERT\r
+ VK_SUBTRACT, ID_VIEW_ZOOMOUT, VIRTKEY, NOINVERT\r
+ VK_ESCAPE, IDM_EXIT, VIRTKEY, NOINVERT\r
+ "T", ID_VIEW_FITTOGETHER, VIRTKEY, NOINVERT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE \r
+BEGIN\r
+ IDS_VERSION "Version %d.%d.%d.%d"\r
+ IDS_APP_TITLE "TortoiseIDiff"\r
+ IDS_COMMANDLINEHELP "TortoiseIDiff: the image diff viewer for TortoiseSVN\n\nAvailable command line parameters are:\n/left:""path to left picture""\n/lefttitle:""title to show for the left picture""\n/right:""path to right picture""\n/righttitle:""title to show for the right picture""\n/overlay\t\tto enable overlay mode\n/fit\t\tto fit the images sizes\n/showinfo\t\tto show the image info boxes"\r
+ IDS_OPENIMAGEFILE "Open image file..."\r
+ IDS_INVALIDIMAGEINFO "The image can not be shown."\r
+ IDS_IMAGEINFO "File size:\t\t\t%s (%s)\nWidth:\t\t\t%ld pixel\nHeight:\t\t\t%ld pixel\nHorizontal Resolution:\t%.1f dpi\nVertical Resolution:\t\t%.1f dpi\nDepth:\t\t\t%d bit\nZoom:\t\t\t%d%%"\r
+ IDS_DUALIMAGEINFO "File size:\t\t\t%s (%s)\nWidth:\t\t\t%ld pixel\nHeight:\t\t\t%ld pixel\nHorizontal Resolution:\t%.1f dpi\nVertical Resolution:\t\t%.1f dpi\nDepth:\t\t\t%d bit\nZoom:\t\t\t%d%%\n\nFile size:\t\t\t%s (%s)\nWidth:\t\t\t%ld pixel\nHeight:\t\t\t%ld pixel\nHorizontal Resolution:\t%.1f dpi\nVertical Resolution:\t\t%.1f dpi\nDepth:\t\t\t%d bit\nZoom:\t\t\t%d%%"\r
+ IDC_TORTOISEIDIFF "TORTOISEIDIFF"\r
+ IDS_DIMENSIONSANDFRAMES "%ld of %ld"\r
+ IDS_IMAGEINFOTT "File size:\t\t%s (%s)\nWidth:\t\t\t%ld pixel\nHeight:\t\t\t%ld pixel\nHorizontal Resolution:\t%.1f dpi\nVertical Resolution:\t%.1f dpi\nDepth:\t\t\t%d bit\nZoom:\t\t\t%d%%"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+ IDS_DUALIMAGEINFOTT "File size:\t\t%s (%s)\nWidth:\t\t\t%ld pixel\nHeight:\t\t\t%ld pixel\nHorizontal Resolution:\t%.1f dpi\nVertical Resolution:\t%.1f dpi\nDepth:\t\t\t%d bit\nZoom:\t\t\t%d%%\n\nFile size:\t\t%s (%s)\nWidth:\t\t\t%ld pixel\nHeight:\t\t\t%ld pixel\nHorizontal Resolution:\t%.1f dpi\nVertical Resolution:\t%.1f dpi\nDepth:\t\t\t%d bit\nZoom:\t\t\t%d%%"\r
+END\r
+\r
+#endif // English (U.S.) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif // not APSTUDIO_INVOKED\r
+\r
--- /dev/null
+//\r
+// TortoiseIDiff.RC2 - resources Microsoft Visual C++ does not edit directly\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+#error this file is not editable by Microsoft Visual C++\r
+#endif //APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Add manually edited resources here...\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+#include "..\version.h"\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION FILEVER\r
+ PRODUCTVERSION PRODUCTVER\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x4L\r
+ FILETYPE VFT_APP\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+ BLOCK "StringFileInfo"\r
+ BEGIN\r
+ BLOCK "040004e4"\r
+ BEGIN\r
+ VALUE "CompanyName", "http://tortoisesvn.net\0"\r
+ VALUE "FileDescription", "TortoiseIDiff\0"\r
+ VALUE "FileVersion", STRFILEVER\r
+ VALUE "InternalName", "TortoiseIDiff.exe\0"\r
+ VALUE "LegalCopyright", "Copyright (C) 2006-2008 - TortoiseSVN\0"\r
+ VALUE "OriginalFilename", "TortoiseIDiff.exe\0"\r
+ VALUE "ProductName", "TortoiseIDiff\0"\r
+ VALUE "ProductVersion", STRPRODUCTVER\r
+ END\r
+ END\r
+ BLOCK "VarFileInfo"\r
+ BEGIN\r
+ VALUE "Translation", 0x400, 1252\r
+ END\r
+END\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="9.00"\r
+ Name="TortoiseIDiff"\r
+ ProjectGUID="{6D95829D-AE04-47A7-B66B-DC2F581DDF01}"\r
+ RootNamespace="TortoiseIDiff"\r
+ Keyword="Win32Proj"\r
+ TargetFrameworkVersion="131072"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="..\..\bin\Debug\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiff\Debug"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="3"\r
+ RuntimeLibrary="3"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="2"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="..\..\bin\Debug64\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiff\Debug64"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="3"\r
+ RuntimeLibrary="3"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="2"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="..\..\bin\Release\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiff\Release"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="1"\r
+ FavorSizeOrSpeed="2"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"\r
+ StringPooling="true"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="true"\r
+ EnableEnhancedInstructionSet="0"\r
+ RuntimeTypeInfo="true"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="1"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="..\..\bin\Release64\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiff\Release64"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="1"\r
+ FavorSizeOrSpeed="2"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"\r
+ RuntimeLibrary="2"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="1"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="release_static|Win32"\r
+ OutputDirectory="..\..\bin\ReleaseStatic\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiff\ReleaseStatic"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="1"\r
+ FavorSizeOrSpeed="2"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"\r
+ StringPooling="true"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="true"\r
+ EnableEnhancedInstructionSet="0"\r
+ RuntimeTypeInfo="true"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="1"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="release_static|x64"\r
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="1"\r
+ FavorSizeOrSpeed="2"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"\r
+ RuntimeLibrary="2"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="1"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="debug_static|Win32"\r
+ OutputDirectory="..\..\bin\DebugStatic\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiff\DebugStatic"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="1"\r
+ FavorSizeOrSpeed="2"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"\r
+ StringPooling="true"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="true"\r
+ EnableEnhancedInstructionSet="0"\r
+ RuntimeTypeInfo="true"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="1"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="debug_static|x64"\r
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="1"\r
+ FavorSizeOrSpeed="2"\r
+ AdditionalIncludeDirectories="..\Utils;..\Utils\MiscUI"\r
+ PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"\r
+ RuntimeLibrary="2"\r
+ UsePrecompiledHeader="2"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="gdiplus.lib"\r
+ LinkIncremental="1"\r
+ DelayLoadDLLs="gdiplus.dll"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+ >\r
+ <File\r
+ RelativePath=".\AboutDlg.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\BaseDialog.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\BaseWindow.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\CmdLineParser.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\hyperlink_base.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\LangDll.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\MainWindow.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\NiceTrackbar.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\Picture.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\PicWindow.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\Registry.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\stdafx.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="release_static|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="release_static|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="debug_static|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="debug_static|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="1"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath=".\TortoiseIDiff.cpp"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+ >\r
+ <File\r
+ RelativePath=".\AboutDlg.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\BaseDialog.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\BaseWindow.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\CmdLineParser.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\hyperlink_base.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\LangDll.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\MainWindow.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\MemDC.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\NiceTrackbar.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\MiscUI\Picture.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\PicWindow.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Utils\registry.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\Resource.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\stdafx.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\TortoiseIDiff.h"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+ >\r
+ <File\r
+ RelativePath=".\alphatoggle.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\blend.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\fitinwindow.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\fittogether.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\imginfo.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\link.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\origsize.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\overlap.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Resources\pan.cur"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\Resources\pandown.cur"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\player_fwd.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\player_rew.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\player_start.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\player_stop.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\TortoiseIDiff.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\TortoiseIDiff.rc"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\vertical.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\zoomin.ico"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\zoomout.ico"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="9.00"\r
+ Name="TortoiseIDiffLang"\r
+ ProjectGUID="{56016512-D578-46FD-85E0-9EDCD37433AC}"\r
+ RootNamespace="TortoiseProcLang"\r
+ Keyword="Win32Proj"\r
+ TargetFrameworkVersion="131072"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="..\..\bin\Release\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiffLang\Release"\r
+ ConfigurationType="2"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TORTOISELANG_EXPORTS"\r
+ RuntimeLibrary="0"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ AdditionalIncludeDirectories="..\TortoiseShell"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/$(ProjectName).dll"\r
+ LinkIncremental="1"\r
+ IgnoreAllDefaultLibraries="true"\r
+ GenerateDebugInformation="false"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ ResourceOnlyDLL="true"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ ImportLibrary="$(OutDir)/$(TargetName).lib"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ CommandLine=""\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="..\..\bin\release64\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiffLang\Release64"\r
+ ConfigurationType="2"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TORTOISELANG_EXPORTS"\r
+ RuntimeLibrary="0"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ AdditionalIncludeDirectories="..\TortoiseShell"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/$(ProjectName).dll"\r
+ LinkIncremental="1"\r
+ IgnoreAllDefaultLibraries="true"\r
+ GenerateDebugInformation="false"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ ResourceOnlyDLL="true"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ ImportLibrary="$(OutDir)/$(TargetName).lib"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ CommandLine=""\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="..\..\bin\Debug\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiffLang\Debug"\r
+ ConfigurationType="2"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TORTOISELANG_EXPORTS"\r
+ RuntimeLibrary="0"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ AdditionalIncludeDirectories="..\TortoiseShell"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/$(ProjectName).dll"\r
+ LinkIncremental="1"\r
+ IgnoreAllDefaultLibraries="true"\r
+ GenerateDebugInformation="false"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ ResourceOnlyDLL="true"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ ImportLibrary="$(OutDir)/$(TargetName).lib"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ CommandLine=""\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="..\..\bin\debug64\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseIDiffLang\Debug64"\r
+ ConfigurationType="2"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TORTOISELANG_EXPORTS"\r
+ RuntimeLibrary="0"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ AdditionalIncludeDirectories="..\TortoiseShell"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/$(ProjectName).dll"\r
+ LinkIncremental="1"\r
+ IgnoreAllDefaultLibraries="true"\r
+ GenerateDebugInformation="false"\r
+ SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ ResourceOnlyDLL="true"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ ImportLibrary="$(OutDir)/$(TargetName).lib"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ CommandLine=""\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+ >\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+ >\r
+ <File\r
+ RelativePath=".\resource.h"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"\r
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+ >\r
+ <File\r
+ RelativePath=".\TortoiseIDiff.rc"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ <Global\r
+ Name="DevPartner_IsInstrumented"\r
+ Value="0"\r
+ />\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+//{{NO_DEPENDENCIES}}\r
+// Microsoft Visual C++ generated include file.\r
+// Used by TortoiseIDiff.rc\r
+//\r
+#define IDD_TORTOISEIDIFF_DIALOG 102\r
+#define IDS_VERSION 102\r
+#define IDS_APP_TITLE 103\r
+#define IDM_ABOUT 104\r
+#define IDS_COMMANDLINEHELP 104\r
+#define IDC_POINTER 104\r
+#define IDC_PANCUR 104\r
+#define IDM_EXIT 105\r
+#define IDS_OPENIMAGEFILE 105\r
+#define IDC_PANDOWNCUR 105\r
+#define IDS_INVALIDIMAGEINFO 106\r
+#define IDI_TORTOISEIDIFF 107\r
+#define IDS_IMAGEINFO 107\r
+#define IDS_DUALIMAGEINFO 108\r
+#define IDC_TORTOISEIDIFF 109\r
+#define IDS_DIMENSIONSANDFRAMES 110\r
+#define IDS_IMAGEINFOTT 111\r
+#define IDS_DUALIMAGEINFOTT 112\r
+#define IDR_MAINFRAME 128\r
+#define IDD_OPEN 130\r
+#define IDR_TORTOISEIDIFF 131\r
+#define IDI_OVERLAP 134\r
+#define IDI_FITINWINDOW 135\r
+#define IDI_ORIGSIZE 136\r
+#define IDI_ZOOMIN 137\r
+#define IDI_ZOOMOUT 138\r
+#define IDI_IMGINFO 139\r
+#define IDI_FORWARD 140\r
+#define IDI_BACKWARD 141\r
+#define IDI_START 142\r
+#define IDI_ICON2 143\r
+#define IDI_STOP 143\r
+#define IDI_VERTICAL 144\r
+#define IDI_LINK 145\r
+#define IDI_ALPHATOGGLE 147\r
+#define IDI_UNDO 148\r
+#define IDI_ICON1 149\r
+#define IDI_FITTOGETHER 149\r
+#define IDI_ICON4 151\r
+#define IDI_BLEND 152\r
+#define IDD_ABOUT 153\r
+#define IDC_LEFTIMAGE 1000\r
+#define IDC_RIGHTIMAGE 1001\r
+#define IDC_LEFTBROWSE 1002\r
+#define IDC_RIGHTBROWSE 1003\r
+#define IDC_ABOUTVERSION 1004\r
+#define IDC_WEBLINK 1005\r
+#define ID_VIEW_OVERLAPIMAGES 32772\r
+#define ID_FILE_OPEN 32773\r
+#define ID_VIEW_FITIMAGESINWINDOW 32778\r
+#define ID_VIEW_ORININALSIZE 32779\r
+#define ID_VIEW_ZOOMOUT 32783\r
+#define ID_VIEW_ZOOMIN 32784\r
+#define ID_Menu 32788\r
+#define ID_Menu32789 32789\r
+#define ID_VIEW_IMAGEINFO 32790\r
+#define ID_VIEW_ARRANGEVERTICAL 32793\r
+#define ID_VIEW_ARRANGEHORIZONTAL 32794\r
+#define ID_VIEW_LINKIMAGESTOGETHER 32797\r
+#define ID_VIEW_ALPHA0 32798\r
+#define ID_VIEW_ALPHA255 32799\r
+#define ID_VIEW_ALPHA127 32800\r
+#define ID_VIEW_ALPHATOGGLE 32806\r
+#define ID_VIEW_MAKESAMESIZE 32809\r
+#define ID_VIEW_FITTOGETHER 32810\r
+#define ID_VIEW_BLENDALPHA 32812\r
+#define ID_ 32813\r
+#define ID_ABOUT 32814\r
+#define ID_VIEW_BACKGROUNDCOLOR 32815\r
+#define ID_VIEW_TRANSPARENTCOLOR 32816\r
+#define IDC_STATIC -1\r
+\r
+// Next default values for new objects\r
+// \r
+#ifdef APSTUDIO_INVOKED\r
+#ifndef APSTUDIO_READONLY_SYMBOLS\r
+#define _APS_NO_MFC 1\r
+#define _APS_NEXT_RESOURCE_VALUE 154\r
+#define _APS_NEXT_COMMAND_VALUE 32817\r
+#define _APS_NEXT_CONTROL_VALUE 1006\r
+#define _APS_NEXT_SYMED_VALUE 110\r
+#endif\r
+#endif\r
--- /dev/null
+// stdafx.cpp : source file that includes just the standard includes\r
+// TortoiseIDiff.pch will be the pre-compiled header\r
+// stdafx.obj will contain the pre-compiled type information\r
+\r
+#include "stdafx.h"\r
+\r
+// TODO: reference any additional headers you need in STDAFX.H\r
+// and not in this file\r
--- /dev/null
+// stdafx.h : include file for standard system include files,\r
+// or project specific include files that are used frequently, but\r
+// are changed infrequently\r
+//\r
+\r
+#pragma once\r
+\r
+// Modify the following defines if you have to target a platform prior to the ones specified below.\r
+// Refer to MSDN for the latest info on corresponding values for different platforms.\r
+#ifndef WINVER // Allow use of features specific to Windows XP or later.\r
+#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.\r
+#endif\r
+\r
+#ifndef _WIN32_WINNT // Allow use of features specific to Vista or later. \r
+#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows.\r
+#endif \r
+\r
+#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.\r
+#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.\r
+#endif\r
+\r
+#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.\r
+#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.\r
+#endif\r
+\r
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers\r
+// Windows Header Files:\r
+#include <windows.h>\r
+\r
+// C RunTime Header Files\r
+#include <stdlib.h>\r
+#include <malloc.h>\r
+#include <memory.h>\r
+#include <tchar.h>\r
+#include <comdef.h>\r
+\r
+#include "MyMemDC.h"\r
+\r
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
\r
#pragma once\r
+#include "tstring.h"\r
#include <string>\r
#include "ocidl.h"\r
#include <GdiPlus.h>\r
<Tool\r
Name="VCCLCompilerTool"\r
Optimization="0"\r
- AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./MiscUi"\r
+ AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./;./MiscUi"\r
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"\r
MinimalRebuild="true"\r
BasicRuntimeChecks="3"\r
<Tool\r
Name="VCCLCompilerTool"\r
Optimization="0"\r
- AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./MiscUi"\r
+ AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./;./MiscUi"\r
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"\r
MinimalRebuild="true"\r
BasicRuntimeChecks="3"\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./MiscUi"\r
+ AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./;./MiscUi"\r
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"\r
RuntimeLibrary="2"\r
EnableFunctionLevelLinking="true"\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./MiscUi"\r
+ AdditionalIncludeDirectories="../git;../;../ext/scintilla/include;../ext/hunspell;./;./MiscUi"\r
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"\r
RuntimeLibrary="2"\r
EnableFunctionLevelLinking="true"\r
#include <string>\r
#include <memory>\r
#include "shlwapi.h"\r
+#include "tstring.h"\r
\r
#ifndef ASSERT\r
#define ASSERT(x)\r
--- /dev/null
+// TortoiseSVN - a Windows shell extension for easy version control\r
+\r
+// Copyright (C) 2009 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#pragma once\r
+\r
+#include <string>\r
+#include <tchar.h>\r
+\r
+typedef std::basic_string<TCHAR> tstring;\r
+\r