svnno****@sourc*****
svnno****@sourc*****
2014年 4月 20日 (日) 19:45:53 JST
Revision: 5570 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5570 Author: yutakapon Date: 2014-04-20 19:45:52 +0900 (Sun, 20 Apr 2014) Log Message: ----------- チケット #33694 Eterm look-feelの背景画像指定において、JPEGファイルが正しく描画されないことが ある問題に対処した。 Ticket Links: ------------ http://sourceforge.jp/projects/ttssh2/tracker/detail/33694 Modified Paths: -------------- trunk/teraterm/teraterm/vtdisp.c -------------- next part -------------- Modified: trunk/teraterm/teraterm/vtdisp.c =================================================================== --- trunk/teraterm/teraterm/vtdisp.c 2014-04-14 04:29:55 UTC (rev 5569) +++ trunk/teraterm/teraterm/vtdisp.c 2014-04-20 10:45:52 UTC (rev 5570) @@ -177,9 +177,29 @@ BOOL (FAR WINAPI *BGAlphaBlend)(HDC,int,int,int,int,HDC,int,int,int,int,BGBLENDFUNCTION); BOOL (FAR WINAPI *BGEnumDisplayMonitors)(HDC,LPCRECT,MONITORENUMPROC,LPARAM); +static HBITMAP GetBitmapHandle(char *File); + //\x95֗\x98\x8A\x94\x81\x99 +// LoadImage() \x82\xB5\x82\xA9\x8Eg\x82\xA6\x82Ȃ\xA2\x8A\xAB\x82\xA9\x82ǂ\xA4\x82\xA9\x82ʂ\xB7\x82\xE9\x81B +// LoadImage()\x82ł\xCD .bmp \x88ȊO\x82̉摜\x83t\x83@\x83C\x83\x8B\x82\xAA\x88\xB5\x82\xA6\x82Ȃ\xA2\x82̂ŗv\x92\x8D\x88ӁB +// (2014.4.20 yutaka) +static BOOL IsLoadImageOnlyEnabled(void) +{ + OSVERSIONINFO osvi; + + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&osvi); + // Vista \x96\xA2\x96\x9E\x82̏ꍇ\x82ɂ́A\x8D\xA1\x82܂Œʂ\xE8\x82̓ǂݍ\x9E\x82݂\xF0\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD + // cf. SVN#4571(2011.8.4) + if (osvi.dwMajorVersion < 6) { + return TRUE; + } + return FALSE; +} + + void dprintf(char *format, ...) { va_list args; @@ -612,10 +632,17 @@ GlobalFree(fileBuf); - //\x89摜\x82\xF0\x83r\x83b\x83g\x83}\x83b\x83v\x82Ƃ\xB5\x82ēǂݍ\x9E\x82\xDD + if (IsLoadImageOnlyEnabled()) { + //\x89摜\x82\xF0\x83r\x83b\x83g\x83}\x83b\x83v\x82Ƃ\xB5\x82ēǂݍ\x9E\x82\xDD + hbm = LoadImage(0,src->file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); - hbm = LoadImage(0,src->file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); + } else { + // Susie plugin\x82œǂݍ\x9E\x82߂Ȃ\xA2JPEG\x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB5\x82\xBD\x8Fꍇ\x81A + // OLE \x82𗘗p\x82\xB5\x82ēǂށB + hbm = GetBitmapHandle(src->file); + } + if(hbm) { BITMAP bm; @@ -835,10 +862,8 @@ void BGPreloadWallpaper(BGSrc *src) { -//#define DEBUG_XP HBITMAP hbm; WallpaperInfo wi; - OSVERSIONINFO osvi; int s_width, s_height; BGGetWallpaperInfo(&wi); @@ -847,12 +872,7 @@ strcpy(wi.filename, "c:\\usr\\ttssh2\\1011_01.jpg"); #endif - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); -#ifdef DEBUG_XP - osvi.dwMajorVersion = 7; -#endif - if (osvi.dwMajorVersion < 6) { + if (IsLoadImageOnlyEnabled()) { //\x95ǎ\x86\x82\xF0\x93ǂݍ\x9E\x82\xDD //LR_CREATEDIBSECTION \x82\xF0\x8Ew\x92肷\x82\xE9\x82̂\xAA\x83R\x83c if (wi.pattern == BG_STRETCH) { @@ -965,31 +985,39 @@ void BGStretchPicture(HDC hdcDest,BGSrc *src,int x,int y,int width,int height,BOOL bAntiAlias) { - if(!hdcDest || !src) - return; + if(!hdcDest || !src) + return; - if(bAntiAlias) - { - if(src->width != width || src->height != height) - { - HBITMAP hbm; + if(bAntiAlias) + { + if(src->width != width || src->height != height) + { + HBITMAP hbm; - hbm = LoadImage(0,src->file,IMAGE_BITMAP,width,height,LR_LOADFROMFILE); + if (IsLoadImageOnlyEnabled()) { + hbm = LoadImage(0,src->file,IMAGE_BITMAP,width,height,LR_LOADFROMFILE); + } else { + HBITMAP newhbm; + hbm = GetBitmapHandle(src->file); + newhbm = CreateStretched32BppBitmapBilinear(hbm, width, height); + DeleteObject(hbm); + hbm = newhbm; + } - if(!hbm) - return; - - DeleteBitmapDC(&(src->hdc)); - src->hdc = CreateBitmapDC(hbm); - src->width = width; - src->height = height; - } - - BitBlt(hdcDest,x,y,width,height,src->hdc,0,0,SRCCOPY); - }else{ - SetStretchBltMode(src->hdc,COLORONCOLOR); - StretchBlt(hdcDest,x,y,width,height,src->hdc,0,0,src->width,src->height,SRCCOPY); - } + if(!hbm) + return; + + DeleteBitmapDC(&(src->hdc)); + src->hdc = CreateBitmapDC(hbm); + src->width = width; + src->height = height; + } + + BitBlt(hdcDest,x,y,width,height,src->hdc,0,0,SRCCOPY); + }else{ + SetStretchBltMode(src->hdc,COLORONCOLOR); + StretchBlt(hdcDest,x,y,width,height,src->hdc,0,0,src->width,src->height,SRCCOPY); + } } void BGLoadPicture(HDC hdcDest,BGSrc *src)