fixes
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1789 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
d8901de5fa
commit
9998f159d0
6 changed files with 179 additions and 172 deletions
|
@ -5,25 +5,27 @@ OutFile "AdvSplash Test.exe"
|
||||||
XPStyle on
|
XPStyle on
|
||||||
|
|
||||||
Function .onInit
|
Function .onInit
|
||||||
# the plugins dir is automatically deleted when the installer exits
|
# the plugins dir is automatically deleted when the installer exits
|
||||||
InitPluginsDir
|
InitPluginsDir
|
||||||
File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Makensisw\logo.bmp"
|
File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Makensisw\logo.bmp"
|
||||||
#optional
|
#optional
|
||||||
#File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav"
|
#File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav"
|
||||||
|
|
||||||
advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash
|
advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash
|
||||||
|
|
||||||
Pop $0 ; $0 has '1' if the user closed the splash screen early,
|
Pop $0 ; $0 has '1' if the user closed the splash screen early,
|
||||||
; '0' if everything closed normal, and '-1' if some error occured.
|
; '0' if everything closed normal, and '-1' if some error occured.
|
||||||
|
|
||||||
MessageBox MB_OK "Now with transparency"
|
MessageBox MB_OK "Now with transparency"
|
||||||
|
|
||||||
File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Icons\modern.bmp"
|
File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Icons\modern.bmp"
|
||||||
|
|
||||||
advsplash::show 1000 600 400 0xFF00FF $PLUGINSDIR\splash
|
advsplash::show 1000 600 400 0xFF00FF $PLUGINSDIR\splash
|
||||||
|
|
||||||
|
Pop $0 ; $0 has '1' if the user closed the splash screen early,
|
||||||
|
; '0' if everything closed normal, and '-1' if some error occured.
|
||||||
|
MessageBox MB_OK "$0"
|
||||||
|
|
||||||
Pop $0 ; $0 has '1' if the user closed the splash screen early,
|
|
||||||
; '0' if everything closed normal, and '-1' if some error occured.
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Section
|
Section
|
||||||
|
|
|
@ -17,12 +17,15 @@ int resolution = RESOLUTION;
|
||||||
int sleep_val, fadein_val, fadeout_val, state, timeleft, keycolor, nt50, alphaparam;
|
int sleep_val, fadein_val, fadeout_val, state, timeleft, keycolor, nt50, alphaparam;
|
||||||
int call = -1;
|
int call = -1;
|
||||||
|
|
||||||
BOOL (_stdcall *SetLayeredWindowAttributesProc)(HWND hwnd, // handle to the layered window
|
typedef BOOL (_stdcall *_tSetLayeredWindowAttributesProc)(HWND hwnd, // handle to the layered window
|
||||||
COLORREF crKey, // specifies the color key
|
COLORREF crKey, // specifies the color key
|
||||||
BYTE bAlpha, // value for the blend function
|
BYTE bAlpha, // value for the blend function
|
||||||
DWORD dwFlags // action
|
DWORD dwFlags // action
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
_tSetLayeredWindowAttributesProc SetLayeredWindowAttributesProc;
|
||||||
|
|
||||||
static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
if (uMsg == WM_CREATE)
|
if (uMsg == WM_CREATE)
|
||||||
|
@ -130,9 +133,9 @@ void CALLBACK TimeProc(
|
||||||
// FadeIN
|
// FadeIN
|
||||||
case 0: if (timeleft == 0)
|
case 0: if (timeleft == 0)
|
||||||
{
|
{
|
||||||
timeleft = sleep_val;
|
timeleft = sleep_val;
|
||||||
state++;
|
state++;
|
||||||
if (nt50) call = 255;
|
if (nt50) call = 255;
|
||||||
} else { call = ((fadein_val-timeleft)*255)/fadein_val; break; }
|
} else { call = ((fadein_val-timeleft)*255)/fadein_val; break; }
|
||||||
// Sleep
|
// Sleep
|
||||||
case 1: if (timeleft == 0)
|
case 1: if (timeleft == 0)
|
||||||
|
@ -143,8 +146,8 @@ void CALLBACK TimeProc(
|
||||||
// FadeOUT
|
// FadeOUT
|
||||||
case 2: if (timeleft == 0)
|
case 2: if (timeleft == 0)
|
||||||
{
|
{
|
||||||
PostMessage((HWND)dwUser, WM_TIMER, 0, 0);
|
PostMessage((HWND)dwUser, WM_TIMER, 0, 0);
|
||||||
return;
|
return;
|
||||||
} else { call = ((timeleft)*255)/fadeout_val; break; }
|
} else { call = ((timeleft)*255)/fadeout_val; break; }
|
||||||
}
|
}
|
||||||
// Transparency value aquired, and could be set...
|
// Transparency value aquired, and could be set...
|
||||||
|
@ -152,7 +155,7 @@ void CALLBACK TimeProc(
|
||||||
SetLayeredWindowAttributesProc((HWND)dwUser, keycolor,
|
SetLayeredWindowAttributesProc((HWND)dwUser, keycolor,
|
||||||
call,
|
call,
|
||||||
alphaparam);
|
alphaparam);
|
||||||
call = -1;
|
call = -1;
|
||||||
// Time is running out...
|
// Time is running out...
|
||||||
timeleft--;
|
timeleft--;
|
||||||
}
|
}
|
||||||
|
@ -206,8 +209,6 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
|
||||||
HWND myWnd;
|
HWND myWnd;
|
||||||
UINT timerEvent;
|
UINT timerEvent;
|
||||||
|
|
||||||
PlaySound(fn2,NULL,SND_ASYNC|SND_FILENAME|SND_NODEFAULT);
|
|
||||||
|
|
||||||
// Get Bitmap Information
|
// Get Bitmap Information
|
||||||
GetObject(g_hbm, sizeof(bm), (LPSTR)&bm);
|
GetObject(g_hbm, sizeof(bm), (LPSTR)&bm);
|
||||||
|
|
||||||
|
@ -219,7 +220,7 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
|
||||||
{
|
{
|
||||||
// Get blending proc address
|
// Get blending proc address
|
||||||
HANDLE user32 = GetModuleHandle("user32");
|
HANDLE user32 = GetModuleHandle("user32");
|
||||||
SetLayeredWindowAttributesProc = GetProcAddress(user32, "SetLayeredWindowAttributes");
|
SetLayeredWindowAttributesProc = (_tSetLayeredWindowAttributesProc) GetProcAddress(user32, "SetLayeredWindowAttributes");
|
||||||
// Use win2k method
|
// Use win2k method
|
||||||
SetLayeredWindowAttributesProc(myWnd, keycolor,
|
SetLayeredWindowAttributesProc(myWnd, keycolor,
|
||||||
(fadein_val > 0)?(0):(255),
|
(fadein_val > 0)?(0):(255),
|
||||||
|
@ -268,7 +269,7 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
|
||||||
wdelta = ((bm.bmWidth + 3) & 3) ^ 3;
|
wdelta = ((bm.bmWidth + 3) & 3) ^ 3;
|
||||||
// Search for transparent pixels
|
// Search for transparent pixels
|
||||||
for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta)
|
for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta)
|
||||||
for (x = 0; x < bm.bmWidth; x++, bmp++)
|
for (x = 0; x < bm.bmWidth; )
|
||||||
if (*bmp == (BYTE) keycolor)
|
if (*bmp == (BYTE) keycolor)
|
||||||
{
|
{
|
||||||
int j = x;
|
int j = x;
|
||||||
|
@ -278,14 +279,14 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
|
||||||
cutrgn = CreateRectRgn(j, y, x, y+1);
|
cutrgn = CreateRectRgn(j, y, x, y+1);
|
||||||
CombineRgn(region, region, cutrgn, RGN_XOR);
|
CombineRgn(region, region, cutrgn, RGN_XOR);
|
||||||
DeleteObject(cutrgn);
|
DeleteObject(cutrgn);
|
||||||
}
|
} else bmp++, x++;
|
||||||
} else if (bm.bmBitsPixel == 24)
|
} else if (bm.bmBitsPixel == 24)
|
||||||
{
|
{
|
||||||
// Bitmap is DWORD aligned by width
|
// Bitmap is DWORD aligned by width
|
||||||
wdelta = ((bm.bmWidth*3 + 3 ) & 3) ^ 3;
|
wdelta = ((bm.bmWidth*3 + 3 ) & 3) ^ 3;
|
||||||
// Search for transparent pixels
|
// Search for transparent pixels
|
||||||
for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta)
|
for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta)
|
||||||
for (x = 0; x < bm.bmWidth; bmp += 3, x++)
|
for (x = 0; x < bm.bmWidth; )
|
||||||
if ((*(int*)bmp & 0xFFFFFF) == keycolor)
|
if ((*(int*)bmp & 0xFFFFFF) == keycolor)
|
||||||
{
|
{
|
||||||
int j = x;
|
int j = x;
|
||||||
|
@ -295,13 +296,15 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
|
||||||
cutrgn = CreateRectRgn(j, y, x, y+1);
|
cutrgn = CreateRectRgn(j, y, x, y+1);
|
||||||
CombineRgn(region, region, cutrgn, RGN_XOR);
|
CombineRgn(region, region, cutrgn, RGN_XOR);
|
||||||
DeleteObject(cutrgn);
|
DeleteObject(cutrgn);
|
||||||
}
|
} else bmp += 3, x++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set resulting region.
|
// Set resulting region.
|
||||||
SetWindowRgn(myWnd, region, TRUE);
|
SetWindowRgn(myWnd, region, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlaySound(fn2,NULL,SND_ASYNC|SND_FILENAME|SND_NODEFAULT);
|
||||||
|
|
||||||
// Start up timer...
|
// Start up timer...
|
||||||
state = 0; timeleft = fadein_val;
|
state = 0; timeleft = fadein_val;
|
||||||
timerEvent = timeSetEvent(resolution, RESOLUTION/4, TimeProc, (DWORD_PTR)myWnd, TIME_PERIODIC);
|
timerEvent = timeSetEvent(resolution, RESOLUTION/4, TimeProc, (DWORD_PTR)myWnd, TIME_PERIODIC);
|
||||||
|
@ -319,6 +322,9 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
|
||||||
|
|
||||||
DeleteObject(g_hbm);
|
DeleteObject(g_hbm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We should UnRegister class, since Windows NT series never does this by itself
|
||||||
|
UnregisterClass(wc.lpszClassName, g_hInstance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wsprintf(temp,"%d",g_rv);
|
wsprintf(temp,"%d",g_rv);
|
||||||
|
|
|
@ -53,7 +53,7 @@ BSC32=bscmake.exe
|
||||||
# ADD BASE BSC32 /nologo
|
# ADD BASE BSC32 /nologo
|
||||||
# ADD BSC32 /nologo
|
# ADD BSC32 /nologo
|
||||||
LINK32=link.exe
|
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 /subsystem:windows /machine:I386
|
# 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 winmm.lib /nologo /subsystem:windows /machine:I386
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib /nologo /entry:"_DllMainCRTStartup" /subsystem:windows /dll /machine:I386 /nodefaultlib /out:"../../Plugins/advsplash.dll" /opt:nowin98
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib /nologo /entry:"_DllMainCRTStartup" /subsystem:windows /dll /machine:I386 /nodefaultlib /out:"../../Plugins/advsplash.dll" /opt:nowin98
|
||||||
# SUBTRACT LINK32 /pdb:none
|
# SUBTRACT LINK32 /pdb:none
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AdvSplash.exe - small (5.5k), simple plugin that lets you throw
|
AdvSplash.exe - small (6.0k), simple plugin that lets you throw
|
||||||
up a splash screen in NSIS installers with cool fading effects (win2k/xp)
|
up a splash screen in NSIS installers with cool fading effects (win2k/xp)
|
||||||
and transparency (24bit/8bit bitmaps).
|
and transparency (24bit/8bit bitmaps).
|
||||||
|
|
||||||
|
@ -55,4 +55,3 @@ screen early (pop it from the stack)
|
||||||
-Justin
|
-Justin
|
||||||
Converted to a plugin DLL by Amir Szekely (kichik)
|
Converted to a plugin DLL by Amir Szekely (kichik)
|
||||||
Fading and transparency by Nik Medved (brainsucker)
|
Fading and transparency by Nik Medved (brainsucker)
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue