From 8a85e1c0dd7f92fe4c49ee15b237632f8efcc434 Mon Sep 17 00:00:00 2001 From: kichik Date: Mon, 29 Dec 2003 14:27:33 +0000 Subject: [PATCH] fixed branding text background color not updating when the system's color change git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3329 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/InstallOptions/InstallerOptions.cpp | 26 ++------------ Plugins/InstallOptions.dll | Bin 12288 -> 12288 bytes Source/exehead/Ui.c | 36 ++++++++++++++------ Source/exehead/bgbg.c | 30 ++++++++++++---- Source/exehead/exec.c | 10 ------ Source/exehead/fileform.h | 3 +- Source/exehead/util.c | 4 +-- Source/exehead/util.h | 4 +-- Source/script.cpp | 10 +++--- 9 files changed, 62 insertions(+), 61 deletions(-) diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index e744d43a..d9291c9a 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -32,17 +32,6 @@ static int WINAPI popstring(char *str) return 0; } -#define CC_TEXT 1 -#define CC_BK 4 - -typedef struct { - COLORREF text; - LOGBRUSH bk; - HBRUSH bkb; - int bkmode; - int flags; -} ctlcolors; - #define strcpy(x,y) lstrcpy(x,y) //#define strncpy(x,y,z) lstrcpyn(x,y,z) #define strdup(x) STRDUP(x) @@ -761,19 +750,8 @@ BOOL CALLBACK cfgDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_CTLCOLORDLG: case WM_CTLCOLORBTN: case WM_CTLCOLORLISTBOX: - { - ctlcolors *c = (ctlcolors *) GetWindowLong((HWND) lParam, GWL_USERDATA); - - if (c) { - SetBkMode((HDC)wParam, c->bkmode); - if (c->flags & CC_BK) - SetBkColor((HDC)wParam, c->bk.lbColor); - if (c->flags & CC_TEXT) - SetTextColor((HDC)wParam, c->text); - - return (BOOL)c->bkb; - } - } + // let the NSIS window handle colors, it knows best + return mySendMessage(hMainWindow, WM_CTLCOLORSTATIC, wParam, lParam); } return 0; } diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index 28c0462a1a441ccf239a51884ad112ace61276de..93dcc54af86b9175cf69496b87ba3f3b87fd0a4f 100644 GIT binary patch delta 2537 zcmd^>|4&=j6~ON`28?U)gZN<+7~xwe`8u2TB_8&(J;hK`rHMOM%tA^tAc^C&X=rRO zlTr-jiy)5Im@CnCQ=6s@QkG>J3jM-1DmgS=(k0uN8cj5vR@6k=iYnnyU*_0(Y51fceJg&%&*aR{Fethg3!OL_jhaunO5rPXaspw zYf$CMvK&?ZU{6~>8H4UMUoAqLaXPwfPr1Lf&7hpp2XF>L7O;p*)(Geg*u zH3h!?(AAMmxLkwMNJ7J+nVLK7J5;$d~vh_{7*A%`t5CSrId-MLmZq zv?!E8SJp4}X{bU=Sr2qPK6#2l1A~vUUSih@`0r$&b`_o>FKVCH%Me2&cFJBOw)Asg zyp_HerfAK0y2!4$LKP-|U=SnpnB4!3n#a^gSv&bW!-j8=6`8H(8xYoW&On8eyAjhE z;Jt|PQ`Sjd%(NE%4_}}P0u=w%ObPR(ROiH1V=cNe4C%VFEasiL2=yfg>rBSp>o9FY zV8DYIc`F&sD#WMArK~#aCCl^=;X=}^FDl?+a>w~lRZmjmlMgOZ+Ta_kgY;foLvSZ;~ptTjQ2wv$1FV?z`4V+(!M z*n0(zB;MD1mr@_ZwS&Dc8Dj2P)XGh(WADJ&0Qt9}ZS4&7Z`FyKc%Ac6qOUQ!I5mUuWd0_}+w zE=f{GGu};fj0cCvCZ>GlezhbaC)BPNR4(b6tqmf70Bd0r!ho`R!#qhaY|#X`eexGy z!z-w6j)o1eej4#mc8W|g9qf|VSybyQ>PS7v^^m9sQa|36| zYO@t~)@)t{_omM*6eP+J(_D%eH?SE91M^@@Cm)zAv5(v~Z(+QU>-a&XG&zlfI$0)7 z7B8mcWlJHxMt*DAkKJT-LH)WveWsM>v{L;^RUK8-w^j8GMLn&mzxMm9!nJGrj1RM+VMuEUQ6xUpYQw)2*IsG z5U8>MmD7Ta0SxdH-UJ*2RzcqiILNy44@eg-Ia8t4;nQR3YgruqbPEbWq> zk`78y>9CZLUXWgwPDyV`??_Y9-=vSES!rJSM$)>>u9dEO*A`c^YnSUu*8x}56?YwX zophabosYUcbZOjrH{-Uri`^COBg!9>5`<J^v`*#JBPL_-KUhX8-^I delta 2671 zcmd^>{Zmxe8OP6o1y@+yi|&O*sV_)iO_X7|FCe@3?y5l465UE~F%-9>)T zfQ5BLz_*i0HPe|yJKC709maL08Ec)@7@HWIaiVExnz6QV%vI20sswA2)9+n$>JR-7 zdS*WNdCqg5^E}Ue&OHll%iEUk-QJqoSP)#1vGKoTZVX|5B^=!NGGyv3&&GPly^Xe{ ze0%noq+HarGGy){k4B)HkXo8X^41u>$F^%^%#=);PKXm0b;O!g3@L!p_*R4k`grbeam@QU$8FBd9zjGL6lozE>=6xq7dt}dCD6x?;4JA zd&d_zlAc({51a?!w;c9ZA|gDpBs+I4x%WHl-M}8&R!%oCAF5GPda8E@B33S1-9+e5 z=OTfOC8856lF=eXT(r2^uB?gl8atM?jrOtPF%_*}nu*_EvaDh0S%EC>8fYI7x~gq; z?ZeO1+dH~ZiXsDcxoyh&6!$-X^G9lGu+Rk4laIZ#u|(b**jzyd9#B@ z(Hdv6Jf|gM!`mk<`6Ct@$>b~5qy^ul&{ZSc)y=l5(I?8>@`&*8|C9!mn%Y<567(^)MXK~*fvKAB!* zCH6I*OUTnxJs3_2gbAFuc*Qil>gG{9B^s7|G}4IrATo2Y#jI>NXh`ge-A{Ki zQJ7kP3N{>y7blQ_Dkc2=)nO70Q48K$*@-%gzJGBZrePAghZ4h-E8Vbi@f_R(#_zFc zHVoZ~+RQA?elGU0-NHt320j(MS;tD;U#?ujrY_|ib7X5cv_;vBE?_sZee?<|8e3U% z`7XjF({Zue42+|P;L$5xgSaym=smFw@Cjfxne86?I(5aL8h4)3VK(5%qa`d|EXn!v zRBS2iIcbXMy)X&ef=2%xHeYO_GCLs_IbXcP`J6V-*2urR-iIX7&v^8b@%3%?jp(9z zY(kDZ`|I1Bw-573Mj%Y>{_OB-^js_*DYPvqqQjw0 z_)>yKH3IZ!hwihXoKn1LaqcwS&Y$Eec^?!IVb2sIYzA%M7;vG~ne5HnA{2N&cYzQ< ztV1nktH#uKT8$H|&{;)4W=+lsbb!U28)zmQa?YJ`@Rr%Gcg@q;om6{GwLPhxFx8f% z`ktx2!q(&!l+HH|%@$*JQre8lq!f&@q_i4OL$<%_NR5u>%~f2qu|MSHr~Gg;{?|M| zr7y7j3B9fR6+*rNDfqE4*GeJ}N2$4Ua18b(;$#qZy7a^G_1q=<(Qr z#JF^1=M#P|bFXQ8!f%slgOBlq-#=hmZpM2&_D#?He?NlECypS#ePVWMo|sa%Dl&V` zob_whZz3dTWcJ+p##QlsQ)beckN=lY%L&2dB&m;ZVqOSJfxn25Zg3gQ!#n_%u&k+< zj~803v^SnMU8JqQt~^tDx$=6Y%j5Udd4B5I;Q5p1s)u`=-nrhj-Ywo;-nYC*y=T0i zdvACLybrvo+9Yk3_N?}@woYr&wrMeKm$pZHLp!9stHrg`+6UUl+UMF;?Ur^|v*;PR zU7w`8bhloi|5$%f->Uyi-=n{wzoq|5kLzdj&sy~__51omJ9llKIxk(2K9N3^u1f>b1Bpv^*&+W(cFA+)=j3&AMBXaLEv)yrQ%y?aFTDpz=%Qgfggb#j1`| z$EyWuv09?msI}^1wLx92u2c7`2h>CAJ8E1#sh(H=qW(=a)Vu1iYAMexFDjp2zObD5 MasLU4vyvwIAF*gcVgLXD diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 7ab8a535..13896f57 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -104,13 +104,32 @@ static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lPara case WM_CTLCOLORBTN: { ctlcolors *c = (ctlcolors *)GetWindowLong((HWND)lParam, GWL_USERDATA); - + if (c) { - SetBkMode((HDC)wParam, c->bkmode); - if (c->flags & CC_BK) - SetBkColor((HDC)wParam, c->bk.lbColor); + COLORREF text; + LOGBRUSH lh; + + text = c->text; + if (c->flags & CC_TEXT_SYS) + text = GetSysColor(text); if (c->flags & CC_TEXT) - SetTextColor((HDC)wParam, c->text); + SetTextColor((HDC)wParam, text); + + SetBkMode((HDC)wParam, c->bkmode); + + lh.lbColor = c->bkc; + if (c->flags & CC_BK_SYS) + lh.lbColor = GetSysColor(lh.lbColor); + if (c->flags & CC_BK) + SetBkColor((HDC)wParam, lh.lbColor); + + if (c->flags & CC_BKB) + { + lh.lbStyle = c->lbStyle; + if (c->bkb) + DeleteObject(c->bkb); + c->bkb = CreateBrushIndirect(&lh); + } return (BOOL)c->bkb; } @@ -364,7 +383,6 @@ static int CALLBACK WINAPI BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lPara BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - BOOL bNextPage=FALSE; if (uMsg == WM_INITDIALOG || uMsg == WM_NOTIFY_OUTER_NEXT) { page *this_page; @@ -414,7 +432,6 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) SendMessage(m_curwnd, WM_NOTIFY_INIGO_MONTOYA, 0, 0); nextPage: - bNextPage=FALSE; m_page+=m_delta; this_page+=m_delta; @@ -459,8 +476,8 @@ nextPage: my_SetWindowText(hwndDlg,g_tmp); #ifdef NSIS_SUPPORT_CODECALLBACKS + // custom page or user used abort in prefunc if (ExecuteCodeSegment(this_page->prefunc, NULL) || !this_page->dlg_id) { - bNextPage=TRUE; goto nextPage; } #endif //NSIS_SUPPORT_CODECALLBACKS @@ -516,9 +533,6 @@ skipPage: ui_dlg_visible = 1; } - if (bNextPage) - goto nextPage; - return FALSE; } diff --git a/Source/exehead/bgbg.c b/Source/exehead/bgbg.c index 7384d90c..e0bdd902 100644 --- a/Source/exehead/bgbg.c +++ b/Source/exehead/bgbg.c @@ -29,7 +29,11 @@ LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PAINTSTRUCT ps; HDC hdc=BeginPaint(hwnd,&ps); RECT r; + LOGBRUSH lh; int ry; + + lh.lbStyle = BS_SOLID; + GetClientRect(hwnd,&r); // this portion by Drew Davidson, drewdavidson@mindspring.com ry=r.bottom; @@ -42,7 +46,8 @@ LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) rv = (GetRValue(c2) * r.top + GetRValue(c1) * (ry-r.top)) / ry; gv = (GetGValue(c2) * r.top + GetGValue(c1) * (ry-r.top)) / ry; bv = (GetBValue(c2) * r.top + GetBValue(c1) * (ry-r.top)) / ry; - brush = CreateSolidBrush(RGB(rv,gv,bv)); + lh.lbColor = RGB(rv,gv,bv); + brush = CreateBrushIndirect(&lh); // note that we don't need to do "SelectObject(hdc, brush)" // because FillRect lets us specify the brush as a parameter. FillRect(hdc, &r, brush); @@ -53,18 +58,31 @@ LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (header->bg_textcolor != -1) { - HFONT newFont, oldFont; - newFont = CreateFont(40,0,0,0,FW_BOLD,TRUE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Garamond"); + HFONT oldFont; + HFONT newFont = CreateFont( + 40, + 0, + 0, + 0, + FW_BOLD, + TRUE, + FALSE, + FALSE, + DEFAULT_CHARSET, + OUT_DEFAULT_PRECIS, + CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, + DEFAULT_PITCH, + "Garamond" + ); if (newFont) { - static char buf[256]; r.left=16; r.top=8; - my_GetWindowText(hwnd,buf,sizeof(buf)); SetBkMode(hdc,TRANSPARENT); SetTextColor(hdc,header->bg_textcolor); oldFont = SelectObject(hdc,newFont); - DrawText(hdc,buf,-1,&r,DT_TOP|DT_LEFT|DT_SINGLELINE|DT_NOPREFIX); + DrawText(hdc,g_caption,-1,&r,DT_TOP|DT_LEFT|DT_SINGLELINE|DT_NOPREFIX); SelectObject(hdc,oldFont); DeleteObject(newFont); } diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index d086c4c9..328589e5 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -739,16 +739,6 @@ static int NSISCALL ExecuteEntry(entry *entry_) case EW_SETCTLCOLORS: { ctlcolors *c = (ctlcolors *)(g_blocks[NB_CTLCOLORS].offset + parm1); - - if (c->flags & CC_TEXT_SYS) - c->text = GetSysColor(c->text); - if (c->flags & CC_BK_SYS) - c->bk.lbColor = GetSysColor(c->bk.lbColor); - if (c->flags & CC_BKB) - c->bkb = CreateBrushIndirect(&c->bk); - - c->flags &= ~(CC_BK_SYS|CC_TEXT_SYS|CC_BKB); - SetWindowLong((HWND) GetIntFromParm(0), GWL_USERDATA, (long) c); } break; diff --git a/Source/exehead/fileform.h b/Source/exehead/fileform.h index 1346452a..79c2755b 100644 --- a/Source/exehead/fileform.h +++ b/Source/exehead/fileform.h @@ -397,7 +397,8 @@ typedef struct typedef struct { COLORREF text; - LOGBRUSH bk; + COLORREF bkc; + UINT lbStyle; HBRUSH bkb; int bkmode; int flags; diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 51444765..9c2e6505 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -58,10 +58,10 @@ HANDLE NSISCALL myCreateProcess(char *cmd, char *dir) return ProcInfo.hProcess; } -BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val) +/*BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val) { return SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)val); -} +}*/ BOOL NSISCALL my_SetDialogItemText(HWND dlg, UINT idx, const char *val) { diff --git a/Source/exehead/util.h b/Source/exehead/util.h index cf559469..df409ef8 100644 --- a/Source/exehead/util.h +++ b/Source/exehead/util.h @@ -16,8 +16,8 @@ WIN32_FIND_DATA * NSISCALL file_exists(char *buf); char * NSISCALL my_GetTempFileName(char *buf, const char *dir); int NSISCALL my_PIDL2Path(char *out, LPITEMIDLIST idl); -BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val); -//#define my_SetWindowText SetWindowText +//BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val); +#define my_SetWindowText SetWindowText BOOL NSISCALL my_SetDialogItemText(HWND dlg, UINT idx, const char *val); //int NSISCALL my_GetWindowText(HWND hWnd, char *val, int size); #define my_GetWindowText GetWindowText diff --git a/Source/script.cpp b/Source/script.cpp index 4113ebe5..87b72f73 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -3573,18 +3573,18 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) if (!strcmpi(line.gettoken_str(a+1),"transparent")) { c.flags|=CC_BKB; - c.bk.lbStyle=BS_NULL; + c.lbStyle=BS_NULL; c.bkmode=TRANSPARENT; } else { p=line.gettoken_str(a+1); if (*p) { int v=strtoul(p,&p,16); - c.bk.lbColor=((v&0xff)<<16)|(v&0xff00)|((v&0xff0000)>>16); + c.bkc=((v&0xff)<<16)|(v&0xff00)|((v&0xff0000)>>16); c.flags|=CC_BK|CC_BKB; } - c.bk.lbStyle=BS_SOLID; + c.lbStyle=BS_SOLID; c.bkmode=OPAQUE; } @@ -3599,10 +3599,10 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) if (a == 3) { c.flags|=CC_BK|CC_BKB; - c.bk.lbStyle=BS_NULL; + c.lbStyle=BS_NULL; if (!*line.gettoken_str(a)) { - c.bk.lbColor=COLOR_BTNFACE; + c.bkc=COLOR_BTNFACE; c.flags|=CC_BK_SYS; } c.flags|=CC_TEXT;