From b5e7df42cc95318b2644facfcdfbe5fe44135924 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Thu, 15 Nov 2007 21:38:36 +0000 Subject: [PATCH] - Add new spectrum bitmaps for 4bpp, 8bpp and 16-32bpp. The 8bpp one can probably be done better, but at least it's suitable ;-) As we use StretchBlt in the code, the bitmaps are very small, so they are stretched to the full size at runtime. - Change the current spectrum bitmap, when the user selects another color depth - Enable support for 4bpp color depth - Fix a bug in "monslctl.c", which broke building under MSVC svn path=/trunk/; revision=30475 --- reactos/dll/cpl/desk/desk.h | 3 +- reactos/dll/cpl/desk/desk.rc | 5 +- reactos/dll/cpl/desk/monslctl.c | 2 +- reactos/dll/cpl/desk/resource.h | 5 +- reactos/dll/cpl/desk/resources/spectrum.bmp | Bin 6552 -> 0 bytes .../dll/cpl/desk/resources/spectrum_16.bmp | Bin 0 -> 1366 bytes reactos/dll/cpl/desk/resources/spectrum_4.bmp | Bin 0 -> 126 bytes reactos/dll/cpl/desk/resources/spectrum_8.bmp | Bin 0 -> 438 bytes reactos/dll/cpl/desk/settings.c | 94 ++++++++++++------ 9 files changed, 75 insertions(+), 34 deletions(-) delete mode 100644 reactos/dll/cpl/desk/resources/spectrum.bmp create mode 100644 reactos/dll/cpl/desk/resources/spectrum_16.bmp create mode 100644 reactos/dll/cpl/desk/resources/spectrum_4.bmp create mode 100644 reactos/dll/cpl/desk/resources/spectrum_8.bmp diff --git a/reactos/dll/cpl/desk/desk.h b/reactos/dll/cpl/desk/desk.h index 8a5322f2b6e..d2e14506037 100644 --- a/reactos/dll/cpl/desk/desk.h +++ b/reactos/dll/cpl/desk/desk.h @@ -48,7 +48,8 @@ INT AllocAndLoadString(LPTSTR *lpTarget, ULONG __cdecl DbgPrint(PCCH Format,...); -#define MAX_DESK_PAGES 32 +#define MAX_DESK_PAGES 32 +#define NUM_SPECTRUM_BITMAPS 3 /* As slider control can't contain user data, we have to keep an * array of RESOLUTION_INFO to have our own associated data. diff --git a/reactos/dll/cpl/desk/desk.rc b/reactos/dll/cpl/desk/desk.rc index 788e2e882eb..611933f5906 100644 --- a/reactos/dll/cpl/desk/desk.rc +++ b/reactos/dll/cpl/desk/desk.rc @@ -15,6 +15,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDC_DESK_ICON ICON "resources/applet.ico" IDC_DESK_ICON2 ICON "resources/applet.ico" IDC_MONITOR BITMAP "resources/monitor.bmp" -IDB_SPECTRUM BITMAP "resources/spectrum.bmp" + +IDB_SPECTRUM_4 BITMAP "resources/spectrum_4.bmp" +IDB_SPECTRUM_8 BITMAP "resources/spectrum_8.bmp" +IDB_SPECTRUM_16 BITMAP "resources/spectrum_16.bmp" #include "rsrc.rc" diff --git a/reactos/dll/cpl/desk/monslctl.c b/reactos/dll/cpl/desk/monslctl.c index 32347f7dd74..1cb9427a822 100644 --- a/reactos/dll/cpl/desk/monslctl.c +++ b/reactos/dll/cpl/desk/monslctl.c @@ -895,7 +895,7 @@ MonSelPaint(IN OUT PMONITORSELWND infoPtr, /* Paint the dragging monitor last */ if (infoPtr->IsDraggingMonitor && - (DWORD)infoPtr->DraggingMonitor >= 0) + infoPtr->DraggingMonitor >= 0) { MonSelRectToScreen(infoPtr, &infoPtr->rcDragging, diff --git a/reactos/dll/cpl/desk/resource.h b/reactos/dll/cpl/desk/resource.h index d05cc69f03e..65b59e6c8b7 100644 --- a/reactos/dll/cpl/desk/resource.h +++ b/reactos/dll/cpl/desk/resource.h @@ -66,7 +66,10 @@ #define IDC_SETTINGS_ADVANCED 205 #define IDC_SETTINGS_MONSEL 206 #define IDC_SETTINGS_SPECTRUM 207 -#define IDB_SPECTRUM 208 + +#define IDB_SPECTRUM_4 208 +#define IDB_SPECTRUM_8 209 +#define IDB_SPECTRUM_16 210 #define IDR_PREVIEW_MENU 2100 #define ID_MENU_NORMAL 2101 diff --git a/reactos/dll/cpl/desk/resources/spectrum.bmp b/reactos/dll/cpl/desk/resources/spectrum.bmp deleted file mode 100644 index c9dcea8486af25ae7cac202a2e9598e598b7d162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6552 zcmb`LO^DW27{yOBq*IWSV5Wg)2KiAzWuzG@q%KCtnIMfULyJVQu!17PHd%hO>BBK2 zY6^8T(?S>8Cc|-BG^4gj%@%!_X!%i@DT;%7I&+`7_kI2!?~G9|yzgRW^YEPeJLlZ{ z;6on_NBG>Q-?93BsP70#E7xU+E7$-^zyrz(L?pa1?k4I1!u?F1mZA1&Pj#xviAYLFA z5%Y-I#7tr`aThU$7)cBz>WMm{hPB|e;Pv2ea5Q))I0>8)CVK*00=^8c1m6Zf23x_; z!Cl}t;6d;g@ML8;O?HO(Jv&)@oa_^#IXl_oM5CMRwm8|K-pK&gfY*fKhJm+$LO~eM`E#fue zdE#keE-{OkN=zWehRJRqt|P9d#_CZuqv!2qdalmu*#+(g4`uX}q!+^0r00=1mGsos zwgo+NTYDzxsjbZ*?$7FJTdVESQ!5(`-UQwn^_(8{TycBbL#zyoTIj9ai*utLwt?`lb#I)KHm*|wuSlHBcIYU@fq|yPy8AAl%B@t)-paHt-@zT z&*Zl z^z?o!Jx}z*r`NMNAmI6wo-?Z?LDW-+O?+O7-?qf_mh?0jrTRU(4>N%xf zzZIW4Xi3kepy#ty^3(V{UWq7kHKkN(ets76Q(NLg|ew+BbC!3!YK9k?(^n5b(A^ENNTp#${68caXpO>>KrLFDj({HQs>HIe7 z>GQL+4_SUDzx^IO9Qh1oEvKg@vt+lX_Gy(qBt6YUJq*6j*-R){KJ0XVNpdn)$8tj9asn$#0EMHSbBT-!2Y(zMk#39j@P2@!NFL za(=reAdvb{^4q&hnm0mzN>AfcF*QE+p@yhu-+an%P0#4J=Uu##w6%$a`-=Efewv;;!hJ=4d#I$}p3VAgQBQ4cMQD*pPw#3sht`qRQ!5jnqhr4< z^6C9{SMXc$nf$gpf0MF&5}!NceMNk(3-=ZC+ccS-G}Cj0>q9lYeMovLKP{%lW%*nX z`t7Tr`K|6#ZIRDC0S524**;|R<@l7IT3h0?A3X=U`={sA{C0WpTd!xA>qDn2_fOv< zjRNm#;#2u)dip+8%I82L-dCh&ANgr~TEDeEv==lz#b?YhkK0lT0X)@{gVp&rg zlf8e&KBWBgdMZDsh5L&6ZH~{Jp2p{2z4yRZcs`}4O|>fK z=T=aD+gX19Ec&hKxvlIy!6=wry+zhk`fX0n#&BOTzg-Dd<1^}+OLjZ|xsxV7*G9ih zd=~SwzPEYHZ);qBCcm9pcK^)fXO7R{x0hVM6$##NEkDJl4x8yYw{Tw>lFQHJw>drM zM?K}Y>*IaJ@>71RBX+!U|J2qJpGVw#LUOg1;A;ONKka>Jdc1!Y_1qrchsyXo6W@oV zr}0_LPg$Dfr{0H}+(}ExZhAVum3a&+yeAl+>3v9gwz&Js?(+8`pP&0e9}=Hi;{DSO zThjCY@!O4MeW*Xbm7d0@T+LF-ww5R;_1n50zcmB~_vyFBr}C*a*^?x5wi9P`2Odyot|Ze)hqq?(BN+%l9Gc zx8}FjI*R$3?kfi(pV{|YQILD@^LjSN{1gRA&(wz!1=&7idXA2LNPIR`c^|U;EPKB- z=g8$}j!z*_?WCprG(O$^Q~4=AWoy=ll%Ea%{(UH`r~FoYcDnbz4WZv^xGUu|`K^K= zm!GDCowxR~_r9Q~_gl+P^IM;v)^9C8rxf0Y5}*G7avrd|>D( zlPyY_XVkeEfGRmxh6xH}5m+PGK|tU^trEloxlf*3kZ0gGh#er;$T_JGAi2ON zZIUZ^r&g@M3HxD_{u^2=wzc*vb8&*8*7_-b1b^tCP-KRAgs4JDXX+&dhr|yFv7MjU zbma{L&CCg&P*J$xF(Z!8_y;|e8o(!rR-T#io4I`k#>P$wG?R0RXlge_DhR!2EBa%k zajW#k;iHC(L;AJ1nUOX-qCMh4v5pL{!6DP5H6_My4gy~t$ed7CAQtX4S z`I#Q&EwHT^9zu5xd8kJ~d&uZekC}FbYK69$h#){rFHJClUTVk)q*r-&pveF|ZVfJ4 zxkavSh8HJ%8GHuDh$hYP`SHpjakPx>irLBMW8xJ7wOZpOp#&br3<0ke)Ie5&FB((n z^~o>bo7M-7;|GqkmH`1iC5UpV^ars}TWI-S|9}5HfeQ~FBqb%y%*@2b##UEPPfx#i zarf@cn|XODDJhealil6r<>dth1)1yX7K^2|H8u6M*Xy<0?PX<;qNC&EhlhtZH*<2v z#@udqWMpJ06k1$d+}qo0Z*Sk--Sv1pb8~Y~pJrra%+AhEO*J$$EG=ER5)twId3}BT ztuW^+eJ$Nc zp25M}xBL3~u3g*NNlR;MYqMIdBO^|y)93T`_9iDMx3shr7Z+DlRG3T-hoh>hDki40 Lv-8=r!otG83-pBX literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/desk/resources/spectrum_4.bmp b/reactos/dll/cpl/desk/resources/spectrum_4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f111210d4cd7a898a2efd39de2c37908a74a8ffa GIT binary patch literal 126 zcmZ?rtz&?IG9aY^!~#If2*xZxl7WE(OkyJ%7#M(vp`ign0ZAYeh#MFV95?`!_zy-5 X|NnznKn#Q+At1pntmgV-_PVnGW>guG literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/desk/resources/spectrum_8.bmp b/reactos/dll/cpl/desk/resources/spectrum_8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c1a0e949da1fd5d539f8e145036a2420fb13ba4e GIT binary patch literal 438 zcmZ?r-NwiO24z4}1Bhn=F$)kgf=LDj2dF$y2n{qaFaQxlLj!~Yl0YU9H!vJHZ~!Rr zAB-6O{|B*v7zjZ^Kw>5c?A(n2t5+d`SMQL(xid)M&RqnU3pQlt%n3lV!OYn+5$5gM ejbz@sRY>N&d52`)*)s_9Zr+6$2sdvKyAJ?51_3Vs literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/desk/settings.c b/reactos/dll/cpl/desk/settings.c index eb130e23a8d..17540404d5d 100644 --- a/reactos/dll/cpl/desk/settings.c +++ b/reactos/dll/cpl/desk/settings.c @@ -15,9 +15,9 @@ typedef struct _GLOBAL_DATA { PDISPLAY_DEVICE_ENTRY DisplayDeviceList; PDISPLAY_DEVICE_ENTRY CurrentDisplayDevice; - HBITMAP hBitmap; - int cxSource; - int cySource; + HBITMAP hSpectrumBitmaps[NUM_SPECTRUM_BITMAPS]; + int cxSource[NUM_SPECTRUM_BITMAPS]; + int cySource[NUM_SPECTRUM_BITMAPS]; } GLOBAL_DATA, *PGLOBAL_DATA; @@ -80,7 +80,8 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI while (EnumDisplaySettingsEx(DeviceName, iMode, &devmode, dwFlags)) { - if ((devmode.dmBitsPerPel==8 || + if ((devmode.dmBitsPerPel==4 || + devmode.dmBitsPerPel==8 || devmode.dmBitsPerPel==16 || devmode.dmBitsPerPel==24 || devmode.dmBitsPerPel==32) && @@ -285,6 +286,7 @@ OnInitDialog(IN HWND hwndDlg) BITMAP bitmap; DWORD Result = 0; DWORD iDevNum = 0; + INT i; DISPLAY_DEVICE displayDevice; PGLOBAL_DATA pGlobalData; @@ -362,15 +364,45 @@ OnInitDialog(IN HWND hwndDlg) } } - /* init the color spectrum*/ - pGlobalData->hBitmap = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); - if (pGlobalData->hBitmap != NULL) - { - GetObjectW(pGlobalData->hBitmap, sizeof(BITMAP), &bitmap); + /* Initialize the color spectrum bitmaps */ + for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) + { + pGlobalData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); - pGlobalData->cxSource = bitmap.bmWidth; - pGlobalData->cySource = bitmap.bmHeight; - } + if (pGlobalData->hSpectrumBitmaps[i] != NULL) + { + GetObjectW(pGlobalData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap); + + pGlobalData->cxSource[i] = bitmap.bmWidth; + pGlobalData->cySource[i] = bitmap.bmHeight; + } + } +} + +/* Get the ID for GLOBAL_DATA::hSpectrumBitmaps */ +static VOID +ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PGLOBAL_DATA pGlobalData) +{ + HDC hdcMem; + hdcMem = CreateCompatibleDC(hDC); + + if (hdcMem) + { + INT iBitmap; + + switch(BitsPerPel) + { + case 4: iBitmap = 0; break; + case 8: iBitmap = 1; break; + default: iBitmap = 2; + } + + SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]); + StretchBlt(hDC, client->left, client->top, client->right - client->left, + client->bottom - client->top, hdcMem, 0, 0, + pGlobalData->cxSource[iBitmap], pGlobalData->cySource[iBitmap], SRCCOPY); + DeleteDC(hdcMem); + } } static VOID @@ -383,12 +415,19 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) PSETTINGS_ENTRY Current; DWORD dmNewBitsPerPel; DWORD index; - TCHAR Buffer[64]; + HDC hSpectrumDC; + HWND hSpectrumControl; + RECT client; - SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, WM_GETTEXT, (WPARAM)(sizeof(Buffer) / sizeof(TCHAR)), (LPARAM)Buffer); - index = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)Buffer); + index = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETCURSEL, 0, 0); dmNewBitsPerPel = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETITEMDATA, index, 0); + /* Show a new spectrum bitmap */ + hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM); + hSpectrumDC = GetDC(hSpectrumControl); + GetClientRect(hSpectrumControl, &client); + ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pGlobalData); + /* find if new parameters are valid */ Current = pGlobalData->CurrentDisplayDevice->CurrentSettings; if (dmNewBitsPerPel == Current->dmBitsPerPel) @@ -585,20 +624,10 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar { LPDRAWITEMSTRUCT lpDrawItem; lpDrawItem = (LPDRAWITEMSTRUCT) lParam; + if(lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) - { - HDC hdcMem; - hdcMem = CreateCompatibleDC(lpDrawItem->hDC); - if (hdcMem != NULL) - { - SelectObject(hdcMem, pGlobalData->hBitmap); - StretchBlt(lpDrawItem->hDC, lpDrawItem->rcItem.left, lpDrawItem->rcItem.top, - lpDrawItem->rcItem.right - lpDrawItem->rcItem.left, - lpDrawItem->rcItem.bottom - lpDrawItem->rcItem.top, - hdcMem, 0, 0, pGlobalData->cxSource, pGlobalData->cySource, SRCCOPY); - DeleteDC(hdcMem); - } - } + ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData); + break; } case WM_COMMAND: @@ -784,6 +813,8 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar case WM_DESTROY: { + INT i; + PDISPLAY_DEVICE_ENTRY Current = pGlobalData->DisplayDeviceList; while (Current != NULL) { @@ -801,8 +832,11 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar HeapFree(GetProcessHeap(), 0, pGlobalData); - if (pGlobalData->hBitmap) - DeleteObject(pGlobalData->hBitmap); + for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) + { + if(pGlobalData->hSpectrumBitmaps[i]) + DeleteObject(pGlobalData->hSpectrumBitmaps[i]); + } } } return FALSE;