From 31542c6ea406883d2b361546b5af193be3a49d70 Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 21 Jan 2005 19:12:47 +0000 Subject: [PATCH] added TRANSPARENT flag for BITMAP fields git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3881 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/InstallOptions/InstallerOptions.cpp | 68 ++++++++++++++++++++ Contrib/InstallOptions/Readme.html | 7 ++ Plugins/InstallOptions.dll | Bin 12288 -> 12800 bytes 3 files changed, 75 insertions(+) diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index f29b855a..43078d8b 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -101,6 +101,7 @@ char *WINAPI STRDUP(const char *c) // LBS_MULTIPLESEL 0x00000008 // LISTBOX #define FLAG_READONLY 0x00000010 // TEXT/FILEREQUEST/DIRREQUEST // BS_LEFTTEXT 0x00000020 // CHECKBOX/RADIOBUTTON +#define TRANSPARENT_BMP 0x00000020 // BITMAP #define FLAG_PASSWORD 0x00000040 // TEXT/FILEREQUEST/DIRREQUEST #define FLAG_ONLYNUMBERS 0x00000080 // TEXT/FILEREQUEST/DIRREQUEST #define FLAG_MULTILINE 0x00000100 // TEXT/FILEREQUEST/DIRREQUEST @@ -476,6 +477,7 @@ int WINAPI ReadSettings(void) { { "HSCROLL", WS_HSCROLL }, { "VSCROLL", WS_VSCROLL }, { "DISABLED", WS_DISABLED }, + { "TRANSPARENT", TRANSPARENT_BMP }, { NULL, 0 } }; FieldType *pField = pFields + nIdx; @@ -1191,6 +1193,7 @@ int WINAPI createCfgDlg() { WPARAM nImageType = pField->nType == FIELD_BITMAP ? IMAGE_BITMAP : IMAGE_ICON; LPARAM nImage = 0; + if (pField->pszText) { pField->hImage = LoadImage( m_hInstance, @@ -1208,12 +1211,76 @@ int WINAPI createCfgDlg() } else nImage = (LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(103)); + + if ((pField->nFlags & TRANSPARENT_BMP) && nImageType == IMAGE_BITMAP) + { + // based on AdvSplash's SetTransparentRegion + BITMAP bm; + HBITMAP hBitmap = (HBITMAP) nImage; + + if (GetObject(hBitmap, sizeof(bm), &bm)) + { + HDC dc; + int x, y; + HRGN region, cutrgn; + BITMAPINFO bmi; + int size = bm.bmWidth * bm.bmHeight * sizeof(int); + int *bmp = (int *) MALLOC(size); + if (bmp) + { + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = BI_RGB; + bmi.bmiHeader.biHeight = bm.bmHeight; + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biWidth = bm.bmWidth; + bmi.bmiHeader.biClrUsed = 0; + bmi.bmiHeader.biClrImportant = 0; + + dc = CreateCompatibleDC(NULL); + SelectObject(dc, hBitmap); + + x = GetDIBits(dc, hBitmap, 0, bm.bmHeight, bmp, &bmi, DIB_RGB_COLORS); + + region = CreateRectRgn(0, 0, bm.bmWidth, bm.bmHeight); + + int keycolor = *bmp & 0xFFFFFF; + + // Search for transparent pixels + for (y = bm.bmHeight - 1; y >= 0; y--) { + for (x = 0; x < bm.bmWidth;) { + if ((*bmp & 0xFFFFFF) == keycolor) { + int j = x; + while ((x < bm.bmWidth) && ((*bmp & 0xFFFFFF) == keycolor)) { + bmp++, x++; + } + + // Cut transparent pixels from the original region + cutrgn = CreateRectRgn(j, y, x, y + 1); + CombineRgn(region, region, cutrgn, RGN_XOR); + DeleteObject(cutrgn); + } else { + bmp++, x++; + } + } + } + + // Set resulting region. + SetWindowRgn(hwCtrl, region, TRUE); + DeleteObject(region); + DeleteObject(dc); + FREE(bmp); + } + } + } + mySendMessage( hwCtrl, STM_SETIMAGE, nImageType, nImage ); + if (pField->nType == FIELD_BITMAP) { // Centre the image in the requested space. @@ -1226,6 +1293,7 @@ int WINAPI createCfgDlg() SetWindowPos(hwCtrl, NULL, bmp_rect.left, bmp_rect.top, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER); } + break; } diff --git a/Contrib/InstallOptions/Readme.html b/Contrib/InstallOptions/Readme.html index 6ca35356..579c0c0b 100644 --- a/Contrib/InstallOptions/Readme.html +++ b/Contrib/InstallOptions/Readme.html @@ -492,6 +492,13 @@ resize the image to the size of the control. Also useful to support custom DPI settings. Without this, the image will be centered within the specified area. +TRANSPARENT +Used by "Bitmap" controls. Hides +every pixel with the same color as of the top left pixel. This +allows to see-through to controls behind it. This flag doesn't +work well with a combination of the RESIZETOFIT flag and bitmaps +with more than 256 colors. + GROUP Add this flag to the first control of a diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index f274579a3c13162084347ea09eadc137a34448dd..ee1e6cf4eada51b700329302f52446deb35a29e7 100644 GIT binary patch delta 6591 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 delta 5928 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