From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/SplashScreen/doc/splash_readme.txt | 143 +++++ plugins/SplashScreen/doc/splash_translate.txt | 17 + plugins/SplashScreen/doc/todo.txt | 17 + plugins/SplashScreen/splashscreen.dep | 52 ++ plugins/SplashScreen/splashscreen.dsp | 186 +++++++ plugins/SplashScreen/splashscreen.dsw | 29 ++ plugins/SplashScreen/splashscreen.mak | 235 +++++++++ plugins/SplashScreen/splashscreen.mdsp | 106 ++++ plugins/SplashScreen/splashscreen.sln | 24 + plugins/SplashScreen/splashscreen.vcproj | 268 ++++++++++ plugins/SplashScreen/splashscreen_10.sln | 38 ++ plugins/SplashScreen/splashscreen_10.vcxproj | 442 ++++++++++++++++ .../SplashScreen/splashscreen_10.vcxproj.filters | 88 ++++ plugins/SplashScreen/splashscreen_8.sln | 20 + plugins/SplashScreen/splashscreen_8.vcproj | 358 +++++++++++++ plugins/SplashScreen/splashscreen_9.vcproj | 573 +++++++++++++++++++++ plugins/SplashScreen/src/bitmap_funcs.cpp | 362 +++++++++++++ plugins/SplashScreen/src/bitmap_funcs.h | 77 +++ plugins/SplashScreen/src/debug.h | 72 +++ plugins/SplashScreen/src/headers.h | 119 +++++ plugins/SplashScreen/src/main.cpp | 433 ++++++++++++++++ plugins/SplashScreen/src/msvc6.rc | 2 + plugins/SplashScreen/src/options.cpp | 448 ++++++++++++++++ plugins/SplashScreen/src/resource.h | 36 ++ plugins/SplashScreen/src/services.cpp | 74 +++ plugins/SplashScreen/src/splash.cpp | 434 ++++++++++++++++ plugins/SplashScreen/src/splash.rc | 152 ++++++ plugins/SplashScreen/src/version.h | 30 ++ plugins/SplashScreen/src/version.rc | 38 ++ 29 files changed, 4873 insertions(+) create mode 100644 plugins/SplashScreen/doc/splash_readme.txt create mode 100644 plugins/SplashScreen/doc/splash_translate.txt create mode 100644 plugins/SplashScreen/doc/todo.txt create mode 100644 plugins/SplashScreen/splashscreen.dep create mode 100644 plugins/SplashScreen/splashscreen.dsp create mode 100644 plugins/SplashScreen/splashscreen.dsw create mode 100644 plugins/SplashScreen/splashscreen.mak create mode 100644 plugins/SplashScreen/splashscreen.mdsp create mode 100644 plugins/SplashScreen/splashscreen.sln create mode 100644 plugins/SplashScreen/splashscreen.vcproj create mode 100644 plugins/SplashScreen/splashscreen_10.sln create mode 100644 plugins/SplashScreen/splashscreen_10.vcxproj create mode 100644 plugins/SplashScreen/splashscreen_10.vcxproj.filters create mode 100644 plugins/SplashScreen/splashscreen_8.sln create mode 100644 plugins/SplashScreen/splashscreen_8.vcproj create mode 100644 plugins/SplashScreen/splashscreen_9.vcproj create mode 100644 plugins/SplashScreen/src/bitmap_funcs.cpp create mode 100644 plugins/SplashScreen/src/bitmap_funcs.h create mode 100644 plugins/SplashScreen/src/debug.h create mode 100644 plugins/SplashScreen/src/headers.h create mode 100644 plugins/SplashScreen/src/main.cpp create mode 100644 plugins/SplashScreen/src/msvc6.rc create mode 100644 plugins/SplashScreen/src/options.cpp create mode 100644 plugins/SplashScreen/src/resource.h create mode 100644 plugins/SplashScreen/src/services.cpp create mode 100644 plugins/SplashScreen/src/splash.cpp create mode 100644 plugins/SplashScreen/src/splash.rc create mode 100644 plugins/SplashScreen/src/version.h create mode 100644 plugins/SplashScreen/src/version.rc (limited to 'plugins/SplashScreen') diff --git a/plugins/SplashScreen/doc/splash_readme.txt b/plugins/SplashScreen/doc/splash_readme.txt new file mode 100644 index 0000000000..97d995c589 --- /dev/null +++ b/plugins/SplashScreen/doc/splash_readme.txt @@ -0,0 +1,143 @@ +Splash Screen Plugin for Miranda IM +Version 0.1.2.2 +Copyright: 2004-2007 nullbie, 2005-2010 Thief +Addons page: http://addons.miranda-im.org/details.php?id=2624 +Beta site: http://thief.miranda.im +Forum thread: http://forums.miranda-im.org/showthread.php?t=6868 + +REQUIREMENTS: +advaimg.dll +Get it from nigtlies: http://miranda-im.org/development + +NOTES: +Splashes should be in PNG format (alpha channel supported) or BMP (no alfa) +Sounds should be not broken .wav files +To enable plugin after disabling it in options you must edit plugins/splash.ini (or mirandaboot.ini) and set +"Active" param to 1 or enable splash display at options page. + +Thanks to: +nullbie, who gave me the sources and for helping with development +Faith Healer for ideas and feedback +foxter.ru for first splashes design (I really like them) +Miranda project for the greatest IM client ever :) + +Version history: + +0.1.2.2 beta +[-] Crash fix by George Hazan + +0.1.2.1 beta +[-] Fixed: wrong absolute path was used for preview +[-] Fixed: preview function completely stops working when closing splash by right click (thx m0003r) +[-] Enabled and fixed tab navigation in options +[*] Updated langpack + +0.1.2.0 beta +[!] Switched to advaimg.dll for processing pngs, png2dib is not used anymore +[+] Plugin API changes: added uuid (C64CC8E0-CF03-474A-8B11-8BD4565CC) and MIID_SPLASHSCREEN interface (91CB1E8D-C33C-43C0-BDD8-6725B070B3E0) +[+] Added an option to show Miranda version on splash (more options to be implemented) +[+] Added environment variables support (%PROFILEPATH%, %APPDATA%, etc.) +[+] Added Ini param to point to config file (aware of environment variables support, thus makes possible to use different ini-es for different profiles) +[*] Removed mp3 support (was too buggy, will reimplement eventually) +[*] When random feature is enabled file name is omitted from path when selecting a new file + +0.1.1.7 beta +[+] Experimental mp3 playback support +[-] Fix for long standing (from 0.1.1.x) 24-bit images loading issue (thx nullbie) +[-] Fix for thread hang +[-] Hopefully fixed "splash not closing" problem on some configurations +[*] Random feature searches only for valid extensions - bmp and png +[*] Redesigned options page a bit +[*] Langpack changes +[*] Alot of other changes, reorganizations and fixes + +0.1.1.6 beta +[-] Fixed "Display time" option. Now should be really working. If you want splash to be closed after Miranda fully loaded set it to 0 +[-] Fixed: sometimes splash wasn't autoclosed with TimeToShow = 0 +[*] Display time option can accept values up to 20000 mseconds +[*] Dinamically linked build is removed from archive to avoid cluttering of miranda root folder when using Updater. +[*] Code cleanup + +0.1.1.5 beta +[+] Updater support for betas (don't forget to enable "Use beta?" option in Updater settings) +[+] Dinamically linked build (you'll need MSVCR71.dll to run it) +[-] Another workaraund for crash when opening options due to regression +[-] Fix for the "Play sound" check +[*] A small change to options page +[*] Langpack addition + +0.1.1.4 beta +[+] Option to scan a folder and select random file for display +[+] Added a service (see m_splash.h for details) (thx MiCHi for inspiration) +[-] Fix: the Apply button was enabled every time options were opened with SplashScreen page +[*] Added third state to PlaySound checkbox in options. Means not to follow global sound state +[*] Reduced dll size due to switch to VS2003 +[-] Some other minor fixes + +0.1.1.2 +[*] ini file removed from archive, it will be created automatically on startup if not exists +[-] Version bump in order to fix wrong updater notifications in previous version (sorry for that) +[!] Known issue: won't load non 32-bit splash image + +0.1.1.1 +[-] A little fix for options page + +0.1.1.0 +[!] Switched to png2dib (v0.1.3.x or later) for png processing (Faith Healer wins ;P). Imgdecoder no longer needed. +[-] Fixed inability to use absolute path(s) +[+] Options to control Display time and Fade in/out (somewhat temporary solution) +[*] Translation additions. + +0.1.0.6 (not published) +[+] When sounds disabled in miranda disable it in splash screen (thx +eRRikon for suggestion) + +0.1.0.5 +[*] Renamed dll into AdvSlashScreen to increase loading priority on NTFS file systems +[+] New ini option: TimeToShow, defines time (in msecs) how long splash should stay on screen +[+] Added ability to play sound +[+] URL to File Listing page of plugin +[+] Can use mirandaboot.ini as config (if splash.ini not found) +[*] Little cleanup: splash.ini goes into /plugins, /splash into root dir (default locations) +[-] Changing fading setings at options page directly affect preview +[*] Now fadeouts when closed via leftclick + +0.1.0.4 +[!] First release on FL +[+] Options to enable fade in/out +[*] Splash preview disappears after 2 secs (thx nullbie) +[*] OpenFile dialog now uses last used folder as initial +[+] DisableAfterStartup param in ini - allows to disable splash after first run, later it can be activated again in options +[+] Option to control plugin activity + +0.1.0.3 +[+] Preview button in options (rightclick to hide splash) + +0.1.0.2 +[+] Options page added +[*] Using config instead of hardly coded values +[-] Workaround for crash when plug is disabled and opening options dialog + +0.1.0.1 +[+] Win 9x "alfa channel" trick +[+] Rightclick dismisses splash + +0.1.0.0 +[!] First beta release + +CONTACT: +send your comments, suggestions, bugreports and feature requests here: turyak@gmail.com +or PM me on Miranda forums. + +This plugin is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. diff --git a/plugins/SplashScreen/doc/splash_translate.txt b/plugins/SplashScreen/doc/splash_translate.txt new file mode 100644 index 0000000000..1982c89da3 --- /dev/null +++ b/plugins/SplashScreen/doc/splash_translate.txt @@ -0,0 +1,17 @@ +;for Splash Screen v.0.1.2.x+ + +[Splash Screen] +[Splash Options] +[Show Miranda Version] +[Appearance] +[Show splash] +[Show random splash] +[Play sound] +[Loop sound] +[Prefix:] +[Fade in:] +[Fade out:] +[Display time:] +[msec] +[steps] +[Preview...] \ No newline at end of file diff --git a/plugins/SplashScreen/doc/todo.txt b/plugins/SplashScreen/doc/todo.txt new file mode 100644 index 0000000000..f059b805e4 --- /dev/null +++ b/plugins/SplashScreen/doc/todo.txt @@ -0,0 +1,17 @@ +TODO List: + +- merge code from advsplash +- fading in/out time +- more formats +- more version string options, font color and size + +Done: +- add a splash service [done] +- add random feature [done] +- add splash display time option [done] +- make interface to display time param [done] +- fix absolute path issue [done] +- cleanup folders/settings a bit [done] +- fadeout if rightclicked (and maybe left too) [done] +- when changing options affect them on preview [done] +- switch to png2dib for image processing [done] \ No newline at end of file diff --git a/plugins/SplashScreen/splashscreen.dep b/plugins/SplashScreen/splashscreen.dep new file mode 100644 index 0000000000..6ba79504dd --- /dev/null +++ b/plugins/SplashScreen/splashscreen.dep @@ -0,0 +1,52 @@ +# Microsoft Developer Studio Generated Dependency File, included by splashscreen.mak + +.\src\bitmap_funcs.cpp : \ + "..\..\..\include\m_database.h"\ + "..\..\..\include\m_langpack.h"\ + "..\..\..\include\m_options.h"\ + "..\..\..\include\m_plugins.h"\ + "..\..\..\include\m_png.h"\ + "..\..\..\include\m_system.h"\ + "..\..\..\include\m_updater.h"\ + "..\..\..\include\m_utils.h"\ + "..\..\..\include\newpluginapi.h"\ + "..\..\..\include\win2k.h"\ + ".\src\bitmap_funcs.h"\ + ".\src\headers.h"\ + ".\src\m_splash.h"\ + "g:\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\src\main.cpp : \ + "..\..\..\include\m_database.h"\ + "..\..\..\include\m_langpack.h"\ + "..\..\..\include\m_options.h"\ + "..\..\..\include\m_plugins.h"\ + "..\..\..\include\m_png.h"\ + "..\..\..\include\m_system.h"\ + "..\..\..\include\m_updater.h"\ + "..\..\..\include\m_utils.h"\ + "..\..\..\include\newpluginapi.h"\ + "..\..\..\include\win2k.h"\ + ".\src\bitmap_funcs.h"\ + ".\src\headers.h"\ + ".\src\m_splash.h"\ + "g:\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\src\options.cpp : \ + "..\..\..\include\m_database.h"\ + "..\..\..\include\m_langpack.h"\ + "..\..\..\include\m_options.h"\ + "..\..\..\include\m_plugins.h"\ + "..\..\..\include\m_png.h"\ + "..\..\..\include\m_system.h"\ + "..\..\..\include\m_updater.h"\ + "..\..\..\include\m_utils.h"\ + "..\..\..\include\newpluginapi.h"\ + "..\..\..\include\win2k.h"\ + ".\src\bitmap_funcs.h"\ + ".\src\headers.h"\ + ".\src\m_splash.h"\ + "g:\microsoft visual studio\vc98\include\basetsd.h"\ + diff --git a/plugins/SplashScreen/splashscreen.dsp b/plugins/SplashScreen/splashscreen.dsp new file mode 100644 index 0000000000..ec624567e7 --- /dev/null +++ b/plugins/SplashScreen/splashscreen.dsp @@ -0,0 +1,186 @@ +# Microsoft Developer Studio Project File - Name="AdvSplashScreen" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=AdvSplashScreen - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "splashscreen.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "splashscreen.mak" CFG="AdvSplashScreen - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "AdvSplashScreen - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "AdvSplashScreen - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 1 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "AdvSplashScreen - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 1 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FINGER_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FINGER_EXPORTS" /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /I "../../include" /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x419 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Vfw32.lib winmm.lib Version.lib /nologo /base:"0x16660000" /verbose /dll /pdb:"../../bin/release/plugins/AdvSplashScreen.pdb" /map:"../../bin/release/plugins/AdvSplashScreen.map" /machine:I386 /out:"../../bin/release/plugins/AdvSplashScreen.dll" +# SUBTRACT LINK32 /pdb:none /debug + +!ELSEIF "$(CFG)" == "AdvSplashScreen - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FINGER_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FINGER_EXPORTS" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /I "../../../include" /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x419 /d "_DEBUG" +# ADD RSC /l 0x419 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib Version.lib /nologo /dll /debug /machine:I386 /out:"../../bin/debug/plugins/AdvSplashScreen.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "AdvSplashScreen - Win32 Release" +# Name "AdvSplashScreen - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\src\bitmap_funcs.cpp +# End Source File +# Begin Source File + +SOURCE=.\src\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\src\options.cpp +# End Source File +# Begin Source File + +SOURCE=.\src\services.cpp +# End Source File +# Begin Source File + +SOURCE=.\src\splash.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\src\bitmap_funcs.h +# End Source File +# Begin Source File + +SOURCE=.\src\debug.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers.h +# End Source File +# Begin Source File + +SOURCE=.\src\splash.h +# End Source File +# Begin Source File + +SOURCE=.\src\version.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\src\splash.rc +# End Source File +# End Group +# Begin Group "API" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\m_folders.h +# End Source File +# Begin Source File + +SOURCE=.\src\m_popup.h +# End Source File +# Begin Source File + +SOURCE=.\src\m_splash.h +# End Source File +# Begin Source File + +SOURCE=.\src\m_updater.h +# End Source File +# End Group +# Begin Group "Docs" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\doc\splash_readme.txt +# End Source File +# Begin Source File + +SOURCE=.\doc\splash_translate.txt +# End Source File +# Begin Source File + +SOURCE=.\doc\todo.txt +# End Source File +# End Group +# End Target +# End Project diff --git a/plugins/SplashScreen/splashscreen.dsw b/plugins/SplashScreen/splashscreen.dsw new file mode 100644 index 0000000000..7e19ddc36a --- /dev/null +++ b/plugins/SplashScreen/splashscreen.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "AdvSplashScreen"=".\splashscreen.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/plugins/SplashScreen/splashscreen.mak b/plugins/SplashScreen/splashscreen.mak new file mode 100644 index 0000000000..b65bdb3356 --- /dev/null +++ b/plugins/SplashScreen/splashscreen.mak @@ -0,0 +1,235 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on splashscreen.dsp +!IF "$(CFG)" == "" +CFG=AdvSplashScreen - Win32 Debug +!MESSAGE No configuration specified. Defaulting to AdvSplashScreen - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "AdvSplashScreen - Win32 Release" && "$(CFG)" != "AdvSplashScreen - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "splashscreen.mak" CFG="AdvSplashScreen - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "AdvSplashScreen - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "AdvSplashScreen - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(CFG)" == "AdvSplashScreen - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "..\..\bin\release\plugins\AdvSplashScreen.dll" + + +CLEAN : + -@erase "$(INTDIR)\bitmap_funcs.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\options.obj" + -@erase "$(INTDIR)\splash.res" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(OUTDIR)\AdvSplashScreen.exp" + -@erase "..\..\bin\release\plugins\AdvSplashScreen.dll" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /MD /W3 /GX /O1 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FINGER_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +MTL=midl.exe +MTL_PROJ=/nologo /I "../../include" /D "NDEBUG" /mktyplib203 /win32 +RSC=rc.exe +RSC_PROJ=/l 0x809 /fo"$(INTDIR)\splash.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\splashscreen.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /verbose /dll /pdb:none /machine:I386 /out:"../../bin/release/plugins/AdvSplashScreen.dll" /implib:"$(OUTDIR)\AdvSplashScreen.lib" +LINK32_OBJS= \ + "$(INTDIR)\bitmap_funcs.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\options.obj" \ + "$(INTDIR)\splash.res" + +"..\..\bin\release\plugins\AdvSplashScreen.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "AdvSplashScreen - Win32 Debug" + +OUTDIR=.\Debug +INTDIR=.\Debug +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +ALL : "$(OUTDIR)\splashscreen.dll" + + +CLEAN : + -@erase "$(INTDIR)\bitmap_funcs.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\options.obj" + -@erase "$(INTDIR)\splash.res" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\vc60.pdb" + -@erase "$(OUTDIR)\splashscreen.dll" + -@erase "$(OUTDIR)\splashscreen.exp" + -@erase "$(OUTDIR)\splashscreen.ilk" + -@erase "$(OUTDIR)\splashscreen.lib" + -@erase "$(OUTDIR)\splashscreen.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FINGER_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +MTL=midl.exe +MTL_PROJ=/nologo /I "../../../include" /D "_DEBUG" /mktyplib203 /win32 +RSC=rc.exe +RSC_PROJ=/l 0x419 /fo"$(INTDIR)\splash.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\splashscreen.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\splashscreen.pdb" /debug /machine:I386 /out:"$(OUTDIR)\splashscreen.dll" /implib:"$(OUTDIR)\splashscreen.lib" /pdbtype:sept +LINK32_OBJS= \ + "$(INTDIR)\bitmap_funcs.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\options.obj" \ + "$(INTDIR)\splash.res" + +"$(OUTDIR)\splashscreen.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("splashscreen.dep") +!INCLUDE "splashscreen.dep" +!ELSE +!MESSAGE Warning: cannot find "splashscreen.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "AdvSplashScreen - Win32 Release" || "$(CFG)" == "AdvSplashScreen - Win32 Debug" +SOURCE=.\src\bitmap_funcs.cpp + +"$(INTDIR)\bitmap_funcs.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +SOURCE=.\src\main.cpp + +"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +SOURCE=.\src\options.cpp + +"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +SOURCE=.\src\splash.rc + +!IF "$(CFG)" == "AdvSplashScreen - Win32 Release" + + +"$(INTDIR)\splash.res" : $(SOURCE) "$(INTDIR)" + $(RSC) /l 0x809 /fo"$(INTDIR)\splash.res" /i "src" /d "NDEBUG" $(SOURCE) + + +!ELSEIF "$(CFG)" == "AdvSplashScreen - Win32 Debug" + + +"$(INTDIR)\splash.res" : $(SOURCE) "$(INTDIR)" + $(RSC) /l 0x419 /fo"$(INTDIR)\splash.res" /i "src" /d "_DEBUG" $(SOURCE) + + +!ENDIF + +SOURCE=.\src\version.rc + +!ENDIF + diff --git a/plugins/SplashScreen/splashscreen.mdsp b/plugins/SplashScreen/splashscreen.mdsp new file mode 100644 index 0000000000..890cb05d60 --- /dev/null +++ b/plugins/SplashScreen/splashscreen.mdsp @@ -0,0 +1,106 @@ +[Project] +name=splashscreen +type=2 +defaultConfig=1 + + +[Debug] +// compiler +workingDirectory= +arguments= +intermediateFilesDirectory=Debug +outputFilesDirectory=Debug +compilerPreprocessor= +extraCompilerOptions= +compilerIncludeDirectory=..\..\include +noWarning=0 +defaultWarning=0 +allWarning=1 +extraWarning=0 +isoWarning=0 +warningsAsErrors=0 +debugType=1 +debugLevel=2 +exceptionEnabled=1 +runtimeTypeEnabled=1 +optimizeLevel=0 + +// linker +libraryPath= +outputFilename=Debug\advsplashscreen.dll +libraries=gdi32, comdlg32, winmm, version +extraLinkerOptions= +ignoreStartupFile=0 +ignoreDefaultLibs=0 +stripExecutableFile=0 + +// archive +extraArchiveOptions= + +//resource +resourcePreprocessor= +resourceIncludeDirectory= +extraResourceOptions= + +[Release] +// compiler +workingDirectory= +arguments= +intermediateFilesDirectory=Release +outputFilesDirectory=Release +compilerPreprocessor= +extraCompilerOptions= +compilerIncludeDirectory=..\..\include +noWarning=0 +defaultWarning=0 +allWarning=1 +extraWarning=0 +isoWarning=0 +warningAsErrors=0 +debugType=0 +debugLevel=1 +exceptionEnabled=1 +runtimeTypeEnabled=1 +optimizeLevel=2 + +// linker +libraryPath= +outputFilename=Release\advsplashscreen.dll +libraries=gdi32, comdlg32, winmm, version +extraLinkerOptions= +ignoreStartupFile=0 +ignoreDefaultLibs=0 +stripExecutableFile=1 + +// archive +extraArchiveOptions= + +//resource +resourcePreprocessor= +resourceIncludeDirectory= +extraResourceOptions= + +[Source] +1=src\bitmap_funcs.cpp +2=src\main.cpp +3=src\options.cpp +4=src\services.cpp +5=src\splash.cpp +[Header] +1=src\bitmap_funcs.h +2=src\debug.h +3=src\headers.h +4=src\m_folders.h +5=src\m_splash.h +6=src\m_updater.h +7=src\resource.h +8=src\splash.h +9=src\version.h +[Resource] +1=src\msvc6.rc +2=src\splash.rc +3=src\version.rc +[Other] +[History] +src\splash.cpp,1787 +src\main.cpp,12416 diff --git a/plugins/SplashScreen/splashscreen.sln b/plugins/SplashScreen/splashscreen.sln new file mode 100644 index 0000000000..09bc4123b6 --- /dev/null +++ b/plugins/SplashScreen/splashscreen.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "splashscreen", "splashscreen.vcproj", "{A769FE66-9BDA-4AF4-8881-7A263AE557E5}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + Release (MSVCR71) = Release (MSVCR71) + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A769FE66-9BDA-4AF4-8881-7A263AE557E5}.Debug.ActiveCfg = Debug|Win32 + {A769FE66-9BDA-4AF4-8881-7A263AE557E5}.Debug.Build.0 = Debug|Win32 + {A769FE66-9BDA-4AF4-8881-7A263AE557E5}.Release.ActiveCfg = Release|Win32 + {A769FE66-9BDA-4AF4-8881-7A263AE557E5}.Release.Build.0 = Release|Win32 + {A769FE66-9BDA-4AF4-8881-7A263AE557E5}.Release (MSVCR71).ActiveCfg = Release (MSVCR71)|Win32 + {A769FE66-9BDA-4AF4-8881-7A263AE557E5}.Release (MSVCR71).Build.0 = Release (MSVCR71)|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/plugins/SplashScreen/splashscreen.vcproj b/plugins/SplashScreen/splashscreen.vcproj new file mode 100644 index 0000000000..e4cf26131e --- /dev/null +++ b/plugins/SplashScreen/splashscreen.vcproj @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/SplashScreen/splashscreen_10.sln b/plugins/SplashScreen/splashscreen_10.sln new file mode 100644 index 0000000000..24a6384a76 --- /dev/null +++ b/plugins/SplashScreen/splashscreen_10.sln @@ -0,0 +1,38 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SplashScreen", "splashscreen_10.vcxproj", "{5A6095F4-B037-4DA8-8410-8004A90C961A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug Unicode|Win32 = Debug Unicode|Win32 + Debug Unicode|x64 = Debug Unicode|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release Unicode|Win32 = Release Unicode|Win32 + Release Unicode|x64 = Release Unicode|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug Unicode|x64.ActiveCfg = Debug Unicode|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug Unicode|x64.Build.0 = Debug Unicode|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug|Win32.Build.0 = Debug|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug|x64.ActiveCfg = Debug|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug|x64.Build.0 = Debug|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release Unicode|x64.ActiveCfg = Release Unicode|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release Unicode|x64.Build.0 = Release Unicode|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release|Win32.ActiveCfg = Release|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release|Win32.Build.0 = Release|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release|x64.ActiveCfg = Release|x64 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/plugins/SplashScreen/splashscreen_10.vcxproj b/plugins/SplashScreen/splashscreen_10.vcxproj new file mode 100644 index 0000000000..88a5780dc0 --- /dev/null +++ b/plugins/SplashScreen/splashscreen_10.vcxproj @@ -0,0 +1,442 @@ + + + + + Debug Unicode + Win32 + + + Debug Unicode + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release Unicode + Win32 + + + Release Unicode + x64 + + + Release + Win32 + + + Release + x64 + + + + SplashScreen + {5A6095F4-B037-4DA8-8410-8004A90C961A} + splashscreen8 + + + + DynamicLibrary + false + Unicode + + + DynamicLibrary + false + Unicode + + + DynamicLibrary + false + Unicode + true + + + DynamicLibrary + false + Unicode + true + + + DynamicLibrary + false + MultiByte + true + + + DynamicLibrary + false + MultiByte + true + + + DynamicLibrary + false + MultiByte + + + DynamicLibrary + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)/Plugins\ + $(SolutionDir)$(Configuration)64/Plugins\ + $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)/Plugins\ + $(SolutionDir)$(Configuration)64/Plugins\ + $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)/Plugins\ + $(SolutionDir)$(Configuration)64/Plugins\ + $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)/Plugins\ + $(SolutionDir)$(Configuration)64/Plugins\ + $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ + $(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\ + D:\Sources\miranda9_trunk\miranda\include;$(IncludePath) + + + + _DEBUG;%(PreprocessorDefinitions) + true + Win32 + .\Debug/splash.tlb + + + Disabled + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + Level3 + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + false + MachineX86 + $(IntDir)$(TargetName).lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + .\Debug/splash.tlb + + + Disabled + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + false + $(IntDir)$(TargetName).lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + Win32 + .\Release/splash.tlb + + + Full + OnlyExplicitInline + Size + true + true + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + true + Level3 + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + true + true + 0x16660000 + false + MachineX86 + $(IntDir)$(TargetName).lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/splash.tlb + + + Full + OnlyExplicitInline + Size + true + true + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + true + Level3 + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + true + true + 0x16660000 + false + $(IntDir)$(TargetName).lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + Win32 + .\Release/splash.tlb + + + Full + OnlyExplicitInline + Size + true + true + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + true + Level3 + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + true + true + 0x16660000 + false + MachineX86 + $(IntDir)$(TargetName).lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + .\Release/splash.tlb + + + Full + OnlyExplicitInline + Size + true + true + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + true + Level3 + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + true + true + 0x16660000 + false + $(IntDir)$(TargetName).lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + Win32 + .\Debug/splash.tlb + + + Disabled + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + Level3 + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + false + MachineX86 + $(IntDir)$(TargetName).lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + .\Debug/splash.tlb + + + Disabled + ../../include;../ExternalAPI;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SPLASH_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + ../../include/msapi/ + + + winmm.lib;Version.lib;%(AdditionalDependencies) + true + false + $(IntDir)$(TargetName).lib + + + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/SplashScreen/splashscreen_10.vcxproj.filters b/plugins/SplashScreen/splashscreen_10.vcxproj.filters new file mode 100644 index 0000000000..c7f02f8a8d --- /dev/null +++ b/plugins/SplashScreen/splashscreen_10.vcxproj.filters @@ -0,0 +1,88 @@ + + + + + {76360dd5-cc6d-4d5d-b034-eacc85210c07} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {4f8b92ac-9157-49e1-86e1-89b6a5bedd06} + h;hpp;hxx;hm;inl + + + {4cf2f797-4e6e-41e0-9836-39dbe0da6295} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + {3457019d-5df6-405d-82d6-4a50c482396a} + + + {2bc381f4-bd10-4393-9bdd-e2a1ecc95d8d} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Resource Files + + + API + + + API + + + API + + + + + Resource Files + + + Resource Files + + + + + Docs + + + Docs + + + Docs + + + \ No newline at end of file diff --git a/plugins/SplashScreen/splashscreen_8.sln b/plugins/SplashScreen/splashscreen_8.sln new file mode 100644 index 0000000000..921acb9587 --- /dev/null +++ b/plugins/SplashScreen/splashscreen_8.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "splashscreen", "splashscreen8.vcproj", "{5A6095F4-B037-4DA8-8410-8004A90C961A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Debug|Win32.Build.0 = Debug|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release|Win32.ActiveCfg = Release|Win32 + {5A6095F4-B037-4DA8-8410-8004A90C961A}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/plugins/SplashScreen/splashscreen_8.vcproj b/plugins/SplashScreen/splashscreen_8.vcproj new file mode 100644 index 0000000000..bb390c9bdf --- /dev/null +++ b/plugins/SplashScreen/splashscreen_8.vcproj @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/SplashScreen/splashscreen_9.vcproj b/plugins/SplashScreen/splashscreen_9.vcproj new file mode 100644 index 0000000000..7529563408 --- /dev/null +++ b/plugins/SplashScreen/splashscreen_9.vcproj @@ -0,0 +1,573 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/SplashScreen/src/bitmap_funcs.cpp b/plugins/SplashScreen/src/bitmap_funcs.cpp new file mode 100644 index 0000000000..09ded3aeb2 --- /dev/null +++ b/plugins/SplashScreen/src/bitmap_funcs.cpp @@ -0,0 +1,362 @@ +#include "headers.h" +#include "bitmap_funcs.h" + +BOOL (WINAPI *_mempng2dib) (BYTE*, DWORD, BITMAPINFOHEADER**); + +MyBitmap::MyBitmap() +{ + dcBmp = 0; + hBmp = 0; + bits = 0; + width = height = 0; + bitsSave = 0; +} + +MyBitmap::MyBitmap(int w, int h) +{ + dcBmp = 0; + hBmp = 0; + bits = 0; + width = height = 0; + bitsSave = 0; + allocate(w,h); +} + +MyBitmap::MyBitmap(TCHAR *fn, TCHAR *fnAlpha) +{ + dcBmp = 0; + hBmp = 0; + bits = 0; + width = height = 0; + bitsSave = 0; + loadFromFile(fn, fnAlpha); +} + +MyBitmap::~MyBitmap() +{ + if (bitsSave) + delete [] bitsSave; + free(); +} + +void MyBitmap::makeOpaque() +{ + if (!bits) return; + + for (int i = 0; i < width*height; i++) + bits[i] |= 0xff000000; +} + +void MyBitmap::saveAlpha(int x, int y, int w, int h) +{ + if (bitsSave) + delete [] bitsSave; + + if (!w) w = width; + if (!h) h = height; + + bitsSave = new COLOR32[w*h]; + COLOR32 *p1 = bitsSave; + + for (int i = 0; i < h; i++) + { + if (i+y < 0) continue; + if (i+y >= height) break; + COLOR32 *p2 = bits + (y+i)*width + x; + for (int j = 0; j < w; j++) + { + if (j+x < 0) continue; + if (j+x >= width) break; + *p1++ = *p2++; + } + } +} + +void MyBitmap::restoreAlpha(int x, int y, int w, int h) +{ + if (!bitsSave) + return; + + if (!w) w = width; + if (!h) h = height; + + COLOR32 *p1 = bitsSave; + + for (int i = 0; i < h; i++) + { + if (i+y < 0) continue; + if (i+y >= height) break; + COLOR32 *p2 = bits + (y+i)*width + x; + for (int j = 0; j < w; j++) + { + if (j+x < 0) continue; + if (j+x >= width) break; + if ((*p1&0x00ffffff) != (*p2&0x00ffffff)) + { + *p2 |= 0xff000000; + } else + { + *p2 = (*p2&0x00ffffff) | (*p1&0xff000000); + } + ++p1; + ++p2; + } + } + + delete [] bitsSave; + bitsSave = 0; +} + +void MyBitmap::Blend(MyBitmap *bmp, int x, int y, int w, int h) +{ + if (!(bits && bmp && bmp->bits)) return; + + if (!w) w = bmp->width; + if (!h) h = bmp->height; + float kx = (float)bmp->width / w; + float ky = (float)bmp->height / h; + + if (x+w >= this->getWidth()) + w = this->getWidth() - x; + if (y+h >= this->getHeight()) + h = this->getHeight() - y; + + for (int i = 0; i < h; i++) + { + if (i+y < 0) continue; + if (i+y >= height) break; + for (int j = 0; j < w; j++) + { + if (j+x < 0) continue; + if (j+x >= width) break; + COLOR32 src = bmp->bits[int(i*ky)*bmp->width + int(j*kx)]; + COLOR32 dst = bits[(i+y)*width + (j+x)]; + long alpha = geta(src); + bits[(i+y)*width + (j+x)] = rgba( + getr(src)+(255-alpha)*getr(dst)/255, + getg(src)+(255-alpha)*getg(dst)/255, + getb(src)+(255-alpha)*getb(dst)/255, + geta(src)+(255-alpha)*geta(dst)/255 + ); + } + } +} + +void MyBitmap::DrawText(TCHAR *str, int x, int y) +{ + SIZE sz; GetTextExtentPoint32(this->getDC(), str, lstrlen(str), &sz); + RECT rc; SetRect(&rc, x, y, x+10000, y+10000); + this->saveAlpha(x-2,y-2,sz.cx+2,sz.cy+2); + ::DrawText(this->getDC(), str, (int)_tcslen(str), &rc, DT_LEFT | DT_TOP | DT_SINGLELINE | DT_NOPREFIX); + this->restoreAlpha(x-2,y-2,sz.cx+2,sz.cy+2); + //(x,y,sz.cx,sz.cy); +} + +HRGN MyBitmap::buildOpaqueRgn() +{ + return CreateRectRgn(0, 0, width, height); + + // + int i, rectCount = 0; + for (i = 0; i < width*height; i++) + if (((bits[i] >> 24)&0xff) >= 128) + rectCount++; + + RGNDATA *rgnData = (RGNDATA *)malloc(sizeof(RGNDATAHEADER) + rectCount * sizeof(RECT)); + rgnData->rdh.dwSize = sizeof(RGNDATAHEADER); + rgnData->rdh.iType = RDH_RECTANGLES; + rgnData->rdh.nCount = rectCount; + rgnData->rdh.nRgnSize = rectCount * sizeof(RECT); + SetRect(&(rgnData->rdh.rcBound), 0, 0, width, height); + + char *p = (char *)&(rgnData->Buffer); + for (i = 0; i < width*height; i++) + if (((bits[i] >> 24)&0xff) >= 128) + { + SetRect((LPRECT)p, i%width,i/width,i%width+1,i/width+1); + p += sizeof(RECT); + } + + HRGN rgn = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + rectCount * sizeof(RECT), rgnData); + ::free(rgnData); + + return rgn; +} + +bool MyBitmap::loadFromFile(TCHAR *fn, TCHAR *fnAlpha) +{ + if (bits) free(); + + SIZE sz; + + TCHAR *ext; + ext = &fn[lstrlen(fn)-4]; + + if (!lstrcmpi(ext, _T(".png"))) + { + HANDLE hFile, hMap = NULL; + BYTE* ppMap = NULL; + long cbFileSize = 0; + BITMAPINFOHEADER* pDib; + BYTE* pDibBits = 0; + + if (!png2dibConvertor) { + return false; + } + + if ((hFile = CreateFile(fn, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE) + if ((hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL)) != NULL) + if ((ppMap = (BYTE*)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0 )) != NULL) + cbFileSize = GetFileSize(hFile, NULL); + if ( cbFileSize != 0 ) + { + PNG2DIB param; + param.pSource = ppMap; + param.cbSourceSize = cbFileSize; + param.pResult = &pDib; + + if (png2dibConvertor((char*)param.pSource, param.cbSourceSize, param.pResult)) + pDibBits = (BYTE*)(pDib+1); + else + cbFileSize = 0; + #ifdef _DEBUG + logMessage(_T("Loading splash file"), _T("done")); + #endif + } + + if (ppMap) UnmapViewOfFile(ppMap); + if (hMap) CloseHandle(hMap); + if (hFile) CloseHandle(hFile); + + if (!cbFileSize) return false; + + BITMAPINFO *bi=(BITMAPINFO*)pDib; + BYTE *pt=(BYTE*)bi; + pt+=bi->bmiHeader.biSize; + HBITMAP hBitmap = NULL; + + if (bi->bmiHeader.biBitCount!=32) + { + allocate(abs(bi->bmiHeader.biWidth), abs(bi->bmiHeader.biHeight)); + HDC hdcTmp = CreateCompatibleDC(getDC()); + HBITMAP hBitmap = CreateDIBitmap(getDC(), pDib, CBM_INIT, pDibBits, bi, DIB_PAL_COLORS); + SelectObject(hdcTmp, hBitmap); + BitBlt(this->getDC(), 0, 0, abs(bi->bmiHeader.biWidth), abs(bi->bmiHeader.biHeight), hdcTmp, 0, 0, SRCCOPY); + this->makeOpaque(); + DeleteDC(hdcTmp); + DeleteObject(hBitmap); + + } + else + { + BYTE *ptPixels = pt; + hBitmap = CreateDIBSection(NULL, bi, DIB_RGB_COLORS, (void **)&ptPixels, NULL, 0); + memcpy(ptPixels,pt,bi->bmiHeader.biSizeImage); + + allocate(abs(bi->bmiHeader.biWidth), abs(bi->bmiHeader.biHeight)); + //memcpy(bits, pt, bi->bmiHeader.biSizeImage); + + BYTE *p2=(BYTE *)pt; + for (int y=0; ybmiHeader.biHeight; ++y) + { + BYTE *p1=(BYTE *)bits + (bi->bmiHeader.biHeight-y-1)*bi->bmiHeader.biWidth*4; + for (int x=0; xbmiHeader.biWidth; ++x) + { + p1[0]= p2[0]; + p1[1]= p2[1]; + p1[2]= p2[2]; + p1[3]= p2[3]; + p1 += 4; + p2 += 4; + } + } + + premultipleChannels(); + } + + GlobalFree(pDib); + DeleteObject(hBitmap); + return true; + } else + { + HBITMAP hBmpLoaded = (HBITMAP)LoadImage(NULL, fn, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); + if (!hBmpLoaded) + { + #ifdef _DEBUG + logMessage(_T("MyBitmap::loadFromFile"), _T("Bitmap load failed")); + #endif + return false; + } + + BITMAP bm; GetObject(hBmpLoaded, sizeof(bm), &bm); + SetBitmapDimensionEx(hBmpLoaded, bm.bmWidth, bm.bmHeight, NULL); + + HDC dcTmp = CreateCompatibleDC(0); + GetBitmapDimensionEx(hBmpLoaded, &sz); + HBITMAP hBmpDcSave = (HBITMAP)SelectObject(dcTmp, hBmpLoaded); + + allocate(sz.cx, sz.cy); + BitBlt(dcBmp, 0, 0, width, height, dcTmp, 0, 0, SRCCOPY); + + DeleteObject(SelectObject(dcTmp, hBmpDcSave)); + DeleteDC(dcTmp); + + MyBitmap alpha; + if (fnAlpha && alpha.loadFromFile(fnAlpha) && + (alpha.getWidth() == width) && + (alpha.getHeight() == height) ) + { + for (int i = 0; i < width*height; i++) + bits[i] = (bits[i] & 0x00ffffff) | ( (alpha.bits[i] & 0x000000ff) << 24 ); + premultipleChannels(); + } else + { + makeOpaque(); + } + return true; + } + // unreachable place + return false; +} + +void MyBitmap::allocate(int w, int h) +{ + width = w; + height = h; + + BITMAPINFO bi; + + bi.bmiHeader.biSize = sizeof(bi.bmiHeader); + bi.bmiHeader.biWidth = w; + bi.bmiHeader.biHeight = -h; + bi.bmiHeader.biPlanes = 1; + bi.bmiHeader.biBitCount = 32; + bi.bmiHeader.biCompression = BI_RGB; + + if (dcBmp) + { + DeleteObject(SelectObject(dcBmp, hBmpSave)); + DeleteDC(dcBmp); + } + + hBmp = (HBITMAP)CreateDIBSection(0, &bi, DIB_RGB_COLORS, (void **)&bits, 0, 0); + dcBmp = CreateCompatibleDC(0); + hBmpSave = (HBITMAP)SelectObject(dcBmp, hBmp); +} + +void MyBitmap::free() +{ + DeleteObject(SelectObject(dcBmp, hBmpSave)); + DeleteDC(dcBmp); + + dcBmp = 0; + hBmp = 0; + bits = 0; + width = height = 0; +} + +void MyBitmap::premultipleChannels() +{ + for (int i = 0; i < width*height; i++) + bits[i] = rgba(getr(bits[i])*geta(bits[i])/255, getg(bits[i])*geta(bits[i])/255, getb(bits[i])*geta(bits[i])/255, geta(bits[i])); +} \ No newline at end of file diff --git a/plugins/SplashScreen/src/bitmap_funcs.h b/plugins/SplashScreen/src/bitmap_funcs.h new file mode 100644 index 0000000000..f82e909ad2 --- /dev/null +++ b/plugins/SplashScreen/src/bitmap_funcs.h @@ -0,0 +1,77 @@ +#ifndef __bitmap_funcs_h__ +#define __bitmap_funcs_h__ + +// This should make bitmap manipulations much easier... +class MyBitmap +{ +public: + typedef unsigned long COLOR32; + static inline COLOR32 RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0xff) + { + return (a << 24) | (r << 16) | (g << 8) | b; + }; + +private: + HBITMAP hBmpSave, hBmp; + HDC dcBmp; + COLOR32 *bits; + COLOR32 *bitsSave; + int width, height; + + void allocate(int w, int h); + void free(); + + void premultipleChannels(); + +public: + MyBitmap(); + MyBitmap(int w, int h); + MyBitmap(TCHAR *fn, TCHAR *fnAlpha = 0); + ~MyBitmap(); + + bool loadFromFile(TCHAR *fn, TCHAR *fnAlpha = 0); + + int getWidth() { return width; } + int getHeight() { return height; } + + HDC getDC() { return dcBmp; } + HBITMAP getBitmap() { return hBmp; } + + + void makeOpaque(); + + void saveAlpha(int x = 0, int y = 0, int w = 0, int h = 0); + void restoreAlpha(int x = 0, int y = 0, int w = 0, int h = 0); + + void Blend(MyBitmap *bmp, int x, int y, int w, int h); + void DrawText(TCHAR *str, int x, int y); + + inline COLOR32 *getBits() { return bits; } + inline COLOR32 *getRow(int row) { return bits + row * width; } + inline COLOR32 *operator[] (int row) { return bits + row * width; } + + COLOR32 rgba(COLOR32 r, COLOR32 g, COLOR32 b, COLOR32 a) + { + return ((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); + } + COLOR32 getr(COLOR32 c) + { + return (c >> 16) & 0xff; + } + COLOR32 getg(COLOR32 c) + { + return (c >> 8) & 0xff; + } + COLOR32 getb(COLOR32 c) + { + return c & 0xff; + } + COLOR32 geta(COLOR32 c) + { + return (c >> 24) & 0xff; + } + + HRGN buildOpaqueRgn(); +}; + +#endif // __bitmap_funcs_h__ diff --git a/plugins/SplashScreen/src/debug.h b/plugins/SplashScreen/src/debug.h new file mode 100644 index 0000000000..70c44e250e --- /dev/null +++ b/plugins/SplashScreen/src/debug.h @@ -0,0 +1,72 @@ +#ifndef __debug_h__ +#define __debug_h__ + +#define PlugName "SplashScreen" +extern TCHAR szLogFile[MAX_PATH]; + +/* + * output a notification message. + * may accept a hContact to include the contacts nickname in the notification message... + * the actual message is using printf() rules for formatting and passing the arguments... + * + */ + +int inline _DebugPopup(HANDLE hContact, TCHAR *fmt, ...) +{ + POPUPDATAT ppd; + va_list va; + TCHAR debug[1024]; + + va_start(va, fmt); + mir_sntprintf(debug, SIZEOF(debug), fmt, va); + + if(CallService(MS_POPUP_QUERY, PUQS_GETSTATUS, 0) == 1) + { + ZeroMemory((void *)&ppd, sizeof(ppd)); + ppd.lchContact = hContact; + ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA); + if(hContact != 0) + _tcsncpy_s(ppd.lptzContactName, (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR), MAX_CONTACTNAME); + else + _tcsncpy_s(ppd.lptzContactName, _T(PlugName), MAX_CONTACTNAME); + _tcsncpy_s(ppd.lptzText, debug, MAX_SECONDLINE - 20); + ppd.colorText = RGB(255,255,255); + ppd.colorBack = RGB(255,0,0); + CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0); + } + return 0; +} + +/* + * initialize logfile + */ + +int inline initLog() +{ + fclose(_tfopen(szLogFile, _T("w"))); + return 0; +} + +/* + * log timestamp + */ + +void inline logTimeStamp() +{ + FILE *f = _tfopen(szLogFile, _T("a")); + _ftprintf(f, _T("Time:\t\t\t\t%s\n"), _T(__TIME__)); + fclose(f); +} + +/* + * logging func + */ + +void inline logMessage(TCHAR *func, TCHAR *msg) +{ + FILE *f = _tfopen(szLogFile, _T("a")); + _ftprintf(f, _T("%s:\t\t%s\n"), func, msg); + fclose(f); +} + +#endif // __debug_h__ \ No newline at end of file diff --git a/plugins/SplashScreen/src/headers.h b/plugins/SplashScreen/src/headers.h new file mode 100644 index 0000000000..78e87d40d4 --- /dev/null +++ b/plugins/SplashScreen/src/headers.h @@ -0,0 +1,119 @@ +/* + Splash Screen Plugin for Miranda-IM (www.miranda-im.org) + (c) 2004-2007 nullbie, (c) 2005-2007 Thief + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + File name : $URL: http://svn.miranda.im/mainrepo/splashscreen/trunk/src/headers.h $ + Revision : $Rev: 1587 $ + Last change on : $Date: 2010-04-09 14:01:30 +0400 (Пт, 09 апр 2010) $ + Last change by : $Author: Thief $ +*/ + +#ifndef HEADERS_H +#define HEADERS_H + +#define MIRANDA_VER 0x0900 +#define MIRANDA_CUSTOM_LP + +#define _WIN32_WINNT 0x0500 +#define WINVER 0x0400 +#define AC_SRC_ALPHA 0x01 +#define OEMRESOURCE +#define _CRT_SECURE_NO_DEPRECATE + +#include +#include +#include +#include +#include + +// Miranda API headers +#include +#include +#include +#include +#include +#include +#include +#include +#include "m_updater.h" +#include "m_splash.h" + +// Common headers +#include "version.h" +#include "resource.h" +#include "bitmap_funcs.h" + +#ifdef _DEBUG + #include + #include + #include + #include "debug.h" +#endif + +// Internal defines +#define SPLASH_CLASS "MirandaSplash" +#define MODNAME "SplashScreen" +#define WM_LOADED (WM_USER + 10) + +#ifdef _UNICODE + #define tmemcpy wmemcpy +#else + #define tmemcpy memcpy +#endif + +struct SPLASHOPTS +{ + byte active; + byte playsnd; + byte loopsnd; + byte runonce; + byte fadein; + byte fadeout; + byte inheritGS; + byte random; + byte showversion; + byte fontsize; + int showtime; + int fosteps; + int fisteps; +}; + +extern HWND hwndSplash; +extern SPLASHOPTS options; +extern TCHAR szSplashFile[MAX_PATH], szSoundFile[MAX_PATH], szPrefix[128]; +extern TCHAR *szMirDir; +extern char szVersion[MAX_PATH]; +extern BOOL bserviceinvoked, bmodulesloaded, png2dibavail; +extern HANDLE hSplashThread; +extern HINSTANCE hInst; + +extern BOOL (WINAPI *MyUpdateLayeredWindow) + (HWND hwnd, HDC hdcDST, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, + COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags); +// png2dib interface +typedef BOOL ( *pfnConvertPng2dib )( char*, size_t, BITMAPINFOHEADER** ); +extern pfnConvertPng2dib png2dibConvertor; + +extern int OptInit(WPARAM wParam, LPARAM lParam); +extern BOOL ShowSplash(BOOL bpreview); +extern VOID ReadIniConfig(); +extern INT_PTR ShowSplashService(WPARAM wparam,LPARAM lparam); +#ifdef _DEBUG + extern INT_PTR TestService(WPARAM wParam,LPARAM lParam); +#endif + +#endif //HEADERS_H diff --git a/plugins/SplashScreen/src/main.cpp b/plugins/SplashScreen/src/main.cpp new file mode 100644 index 0000000000..4e18efd5b7 --- /dev/null +++ b/plugins/SplashScreen/src/main.cpp @@ -0,0 +1,433 @@ +/* + Splash Screen Plugin for Miranda-IM (www.miranda-im.org) + (c) 2004-2007 nullbie, (c) 2005-2007 Thief + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + File name : $URL: http://svn.miranda.im/mainrepo/splashscreen/trunk/src/main.cpp $ + Revision : $Rev: 1586 $ + Last change on : $Date: 2010-04-09 13:34:01 +0400 (Пт, 09 апр 2010) $ + Last change by : $Author: Thief $ + +*/ + +#include "headers.h" + +HINSTANCE hInst = 0; +PLUGINLINK *pluginLink; +struct MM_INTERFACE mmi; +int hLangpack; + +static HMODULE hUserDll = NULL; +static HMODULE hAdvaimg = NULL; + +pfnConvertPng2dib png2dibConvertor = NULL; + +BOOL bstartup = true; // startup? +BOOL bserviceinvoked = false; +BOOL bmodulesloaded = false; // modules are loaded +BOOL png2dibavail = true; // can we use png2dib service? + +// path to miranda's dir, config file path, splash path, sound path +TCHAR szDllName[MAX_PATH], szSplashFile[MAX_PATH], szSoundFile[MAX_PATH], szhAdvaimgPath[MAX_PATH], szPrefix[128], inBuf[80]; +TCHAR * szMirDir; +char szVersion[MAX_PATH]; +HANDLE hShowSplashService, hTestService; +#ifdef _DEBUG + TCHAR szLogFile[MAX_PATH]; +#endif +SPLASHOPTS options; +HWND hwndSplash; +BOOL (WINAPI *MyUpdateLayeredWindow) + (HWND hwnd, HDC hdcDST, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, + COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags); +HANDLE hSplashThread, hModulesLoaded, hPlugDisableHook, hOptInit, hSystemOKToExit; + +PLUGININFOEX pluginInfo={ + sizeof(PLUGININFOEX), + __PLUGIN_NAME, + PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), + __DESCRIPTION, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE, + 0, + MIID_SPLASHSCREEN +}; + +extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) +{ + static const MUUID interfaces[] = {MIID_SPLASHSCREEN, MIID_LAST}; + return interfaces; +} + +extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + hInst = hinstDLL; + return TRUE; +} + +void SplashMain() +{ + if (bstartup) + { + // Retrive path to exe of current running Miranda is located + szMirDir = Utils_ReplaceVarsT(_T("%miranda_path%")); + mir_sntprintf(szhAdvaimgPath, SIZEOF(szhAdvaimgPath), _T("%s\\plugins\\advaimg.dll"), szMirDir); + CallService(MS_SYSTEM_GETVERSIONTEXT, MAX_PATH, (LPARAM)szVersion); + + #ifdef _DEBUG + mir_sntprintf(szLogFile, SIZEOF(szLogFile), _T("%s\\%s.log"), szMirDir, _T(__INTERNAL_NAME)); + initLog(); + logTimeStamp(); + TCHAR* mirandaVerString = mir_a2t(szVersion); + logMessage(_T("Miranda version"), mirandaVerString); + mir_free(mirandaVerString); + logMessage(_T("Dll Name"), _T(__FILENAME)); + logMessage(_T("Advaimg path"), szhAdvaimgPath); + #endif + + ReadIniConfig(); + } + + if (bstartup & (options.active == 1)) + { + if (options.runonce) + { + DBWriteContactSettingByte(NULL, MODNAME, "Active", 0); + DBWriteContactSettingByte(NULL, MODNAME, "DisableAfterStartup", 0); + } + + if (hUserDll == NULL) + { + hUserDll = LoadLibrary(_T("user32.dll")); + if (hUserDll) + MyUpdateLayeredWindow = (BOOL (WINAPI *)(HWND, HDC, POINT *, SIZE *, HDC, POINT *, COLORREF, BLENDFUNCTION *, DWORD))GetProcAddress(hUserDll, "UpdateLayeredWindow"); + } + + if (hAdvaimg == NULL) + { + hAdvaimg = LoadLibrary(szhAdvaimgPath); + if (hAdvaimg == NULL) + { + png2dibavail = false; + bstartup = false; + } + if (hAdvaimg) + { + png2dibConvertor = (pfnConvertPng2dib) GetProcAddress(hAdvaimg, "mempng2dib"); + if (png2dibConvertor == NULL) + { + FreeLibrary(hAdvaimg); hAdvaimg = NULL; + MessageBox(NULL, + _T("Your advaimg.dll is either obsolete or damaged. Get latest from Miranda alpha builds."), + _T("Error"), + MB_OK | MB_ICONSTOP); + } + #ifdef _DEBUG + if (png2dibConvertor) + logMessage(_T("Loading advaimg"), _T("done")); + #endif + } + } + + //for 9x "alfa" testing + //MyUpdateLayeredWindow = 0; + DBVARIANT dbv = {0}; + DBGetContactSettingTString(NULL, MODNAME, "VersionPrefix", &dbv); + if (lstrcmp(dbv.ptszVal, NULL) == 0) + { + _tcscpy_s(szPrefix, _T("")); + DBFreeVariant(&dbv); + } + else + _tcscpy_s(szPrefix, dbv.ptszVal); + dbv.ptszVal = NULL; + + DBGetContactSettingTString(NULL, MODNAME, "Path", &dbv); + if (lstrcmp(dbv.ptszVal, NULL) == 0) + { + _tcscpy_s(inBuf, _T("splash\\splash.png")); + DBFreeVariant(&dbv); + } + else + _tcscpy_s(inBuf, dbv.ptszVal); + dbv.ptszVal = NULL; + + TCHAR szExpandedSplashFile[MAX_PATH]; + ExpandEnvironmentStrings(inBuf, szExpandedSplashFile, SIZEOF(szExpandedSplashFile)); + lstrcpy(inBuf, szExpandedSplashFile); + + TCHAR *pos3 = 0; + pos3 = _tcsrchr(inBuf, _T(':')); + if (pos3 == NULL) + mir_sntprintf(szSplashFile, SIZEOF(szSplashFile), _T("%s\\%s"), szMirDir, inBuf); + else + lstrcpy(szSplashFile, inBuf); + + DBGetContactSettingTString(NULL, MODNAME, "Sound", &dbv); + if (lstrcmp(dbv.ptszVal, NULL) == 0) + { + _tcscpy_s(inBuf, _T("sounds\\startup.wav")); + DBFreeVariant(&dbv); + } + else + _tcscpy_s(inBuf, dbv.ptszVal); + + TCHAR szExpandedSoundFile[MAX_PATH]; + ExpandEnvironmentStrings(inBuf, szExpandedSoundFile, SIZEOF(szExpandedSoundFile)); + lstrcpy(inBuf, szExpandedSoundFile); + + TCHAR *pos2; + pos2 = _tcschr(inBuf, _T(':')); + if (pos2 == NULL) + mir_sntprintf(szSoundFile, SIZEOF(szSoundFile), _T("%s\\%s"), szMirDir, inBuf); + else + lstrcpy(szSoundFile, inBuf); + + #ifdef _DEBUG + logMessage(_T("SoundFilePath"), szSoundFile); + #endif + + TCHAR szOldPath[MAX_PATH] = {0}; + + if(options.random) // randomly select a splash file + { + int filescount = 0; + TCHAR szSplashDir[MAX_PATH] = {0}, szSearch[MAX_PATH] = {0}; + TCHAR* p = 0; + TCHAR files [255][50]; //TODO: make memory allocation dynamic + + lstrcpy(szSplashDir, szSplashFile); + lstrcpy(szOldPath, szSplashFile); + // find the last \ and null it out, this leaves no trailing slash + p = _tcsrchr(szSplashDir, _T('\\')); + if (p) *p = 0; + // create the search filter + mir_sntprintf(szSearch, SIZEOF(szSearch), _T("%s\\*.*"), szSplashDir); + // FFFN will return filenames + HANDLE hFind = INVALID_HANDLE_VALUE; + WIN32_FIND_DATA ffd; + hFind = FindFirstFile(szSearch, &ffd); + if ( hFind != INVALID_HANDLE_VALUE ) + { + do + { + if (!(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)) + { + #ifdef _DEBUG + logMessage(_T("Found file"), ffd.cFileName); + #endif + //files = new char[strlen(ffd.cFileName)]; + //files[filescount] = new char[strlen(ffd.cFileName)]; + TCHAR ext[5]; + tmemcpy(ext, ffd.cFileName + (_tcslen(ffd.cFileName)-4), 5); + + #ifdef _DEBUG + logMessage(_T("Extention"), ext); + #endif + + if (lstrcmpi(ext, _T(".png")) & lstrcmpi(ext, _T(".bmp"))) + continue; + + #ifdef _DEBUG + logMessage(_T("File has valid ext"), ext); + #endif + _tcscpy_s(files[filescount++], ffd.cFileName); + } //if + } while (FindNextFile(hFind, &ffd)); + + srand((unsigned) time(NULL)); + int r = 0; + if (filescount) r = (rand() % filescount) + 1; + + mir_sntprintf(szSplashFile, SIZEOF(szSplashFile), _T("%s\\%s"), szSplashDir, files[r-1]); + + #ifdef _DEBUG + logMessage(_T("final file"), szSplashFile); + #endif + FindClose(hFind); + } //if + } + + // Call splash display routine + ShowSplash(false); + } + bstartup = false; +} + +int onSystemOKToExit(WPARAM wParam,LPARAM lParam) +{ + // Hooked events need to be unhooked + UnhookEvent(hModulesLoaded); + UnhookEvent(hSystemOKToExit); + UnhookEvent(hPlugDisableHook); + UnhookEvent(hOptInit); + + DestroyServiceFunction(hShowSplashService); + #ifdef _DEBUG + DestroyServiceFunction(hTestService); + #endif + + return 0; +} + +int PlugDisableHook(WPARAM wParam, LPARAM lParam) +{ + #ifdef _DEBUG + TCHAR buf [128]; + #endif + DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; + TCHAR * tszModule= mir_a2t(cws->szModule), *tszSetting = mir_a2t(cws->szSetting); + if(options.inheritGS) + { + if (!lstrcmp(tszModule, _T("Skin")) & !lstrcmp(tszSetting, _T("UseSound"))) + { + DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", cws->value.bVal); + #ifdef _DEBUG + cws->value.bVal ? _DebugPopup(NULL, _T("Sounds enabled."), _T("")) : _DebugPopup(NULL, _T("Sounds disabled."), _T("")); + logMessage(_T("Module"), tszModule); + logMessage(_T("Setting"), tszSetting); + logMessage(_T("Value"), _itot(cws->value.bVal, buf, 10)); + #endif + } + if (!lstrcmp(tszModule, _T("PluginDisable")) & (!lstrcmp(tszSetting, szDllName))) + { + DBWriteContactSettingByte(NULL, MODNAME, "Active", cws->value.bVal); + #ifdef _DEBUG + cws->value.bVal ? _DebugPopup(NULL, _T("Disabled."), "") : _DebugPopup(NULL, _T("Enabled."), _T("")); + logMessage(_T("PlugDisableHook"), _T("Triggered")); + logMessage(_T("Module"), tszModule); + logMessage(_T("Setting"), tszSetting); + logMessage(_T("Value"), _itot(cws->value.bVal, buf, 10)); + #endif + } + } + mir_free(tszModule); + mir_free(tszSetting); + + return 0; +} + +int ModulesLoaded(WPARAM wParam, LPARAM lParam) +{ + bmodulesloaded = true; // all modules are loaded now, let other parts know about this fact + + if (hwndSplash) + { + if (PostMessage(hwndSplash, WM_LOADED, 0, 0)) + { + #ifdef _DEBUG + logMessage(_T("Posted WM_LOADED message"), _T("done")); + #endif + } + } + + // Options initialize hook + hOptInit = HookEvent(ME_OPT_INITIALISE, OptInit); + + hPlugDisableHook = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, PlugDisableHook); + + // Service to call splash + hShowSplashService = CreateServiceFunction(MS_SHOWSPLASH, ShowSplashService); + + #ifdef _DEBUG + hTestService = CreateServiceFunction("Splash/Test", TestService); + CLISTMENUITEM mi; + ZeroMemory(&mi,sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.flags = CMIF_TCHAR; + mi.hIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA); + mi.hotKey = 0; + mi.position = -0x7FFFFFFF; + mi.ptszName = _T("Call Splash Service"); + mi.pszService = "Splash/Test"; + + CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi); + #endif + + if (ServiceExists(MS_UPDATE_REGISTER)) + { + // register with updater + Update update = {0}; + char szVersion[16]; + + update.cbSize = sizeof(Update); + + update.szComponentName = pluginInfo.shortName; + update.pbVersion = (BYTE *)CreateVersionString(pluginInfo.version, szVersion); + update.cpbVersion = (int)strlen((char *)update.pbVersion); + + update.szUpdateURL = UPDATER_AUTOREGISTER; + + // these are the three lines that matter - the archive, the page containing the version string, and the text (or data) + // before the version that we use to locate it on the page + // (note that if the update URL and the version URL point to standard file listing entries, the backend xml + // data will be used to check for updates rather than the actual web page - this is not true for beta urls) + update.szBetaUpdateURL = "http://thief.miranda.im/advsplashscreen.zip"; + update.szBetaVersionURL = "http://thief.miranda.im/updater/splash_version.txt"; + update.szBetaChangelogURL = "http://thief.miranda.im"; + update.pbBetaVersionPrefix = (BYTE *)"Splash Screen "; + + update.cpbBetaVersionPrefix = (int)strlen((char *)update.pbBetaVersionPrefix); + + CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update); + } + + #ifdef _DEBUG + logMessage(_T("Loading modules"), _T("done")); + #endif + + return 0; +} + +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + return &pluginInfo; +} + +extern "C" int __declspec(dllexport) Load(PLUGINLINK *link) +{ + pluginLink = link; + mir_getLP(&pluginInfo); + mir_getMMI(&mmi); + + hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); + hSystemOKToExit = HookEvent(ME_SYSTEM_OKTOEXIT,onSystemOKToExit); + + SplashMain(); + mir_free(szMirDir); + + return 0; +} + +extern "C" int __declspec(dllexport) Unload(void) +{ + if (hSplashThread) CloseHandle(hSplashThread); + + UnregisterClass(_T(SPLASH_CLASS), hInst); + + // Freeing loaded libraries + if (hUserDll) FreeLibrary(hUserDll); + if (hAdvaimg) FreeLibrary(hAdvaimg); + + #ifdef _DEBUG + logMessage(_T("Unload"), _T("Job done")); + #endif + + return 0; +} \ No newline at end of file diff --git a/plugins/SplashScreen/src/msvc6.rc b/plugins/SplashScreen/src/msvc6.rc new file mode 100644 index 0000000000..e79d7e3a96 --- /dev/null +++ b/plugins/SplashScreen/src/msvc6.rc @@ -0,0 +1,2 @@ +#include "splash.rc" +#include "version.rc" diff --git a/plugins/SplashScreen/src/options.cpp b/plugins/SplashScreen/src/options.cpp new file mode 100644 index 0000000000..b400eca26d --- /dev/null +++ b/plugins/SplashScreen/src/options.cpp @@ -0,0 +1,448 @@ +/* +Splash Screen Plugin for Miranda-IM (www.miranda-im.org) +(c) 2004-2007 nullbie, (c) 2005-2007 Thief + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +File name : $URL: http://svn.miranda.im/mainrepo/splashscreen/trunk/src/options.cpp $ +Revision : $Rev: 951 $ +Last change on : $Date: 2007-10-16 18:46:53 +0400 (Ð’Ñ‚, 16 окт 2007) $ +Last change by : $Author: Thief $ + +DESCRIPTION: Options dialog handling code + +*/ + +#include "headers.h" + +TCHAR szPath2Spash [MAX_PATH], szSoundFilePath[MAX_PATH]; + +// Reads values from db +void ReadIniConfig() +{ + options.active = DBGetContactSettingByte(NULL, MODNAME, "Active", 1); + options.playsnd = DBGetContactSettingByte(NULL, MODNAME, "PlaySound", 0); + options.fadein = DBGetContactSettingByte(NULL, MODNAME, "FadeIn", 1); + options.fadeout = DBGetContactSettingByte(NULL, MODNAME, "FadeOut", 1); + options.showtime = DBGetContactSettingDword(NULL, MODNAME, "TimeToShow", 2000); + options.fisteps = DBGetContactSettingDword(NULL, MODNAME, "FadeinSpeed", 5); + options.fosteps = DBGetContactSettingDword(NULL, MODNAME, "FadeoutSpeed", 5); + options.inheritGS = DBGetContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 1); + options.showversion = DBGetContactSettingByte(NULL, MODNAME, "ShowVersion", 0); + options.random = DBGetContactSettingByte(NULL, MODNAME, "Random", 0); + options.runonce = DBGetContactSettingByte(NULL, MODNAME, "DisableAfterStartup", 0); +} + +BOOL Exists(LPCTSTR strName) +{ + return GetFileAttributes(strName) != INVALID_FILE_ATTRIBUTES; +} + +INT_PTR CALLBACK DlgProcOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + if (!png2dibavail) + { + ShowWindow(GetDlgItem(hwndDlg, IDC_PNG2DIBWARN), SW_SHOW); + EnableWindow(GetDlgItem(hwndDlg, IDC_ACTIVE), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_RANDOM), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_SPLASHPATH), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHOOSESPLASH), false); + } + ReadIniConfig(); + TCHAR inBuf[80]; + DBVARIANT dbv = {0}; + DBGetContactSettingTString(NULL, MODNAME, "Path", &dbv); + if (lstrcmp(dbv.ptszVal, NULL) == 0) + { + _tcscpy_s(inBuf, _T("splash\\splash.png")); + DBFreeVariant(&dbv); + } + else + _tcscpy_s(inBuf, dbv.ptszVal); + dbv.ptszVal = NULL; + SetWindowText(GetDlgItem(hwndDlg, IDC_SPLASHPATH),inBuf); + DBGetContactSettingTString(NULL, MODNAME, "Sound", &dbv); + if (lstrcmp(dbv.ptszVal, NULL) == 0) + { + _tcscpy_s(inBuf, _T("sounds\\startup.wav")); + DBFreeVariant(&dbv); + } + else + _tcscpy_s(inBuf, dbv.ptszVal); + dbv.ptszVal = NULL; + SetWindowText(GetDlgItem(hwndDlg, IDC_SNDPATH),inBuf); + DBGetContactSettingTString(NULL, MODNAME, "VersionPrefix", &dbv); + if (lstrcmp(dbv.ptszVal, NULL) == 0) + { + _tcscpy_s(inBuf, _T("")); + DBFreeVariant(&dbv); + } + else + _tcscpy_s(inBuf, dbv.ptszVal); + dbv.ptszVal = NULL; + SetWindowText(GetDlgItem(hwndDlg, IDC_VERSIONPREFIX), inBuf); + if (options.active) CheckDlgButton(hwndDlg, IDC_ACTIVE, BST_CHECKED); + if (options.playsnd && !options.inheritGS) CheckDlgButton(hwndDlg, IDC_PLAYSND, BST_INDETERMINATE); + else if (options.playsnd) CheckDlgButton(hwndDlg, IDC_PLAYSND, BST_CHECKED); + //if (options.loopsnd) CheckDlgButton(hwndDlg, IDC_LOOPSOUND, BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_LOOPSOUND), false); + if (options.fadein) CheckDlgButton(hwndDlg, IDC_FADEIN, BST_CHECKED); + if (options.fadeout) CheckDlgButton(hwndDlg, IDC_FADEOUT, BST_CHECKED); + if (options.random) CheckDlgButton(hwndDlg, IDC_RANDOM, BST_CHECKED); + if (options.showversion) CheckDlgButton(hwndDlg, IDC_SHOWVERSION, BST_CHECKED); + + SetWindowText(GetDlgItem(hwndDlg, IDC_SHOWTIME), _itot(options.showtime, inBuf, 10)); + SetWindowText(GetDlgItem(hwndDlg, IDC_FISTEP), _itot(options.fisteps, inBuf, 10)); + SetWindowText(GetDlgItem(hwndDlg, IDC_FOSTEP), _itot(options.fosteps, inBuf, 10)); + + SendDlgItemMessage(hwndDlg, IDC_SHOWTIME, EM_LIMITTEXT, 5, 0); + /* + SendDlgItemMessage(hwndDlg, IDC_ST_SPIN, UDM_SETRANGE32, 0, 20000); + SendDlgItemMessage(hwndDlg, IDC_FI_SPIN, UDM_SETRANGE32, 1, 7); + SendDlgItemMessage(hwndDlg, IDC_FO_SPIN, UDM_SETRANGE32, 1, 7); + */ + + return TRUE; + } + + case WM_COMMAND: + { + switch(LOWORD(wParam)) + { + case IDC_PREVIEW: + { + ShowSplash(true); + break; + } + + case IDC_ACTIVE: + case IDC_PLAYSND: + case IDC_LOOPSOUND: + case IDC_FADEIN: + case IDC_FADEOUT: + case IDC_SHOWTIME: + case IDC_RANDOM: + case IDC_SHOWVERSION: + case IDC_FISTEP: + case IDC_FOSTEP: + { + if (IsDlgButtonChecked(hwndDlg, IDC_FADEIN)) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_FISTEP), true); + EnableWindow(GetDlgItem(hwndDlg, IDC_FI_SPIN), true); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_FISTEP), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_FI_SPIN), false); + } + if (IsDlgButtonChecked(hwndDlg, IDC_FADEOUT)) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_FOSTEP), true); + EnableWindow(GetDlgItem(hwndDlg, IDC_FO_SPIN), true); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_FOSTEP), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_FO_SPIN), false); + } + + if ((HWND)lParam != GetFocus()) + return 0; + else { + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + } + break; + } + + case IDC_CHOOSESPLASH: + { + TCHAR szTempPath[MAX_PATH], initDir[MAX_PATH]; + TCHAR *pos; + + if (Exists(szSplashFile)) + { + lstrcpy(initDir, szSplashFile); + pos = _tcsrchr(initDir, _T('\\')); + if(pos != NULL) *pos = 0; + } + else + { + szMirDir = Utils_ReplaceVarsT(_T("%miranda_path%")); + lstrcpy(initDir, szMirDir); + mir_free(szMirDir); + } + + OPENFILENAME ofn = {0}; + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + TCHAR tmp[MAX_PATH]; + mir_sntprintf(tmp, SIZEOF(tmp), _T("%s (*.png, *.bmp)%c*.png;*.bmp%c%c"), TranslateT("Graphic files"), 0, 0, 0); + ofn.lpstrFilter = tmp; + ofn.hwndOwner = 0; + ofn.lpstrFile = szTempPath; + ofn.nMaxFile = MAX_PATH; + ofn.nMaxFileTitle = MAX_PATH; + ofn.Flags = OFN_HIDEREADONLY; + ofn.lpstrInitialDir = initDir; + *szTempPath = '\0'; + ofn.lpstrDefExt = _T(""); + + if (GetOpenFileName(&ofn)) + { + lstrcpy(szSplashFile, szTempPath); + + #ifdef _DEBUG + logMessage(_T("Set path"), szSplashFile); + #endif + + // Make path relative + int result = CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)szTempPath, (LPARAM)szPath2Spash); + + if(result && lstrlen(szPath2Spash) > 0) + { + if (options.random) + { + TCHAR *pos; + pos = _tcsrchr(szPath2Spash, _T('\\')); + if (pos != NULL) + { + *pos = 0; + lstrcat(szPath2Spash, _T("\\")); + } + } + + SetWindowText(GetDlgItem(hwndDlg, IDC_SPLASHPATH), szPath2Spash); + } + + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + + break; + } + + case IDC_CHOOSESND: + { + TCHAR szTempPath[MAX_PATH], initDir[MAX_PATH]; + TCHAR *pos; + + if (Exists(szSoundFile)) + { + lstrcpy(initDir, szSoundFile); + pos = _tcsrchr(initDir, _T('\\')); + if(pos != NULL) *pos = 0; + } + else + { + szMirDir = Utils_ReplaceVarsT(_T("%miranda_path%")); + lstrcpy(initDir, szMirDir); + mir_free(szMirDir); + } + + OPENFILENAME ofn = {0}; + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + TCHAR tmp[MAX_PATH]; + mir_sntprintf(tmp, SIZEOF(tmp), _T("%s (*.wav, *.mp3)%c*.wav;*.mp3%c%c"), TranslateT("Sound Files"), 0, 0, 0); + ofn.lpstrFilter = tmp; + ofn.hwndOwner = 0; + ofn.lpstrFile = szTempPath; + ofn.nMaxFile = MAX_PATH; + ofn.nMaxFileTitle = MAX_PATH; + ofn.Flags = OFN_HIDEREADONLY; + ofn.lpstrInitialDir = initDir; + *szTempPath = '\0'; + ofn.lpstrDefExt = _T(""); + + if (GetOpenFileName(&ofn)) + { + lstrcpy(szSoundFile,szTempPath); + + #ifdef _DEBUG + logMessage(_T("Set sound path"), szSoundFile); + #endif + + // Make path relative + int result = CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)szTempPath, (LPARAM)szSoundFilePath); + + if(result && lstrlen(szSoundFile) > 0) + SetWindowText(GetDlgItem(hwndDlg, IDC_SNDPATH),szSoundFilePath); + + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + + break; + } + } + + default: + { + if (HIWORD(wParam) != EN_CHANGE || (HWND) lParam != GetFocus()) + return 0; + else + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + break; + } + + case WM_NOTIFY: + { + if (((LPNMHDR)lParam)->idFrom == 0) + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + TCHAR tmp[MAX_PATH]; + + GetWindowText(GetDlgItem(hwndDlg, IDC_SPLASHPATH), tmp, MAX_PATH); + DBWriteContactSettingTString(NULL, MODNAME, "Path", tmp); + + GetWindowText(GetDlgItem(hwndDlg, IDC_SNDPATH), tmp, MAX_PATH); + DBWriteContactSettingTString(NULL, MODNAME, "Sound", tmp); + + GetWindowText(GetDlgItem(hwndDlg, IDC_VERSIONPREFIX), tmp, MAX_PATH); + DBWriteContactSettingTString(NULL, MODNAME, "VersionPrefix", tmp); + lstrcpy(szPrefix, tmp); + + GetWindowText(GetDlgItem(hwndDlg, IDC_SHOWTIME), tmp, MAX_PATH); + DBWriteContactSettingDword(NULL, MODNAME, "TimeToShow", _ttoi(tmp)); + options.showtime = _ttoi(tmp); + + GetWindowText(GetDlgItem(hwndDlg, IDC_FISTEP), tmp, MAX_PATH); + DBWriteContactSettingDword(NULL, MODNAME, "FadeinSpeed", _ttoi(tmp)); + options.fisteps = _ttoi(tmp); + + GetWindowText(GetDlgItem(hwndDlg, IDC_FOSTEP), tmp, MAX_PATH); + DBWriteContactSettingDword(NULL, MODNAME, "FadeoutSpeed", _ttoi(tmp)); + options.fosteps = _ttoi(tmp); + + if (IsDlgButtonChecked(hwndDlg, IDC_ACTIVE)) + { + DBWriteContactSettingByte(NULL, MODNAME, "Active", 1); + options.active = 1; + } + else + { + DBWriteContactSettingByte(NULL, MODNAME, "Active", 0); + options.active = 0; + } + + if (IsDlgButtonChecked(hwndDlg, IDC_PLAYSND)) + { + DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", 1); + options.playsnd = 1; + DBWriteContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 1); + options.inheritGS = 1; + } + else + { + DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", 0); + options.playsnd = 0; + DBWriteContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 0); + options.inheritGS = 0; + } + + if (IsDlgButtonChecked(hwndDlg, IDC_PLAYSND) == BST_INDETERMINATE) + { + DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", 1); + options.playsnd = 1; + DBWriteContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 0); + options.inheritGS = 0; + } + + /* + if (IsDlgButtonChecked(hwndDlg, IDC_LOOPSOUND)) + { + WritePrivateProfileString("Splash","LoopSound","1",szIniFile); + options.loopsnd = 1; + } + else + { + WritePrivateProfileString("Splash","LoopSound","0",szIniFile); + options.loopsnd = 0; + } + */ + + if (IsDlgButtonChecked(hwndDlg, IDC_FADEIN)) + { + DBWriteContactSettingByte(NULL, MODNAME, "FadeIn", 1); + options.fadein = 1; + } + else + { + DBWriteContactSettingByte(NULL, MODNAME, "FadeIn", 0); + options.fadein = 0; + } + if (IsDlgButtonChecked(hwndDlg, IDC_FADEOUT)) + { + DBWriteContactSettingByte(NULL, MODNAME, "FadeOut", 1); + options.fadeout = 1; + } + else + { + DBWriteContactSettingByte(NULL, MODNAME, "FadeOut", 0); + options.fadeout = 0; + } + if (IsDlgButtonChecked(hwndDlg, IDC_RANDOM)) + { + DBWriteContactSettingByte(NULL, MODNAME, "Random", 1); + options.random = 1; + } + else + { + DBWriteContactSettingByte(NULL, MODNAME, "Random", 0); + options.random = 0; + } + if (IsDlgButtonChecked(hwndDlg, IDC_SHOWVERSION)) + { + DBWriteContactSettingByte(NULL, MODNAME, "ShowVersion", 1); + options.showversion = 1; + } + else + { + DBWriteContactSettingByte(NULL, MODNAME, "ShowVersion", 0); + options.showversion = 0; + } + return TRUE; + } + } + } + + case WM_DESTROY: + break; + } + return FALSE; +} + +int OptInit(WPARAM wParam, LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp; + + ZeroMemory(&odp, sizeof(odp)); + odp.cbSize = sizeof(odp); + odp.position = 0; + odp.hInstance = hInst; + odp.ptszGroup = _T("Skins"); + odp.pszTemplate = MAKEINTRESOURCEA(IDD_SPLASH_OPT); + odp.ptszTitle = _T("Splash Screen"); + odp.pfnDlgProc = DlgProcOptions; + odp.flags = ODPF_TCHAR | ODPF_BOLDGROUPS; + CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp); + return 0; +} diff --git a/plugins/SplashScreen/src/resource.h b/plugins/SplashScreen/src/resource.h new file mode 100644 index 0000000000..94480d0ce5 --- /dev/null +++ b/plugins/SplashScreen/src/resource.h @@ -0,0 +1,36 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by splash.rc +// +#define IDD_SPLASH_OPT 102 +#define IDC_CHOOSESPLASH 1004 +#define IDC_SPLASHPATH 1005 +#define IDC_PREVIEW 1006 +#define IDC_ACTIVE 1007 +#define IDC_SNDPATH 1008 +#define IDC_FADEIN 1009 +#define IDC_FADEOUT 1010 +#define IDC_CHOOSESND 1011 +#define IDC_PLAYSND 1012 +#define IDC_SHOWTIME 1013 +#define IDC_ST_SPIN 1014 +#define IDC_FISTEP 1015 +#define IDC_FI_SPIN 1016 +#define IDC_FOSTEP 1017 +#define IDC_FO_SPIN 1018 +#define IDC_RANDOM 1019 +#define IDC_LOOPSOUND 1022 +#define IDC_SHOWVERSION 1023 +#define IDC_VERSIONPREFIX 1024 +#define IDC_PNG2DIBWARN 1025 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 104 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1026 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/plugins/SplashScreen/src/services.cpp b/plugins/SplashScreen/src/services.cpp new file mode 100644 index 0000000000..7d4730c8f3 --- /dev/null +++ b/plugins/SplashScreen/src/services.cpp @@ -0,0 +1,74 @@ +/* + Splash Screen Plugin for Miranda-IM (www.miranda-im.org) + (c) 2004-2007 nullbie, (c) 2005-2007 Thief + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + File name : $URL: http://svn.miranda.im/mainrepo/splashscreen/trunk/src/services.cpp $ + Revision : $Rev: 951 $ + Last change on : $Date: 2007-10-16 18:46:53 +0400 (Ð’Ñ‚, 16 окт 2007) $ + Last change by : $Author: Thief $ + +*/ + +#include "headers.h" + +INT_PTR ShowSplashService(WPARAM wparam,LPARAM lparam) +{ + bserviceinvoked = true; + TCHAR szOldfn [256]; + TCHAR* pos; + TCHAR* filename = (TCHAR*) wparam; + int timetoshow = (int) lparam; + + lstrcpy(szOldfn, szSplashFile); + options.showtime = timetoshow; + + pos = _tcsrchr(filename, _T(':')); + if (pos == NULL) + mir_sntprintf(szSplashFile, SIZEOF(szSplashFile), _T("%s\\%s"), szMirDir, filename); + else + lstrcpy(szSplashFile, filename); + + ShowSplash(false); + + lstrcpy(szSplashFile, szOldfn); + + return 0; +} + +#ifdef _DEBUG +INT_PTR TestService(WPARAM wParam,LPARAM lParam) +{ + TCHAR szTempPath[MAX_PATH]; + + OPENFILENAME ofn={0}; + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + ofn.lpstrFilter = _T("PNG and BMP files\0*.png;*.bmp\0\0"); + ofn.hwndOwner=0; + ofn.lpstrFile = szTempPath; + ofn.nMaxFile = MAX_PATH; + ofn.nMaxFileTitle = MAX_PATH; + ofn.Flags = OFN_HIDEREADONLY; + ofn.lpstrInitialDir = szSplashFile; + *szTempPath = '\0'; + ofn.lpstrDefExt = _T(""); + + if (GetOpenFileName(&ofn)) + CallService(MS_SHOWSPLASH,(WPARAM)szTempPath,(LPARAM)0); + + return 0; +} +#endif \ No newline at end of file diff --git a/plugins/SplashScreen/src/splash.cpp b/plugins/SplashScreen/src/splash.cpp new file mode 100644 index 0000000000..05df53d142 --- /dev/null +++ b/plugins/SplashScreen/src/splash.cpp @@ -0,0 +1,434 @@ +/* +Splash Screen Plugin for Miranda-IM (www.miranda-im.org) +(c) 2004-2007 nullbie, (c) 2005-2007 Thief + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +File name : $URL: http://svn.miranda.im/mainrepo/splashscreen/trunk/src/splash.cpp $ +Revision : $Rev: 1585 $ +Last change on : $Date: 2010-04-09 13:13:29 +0400 (Пт, 09 апр 2010) $ +Last change by : $Author: ghazan $ + +*/ + +#include "headers.h" + +BOOL bpreviewruns; +MyBitmap *SplashBmp, *tmpBmp; + +LRESULT CALLBACK SplashWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_LOADED: + { + #ifdef _DEBUG + logMessage(_T("WM_LOADED"), _T("called")); + #endif + + if (!MyUpdateLayeredWindow) ShowWindow(hwndSplash, SW_SHOWNORMAL); + if (!options.showtime) SetTimer(hwnd, 7, 2000, 0); + + break; + } + + case WM_LBUTTONDOWN: + PostMessage(hwnd, WM_CLOSE, 0, 0); + break; + + case WM_TIMER: + + #ifdef _DEBUG + TCHAR b [40]; + mir_sntprintf(b, SIZEOF(b), _T("%d"), wParam); + logMessage(_T("Timer ID"), b); + mir_sntprintf(b, SIZEOF(b), _T("%d"), options.showtime); + logMessage(_T("ShowTime value"), b); + #endif + + if (options.showtime > 0) //TimeToShow enabled + { + if (wParam == 6) + { + PostMessage(hwnd, WM_CLOSE, 0, 0); + #ifdef _DEBUG + logMessage(_T("Showtime timer"), _T("triggered")); + #endif + } + } + else + { + PostMessage(hwnd, WM_CLOSE, 0, 0); + if (wParam == 7) + { + #ifdef _DEBUG + logMessage(_T("On Modules Loaded timer"), _T("triggered")); + #endif + } + if (wParam == 8) + { + #ifdef _DEBUG + logMessage(_T("On Modules Loaded workaround"), _T("triggered")); + #endif + } + } + + break; + + case WM_RBUTTONDOWN: + { + ShowWindow(hwndSplash, SW_HIDE); + DestroyWindow(hwndSplash); + bpreviewruns = false; // preview is stopped. + break; + } + + case WM_CLOSE: + { + if (MyUpdateLayeredWindow) // Win 2000+ + { + RECT rc; GetWindowRect(hwndSplash, &rc); + POINT ptDst = { rc.left, rc.top }; + POINT ptSrc = { 0, 0 }; + SIZE sz = { rc.right - rc.left, rc.bottom - rc.top }; + + BLENDFUNCTION blend; + blend.BlendOp = AC_SRC_OVER; + blend.BlendFlags = 0; + blend.SourceConstantAlpha = 255; + blend.AlphaFormat = AC_SRC_ALPHA; + + // Fade Out + if (options.fadeout) + { + int i; + for (i = 255; i>=0; i -= options.fosteps) + { + blend.SourceConstantAlpha = i; + MyUpdateLayeredWindow(hwndSplash, NULL, &ptDst, &sz, SplashBmp->getDC(), &ptSrc, 0xffffffff, &blend, LWA_ALPHA); + Sleep(1); + } + } + } + if (bserviceinvoked) bserviceinvoked = false; + if (bpreviewruns) bpreviewruns = false; + + DestroyWindow(hwndSplash); + } + + case WM_MOUSEMOVE: + { + if (bserviceinvoked) + PostMessage(hwnd, WM_CLOSE, 0, 0); + break; + } + + case WM_DESTROY: + { + PostQuitMessage(0); + #ifdef _DEBUG + logMessage(_T("WM_DESTROY"), _T("called")); + #endif + break; + } + + case WM_PAINT: + { + if (!MyUpdateLayeredWindow) // Win 9x + { + #ifdef _DEBUG + logMessage(_T("WM_PAINT"), _T("painting..")); + #endif + PAINTSTRUCT ps; + BeginPaint(hwndSplash, &ps); + BitBlt(ps.hdc, 0, 0, SplashBmp->getWidth(), SplashBmp->getHeight(), tmpBmp->getDC(), 0, 0, SRCCOPY); + EndPaint(hwndSplash, &ps); + } + break; + } + + ShowWindow(hwndSplash, SW_HIDE); + DestroyWindow(hwndSplash); + break; + } + + return DefWindowProc(hwnd, message, wParam, lParam); +} + +int SplashThread(void *arg) +{ + // Old code, doesn't support mp3 files + //if (options.playsnd) PlaySound(szSoundFile, NULL, SND_ASYNC | SND_FILENAME | SND_NOWAIT); + if (options.playsnd) + { + TCHAR cmd[MAX_PATH]; + mir_sntprintf(cmd, SIZEOF(cmd), _T("open \"%s\" type mpegvideo alias song1"), szSoundFile); + mciSendString(cmd, NULL, 0, 0); + mciSendString(_T("play song1"), NULL, 0, 0); + } + + WNDCLASSEX wcl; + wcl.cbSize = sizeof(wcl); + wcl.lpfnWndProc = SplashWindowProc; + wcl.style = 0; + wcl.cbClsExtra = 0; + wcl.cbWndExtra = 0; + wcl.hInstance = hInst; + wcl.hIcon = NULL; + wcl.hCursor = LoadCursor(NULL, IDC_ARROW); + wcl.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); + wcl.lpszMenuName = NULL; + wcl.lpszClassName = _T(SPLASH_CLASS); + wcl.hIconSm = NULL; + RegisterClassEx(&wcl); + + RECT DesktopRect; + int w = GetSystemMetrics(SM_CXSCREEN); + int h = GetSystemMetrics(SM_CYSCREEN); + DesktopRect.left = 0; + DesktopRect.top = 0; + DesktopRect.right = w; + DesktopRect.bottom = h; + + RECT WindowRect; + WindowRect.left = (DesktopRect.left + DesktopRect.right - SplashBmp->getWidth()) / 2; + WindowRect.top = (DesktopRect.top + DesktopRect.bottom - SplashBmp->getHeight()) / 2; + WindowRect.right = WindowRect.left + SplashBmp->getWidth(); + WindowRect.bottom = WindowRect.top + SplashBmp->getHeight(); + + hwndSplash = CreateWindowEx( + WS_EX_TOOLWINDOW | WS_EX_TOPMOST,//dwStyleEx + _T(SPLASH_CLASS), //Class name + NULL, //Title + DS_SETFONT | DS_FIXEDSYS | WS_POPUP, //dwStyle + WindowRect.left, // x + WindowRect.top, // y + SplashBmp->getWidth(), // Width + SplashBmp->getHeight(), // Height + HWND_DESKTOP, //Parent + NULL, //menu handle + hInst, //Instance + NULL); + + RECT rc; GetWindowRect(hwndSplash, &rc); + POINT ptDst = {rc.left, rc.top}; + POINT ptSrc = {0, 0}; + SIZE sz = {rc.right - rc.left, rc.bottom - rc.top}; + bool splashWithMarkers = false; + + BLENDFUNCTION blend; + blend.BlendOp = AC_SRC_OVER; + blend.BlendFlags = 0; + blend.SourceConstantAlpha = 0; + blend.AlphaFormat = AC_SRC_ALPHA; + + if (options.showversion) + { + // locate text markers: + int i, x = -1, y = -1; + + int splashWidth = SplashBmp->getWidth(); + for (i = 0; i < splashWidth; ++i) + if (SplashBmp->getRow(0)[i] & 0xFF000000) + { + if (x < 0) + { + x = i-1; // 1 pixel for marker line + splashWithMarkers = true; + } else + { + x = -1; + splashWithMarkers = false; + break; + } + } + int splashHeight = SplashBmp->getHeight(); + for (i = 0; splashWithMarkers && (i < splashHeight); ++i) + if(SplashBmp->getRow(i)[0] & 0xFF000000) + { + if (y < 0) + { + y = i-1; // 1 pixel for marker line + splashWithMarkers = true; + } else + { + y = -1; + splashWithMarkers = false; + break; + } + } + + TCHAR verString[256] = {0}; + TCHAR* mirandaVerString = mir_a2t(szVersion); + mir_sntprintf(verString, SIZEOF(verString), _T("%s%s"), szPrefix, mirandaVerString); + mir_free(mirandaVerString); + LOGFONT lf = {0}; + lf.lfHeight = 14; + _tcscpy_s(lf.lfFaceName, _T("Verdana")); + SelectObject(SplashBmp->getDC(), CreateFontIndirect(&lf)); + if (!splashWithMarkers) + { + SIZE v_sz = {0,0}; + GetTextExtentPoint32(SplashBmp->getDC(), verString, (int)_tcslen(verString), &v_sz); + x = SplashBmp->getWidth()/2-(v_sz.cx/2); + y = SplashBmp->getHeight()-(SplashBmp->getHeight()*(100-90)/100); + } + + SetTextColor(SplashBmp->getDC(), (0xFFFFFFFFUL-SplashBmp->getRow(y)[x])&0x00FFFFFFUL); + //SplashBmp->DrawText(verString,SplashBmp->getWidth()/2-(v_sz.cx/2),SplashBmp->getHeight()-30); + SetBkMode(SplashBmp->getDC(), TRANSPARENT); + SplashBmp->DrawText(verString, x, y); + //free (ptr_verString); + } + + if (MyUpdateLayeredWindow) // Win 2000+ + { + SetWindowLongPtr(hwndSplash, GWL_EXSTYLE, GetWindowLongPtr(hwndSplash, GWL_EXSTYLE) | WS_EX_LAYERED); + /* + if (splashWithMarkers) + { + ++ptSrc.x; + ++ptSrc.y; + } + */ + MyUpdateLayeredWindow(hwndSplash, NULL, &ptDst, &sz, SplashBmp->getDC(), &ptSrc, 0xffffffff, &blend, LWA_ALPHA); + + ShowWindow(hwndSplash, SW_SHOWNORMAL); + } + else // Win 9x + { + tmpBmp = new MyBitmap(SplashBmp->getWidth(),SplashBmp->getHeight()); + HDC dtDC = GetDC(GetDesktopWindow()); + + BitBlt(tmpBmp->getDC(), + 0, + 0, + SplashBmp->getWidth(), + SplashBmp->getHeight(), + dtDC, + (DesktopRect.left + DesktopRect.right - SplashBmp->getWidth()) / 2, + (DesktopRect.top + DesktopRect.bottom - SplashBmp->getHeight()) / 2, + SRCCOPY); + + ReleaseDC(GetDesktopWindow(), dtDC); + + tmpBmp->Blend(SplashBmp, (splashWithMarkers?-1:0), (splashWithMarkers?-1:0), SplashBmp->getWidth(), SplashBmp->getHeight()); + + } + + if (MyUpdateLayeredWindow) // Win 2000+ + { + if (options.fadein) + { + // Fade in + int i; + for (i = 0; i < 255; i += options.fisteps) + { + blend.SourceConstantAlpha = i; + MyUpdateLayeredWindow(hwndSplash, NULL, &ptDst, &sz, SplashBmp->getDC(), &ptSrc, 0xffffffff, &blend, LWA_ALPHA); + Sleep(1); + } + } + blend.SourceConstantAlpha = 255; + MyUpdateLayeredWindow(hwndSplash, NULL, &ptDst, &sz, SplashBmp->getDC(), &ptSrc, 0xffffffff, &blend, LWA_ALPHA); + } + + if (DWORD(arg) > 0) + { + if (SetTimer(hwndSplash, 6, DWORD(arg), 0)) + { + #ifdef _DEBUG + logMessage(_T("Timer TimeToShow"), _T("set")); + #endif + } + } + else + if (bmodulesloaded) + { + if (SetTimer(hwndSplash, 8, 2000, 0)) + { + #ifdef _DEBUG + logMessage(_T("Timer Modules loaded"), _T("set")); + #endif + } + } + + // The Message Pump + MSG msg; + while (GetMessage(&msg, NULL, 0, 0) == TRUE) //NULL means every window in the thread; == TRUE means a safe pump. + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + if (options.playsnd) + mciSendString(_T("close song1"), NULL, 0, 0); + + ExitThread(0); + return 1; +} + +BOOL ShowSplash(BOOL bpreview) +{ + if (bpreview && bpreviewruns) return 0; + + if (bpreview) bpreviewruns = true; + unsigned long timeout = 0; + + SplashBmp = new MyBitmap; + + #ifdef _DEBUG + logMessage(_T("Loading splash file"), szSplashFile); + #endif + + SplashBmp->loadFromFile(szSplashFile, NULL); + + DWORD threadID; + + #ifdef _DEBUG + logMessage(_T("Thread"), _T("start")); + #endif + + if (bpreview) + { + ShowWindow(hwndSplash, SW_HIDE); + DestroyWindow(hwndSplash); + + timeout = 2000; + #ifdef _DEBUG + logMessage(_T("Preview"), _T("yes")); + #endif + } + else + { + timeout = options.showtime; + #ifdef _DEBUG + TCHAR b [40]; + mir_sntprintf(b, SIZEOF(b), _T("%d"), options.showtime); + logMessage(_T("Timeout"), b); + #endif + } + + hSplashThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SplashThread, (LPVOID)timeout, 0, &threadID); + + #ifdef _DEBUG + logMessage(_T("Thread"), _T("end")); + #endif + + CloseHandle(hSplashThread); + hSplashThread = NULL; + + return 1; +} \ No newline at end of file diff --git a/plugins/SplashScreen/src/splash.rc b/plugins/SplashScreen/src/splash.rc new file mode 100644 index 0000000000..b71eb0a2fd --- /dev/null +++ b/plugins/SplashScreen/src/splash.rc @@ -0,0 +1,152 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO MOVEABLE PURE +BEGIN + IDD_SPLASH_OPT, DIALOG + BEGIN + RIGHTMARGIN, 307 + VERTGUIDE, 32 + VERTGUIDE, 39 + VERTGUIDE, 58 + VERTGUIDE, 101 + VERTGUIDE, 130 + VERTGUIDE, 172 + HORZGUIDE, 119 + HORZGUIDE, 136 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_SPLASH_OPT DIALOGEX 0, 0, 314, 240 +STYLE DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Splash Options",IDC_STATIC,20,7,275,81 + CONTROL "Show splash",IDC_ACTIVE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,58,26,64,10 + CONTROL "Show random splash",IDC_RANDOM,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,130,26,163,10 + EDITTEXT IDC_SPLASHPATH,69,39,145,13,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_CHOOSESPLASH,222,40,22,11 + CONTROL "Play sound",IDC_PLAYSND,"Button",BS_AUTO3STATE | + WS_TABSTOP,58,55,64,10 + CONTROL "Loop sound",IDC_LOOPSOUND,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,130,55,137,10 + EDITTEXT IDC_SNDPATH,69,67,145,13,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_CHOOSESND,222,68,22,11 + GROUPBOX "Show Miranda Version",IDC_STATIC,20,90,275,42 + CONTROL "Enable",IDC_SHOWVERSION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,39,109,63,8 + LTEXT "Prefix:",IDC_STATIC,130,108,42,10 + EDITTEXT IDC_VERSIONPREFIX,180,106,85,13,ES_AUTOHSCROLL + GROUPBOX "Appearance",IDC_STATIC,20,135,275,72 + LTEXT "Display time:",IDC_STATIC,40,150,77,8 + EDITTEXT IDC_SHOWTIME,130,149,39,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_ST_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + UDS_NOTHOUSANDS,171,149,10,10 + LTEXT "msec",IDC_STATIC,175,150,95,9 + CONTROL "Fade in:",IDC_FADEIN,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,39,169,80,8 + EDITTEXT IDC_FISTEP,130,168,39,12,ES_AUTOHSCROLL + CONTROL "",IDC_FI_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,170,167, + 10,10 + LTEXT "steps",IDC_STATIC,176,169,95,9 + CONTROL "Fade out:",IDC_FADEOUT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,39,188,82,8 + EDITTEXT IDC_FOSTEP,130,186,39,12,ES_AUTOHSCROLL + CONTROL "",IDC_FO_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,173,186, + 10,10 + LTEXT "steps",IDC_STATIC,176,187,95,9 + LTEXT "Advaimg library not found. Please get it from nigtlies to be able to use images.", + IDC_PNG2DIBWARN,24,210,185,17,NOT WS_VISIBLE + PUSHBUTTON "Preview...",IDC_PREVIEW,218,211,75,19 +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Unknown language: 0x22, 0x1 resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_UKR) +#ifdef _WIN32 +LANGUAGE 0x22, 0x1 +#pragma code_page(1251) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE MOVEABLE PURE +BEGIN + "resource.h\0" +END + +3 TEXTINCLUDE MOVEABLE PURE +BEGIN + "\r\n" +END + +2 TEXTINCLUDE MOVEABLE PURE +BEGIN + "#include ""afxres.h""\r\n" +END + +#endif // APSTUDIO_INVOKED + +#endif // Unknown language: 0x22, 0x1 resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/SplashScreen/src/version.h b/plugins/SplashScreen/src/version.h new file mode 100644 index 0000000000..98d6fc3ef0 --- /dev/null +++ b/plugins/SplashScreen/src/version.h @@ -0,0 +1,30 @@ +#define __MAJOR_VERSION 0 +#define __MINOR_VERSION 1 +#define __RELEASE_NUM 2 +#define __BUILD_NUM 3 + +#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM +#define __FILEVERSION_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM + +#define __STRINGIFY_IMPL(x) #x +#define __STRINGIFY(x) __STRINGIFY_IMPL(x) +#define __VERSION_STRING __STRINGIFY(__FILEVERSION_DOTS) + +#ifdef _UNICODE +#if defined(WIN64) || defined(_WIN64) + #define __PLUGIN_NAME "Splash Screen (Unicode x64)" +#else + #define __PLUGIN_NAME "Splash Screen (Unicode)" +#endif +#else + #define __PLUGIN_NAME "Splash Screen" +#endif +#define __INTERNAL_NAME "AdvSplashScreen" +#define __FILENAME "AdvSplashScreen.dll" +#define __DESCRIPTION "Shows a splash at Miranda startup." +#define __AUTHOR "nullbie, Thief" +#define __AUTHOREMAIL "thief@miranda.im" +#define __AUTHORWEB "http://addons.miranda-im.org/details.php?id=2624" +#define __COPYRIGHT "© 2004-2007 Victor Pavlychko, 2005-2011 Alexander Turyak" +/* C64CC8E0-CF03-474A-8B11-8BD4565CCF04 */ +#define MIID_SPLASHSCREEN {0xc64cc8e0, 0xcf03, 0x474a, {0x8b, 0x11, 0x8b, 0xd4, 0x56, 0x5c, 0xcf, 0x04}} diff --git a/plugins/SplashScreen/src/version.rc b/plugins/SplashScreen/src/version.rc new file mode 100644 index 0000000000..e637f0cb33 --- /dev/null +++ b/plugins/SplashScreen/src/version.rc @@ -0,0 +1,38 @@ +// Microsoft Visual C++ generated resource script. +// +#include "afxres.h" +#include "version.h" + +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#endif //_WIN32 + +VS_VERSION_INFO VERSIONINFO + FILEVERSION __FILEVERSION_STRING + PRODUCTVERSION __FILEVERSION_STRING + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x0L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "FileDescription", __DESCRIPTION + VALUE "InternalName", __PLUGIN_NAME + VALUE "LegalCopyright", __COPYRIGHT + VALUE "OriginalFilename", __FILENAME + VALUE "ProductName", __PLUGIN_NAME + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END -- cgit v1.2.3