diff options
author | George Hazan <ghazan@miranda.im> | 2019-05-07 17:50:16 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2019-05-07 17:50:16 +0300 |
commit | eb20e783fc7fc676d8a7d8c16d51b3a2bd4d5a04 (patch) | |
tree | 10000ad76541987e4ab29a5001b71527acab177c /plugins/TipperYM/src | |
parent | 81b62e61714b9b0c728d35a1a9ee11fe9f844fef (diff) |
fixes #1934 (TipperYM crash)
Diffstat (limited to 'plugins/TipperYM/src')
-rw-r--r-- | plugins/TipperYM/src/bitmap_func.cpp | 43 | ||||
-rw-r--r-- | plugins/TipperYM/src/popwin.cpp | 9 |
2 files changed, 18 insertions, 34 deletions
diff --git a/plugins/TipperYM/src/bitmap_func.cpp b/plugins/TipperYM/src/bitmap_func.cpp index 974f90e81c..db3a24e0c7 100644 --- a/plugins/TipperYM/src/bitmap_func.cpp +++ b/plugins/TipperYM/src/bitmap_func.cpp @@ -374,7 +374,7 @@ void CreateSkinBitmap(int iWidth, int iHeight, bool bServiceTip) bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 32;
bi.bmiHeader.biCompression = BI_RGB;
- skin.hBitmap = (HBITMAP)CreateDIBSection(nullptr, &bi, DIB_RGB_COLORS, (void **)&skin.colBits, nullptr, 0);
+ skin.hBitmap = CreateDIBSection(nullptr, &bi, DIB_RGB_COLORS, (void **)&skin.colBits, nullptr, 0);
if (!skin.hBitmap)
return;
@@ -413,28 +413,19 @@ COLOR32* SaveAlpha(LPRECT lpRect) {
GdiFlush();
- if (lpRect->left < 0) lpRect->left = 0;
- if (lpRect->top < 0) lpRect->top = 0;
- if (lpRect->right - lpRect->left > skin.iWidth) lpRect->right = lpRect->left + skin.iWidth;
- if (lpRect->bottom - lpRect->top > skin.iHeight) lpRect->bottom = lpRect->top + skin.iHeight;
+ RECT rc, rcSkin = { 0, 0, skin.iWidth, skin.iHeight };
+ IntersectRect(&rc, lpRect, &rcSkin);
- int x = lpRect->left;
- int y = lpRect->top;
- int w = lpRect->right - lpRect->left;
- int h = lpRect->bottom - lpRect->top;
+ int w = rc.right - rc.left;
+ int h = rc.bottom - rc.top;
COLOR32 *res = (COLOR32 *)mir_alloc(sizeof(COLOR32) * w * h);
COLOR32 *p1 = res;
for (int i = 0; i < h; i++) {
- if (i + y < 0) continue;
- if (i + y >= skin.iHeight) break;
- COLOR32 *p2 = skin.colBits + (y + i)*skin.iWidth + x;
- for (int j = 0; j < w; j++) {
- if (j + x < 0) continue;
- if (j + x >= skin.iWidth) break;
+ COLOR32 *p2 = skin.colBits + (rc.top + i)*skin.iWidth + rc.left;
+ for (int j = 0; j < w; j++)
*p1++ = *p2++;
- }
}
return res;
}
@@ -443,26 +434,16 @@ void RestoreAlpha(LPRECT lpRect, COLOR32 *pBits, BYTE alpha) {
GdiFlush();
- if (lpRect->left < 0) lpRect->left = 0;
- if (lpRect->top < 0) lpRect->top = 0;
- if (lpRect->right > skin.iWidth) lpRect->right = skin.iWidth;
- if (lpRect->bottom > skin.iHeight) lpRect->bottom = skin.iHeight;
+ RECT rc, rcSkin = { 0, 0, skin.iWidth, skin.iHeight };
+ IntersectRect(&rc, lpRect, &rcSkin);
- int x = lpRect->left;
- int y = lpRect->top;
- int w = lpRect->right - lpRect->left;
- int h = lpRect->bottom - lpRect->top;
+ int w = rc.right - rc.left;
+ int h = rc.bottom - rc.top;
COLOR32 *p1 = pBits;
-
for (int i = 0; i < h; i++) {
- if (i + y < 0) continue;
- if (i + y >= skin.iHeight) break;
- COLOR32 *p2 = skin.colBits + (y + i)*skin.iWidth + x;
+ COLOR32 *p2 = skin.colBits + (rc.top + i)*skin.iWidth + rc.left;
for (int j = 0; j < w; j++) {
- if (j + x < 0) continue;
- if (j + x >= skin.iWidth) break;
-
if ((*p1 & 0x00ffffff) != (*p2 & 0x00ffffff))
*p2 |= (alpha << 24);
else
diff --git a/plugins/TipperYM/src/popwin.cpp b/plugins/TipperYM/src/popwin.cpp index d57cc4885f..c760bce335 100644 --- a/plugins/TipperYM/src/popwin.cpp +++ b/plugins/TipperYM/src/popwin.cpp @@ -555,7 +555,8 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa // title text if (opt.bShowTitle) { - if (hFontTitle) SelectObject(hdc, (HGDIOBJ)hFontTitle); + if (hFontTitle) + SelectObject(hdc, (HGDIOBJ)hFontTitle); SetTextColor(hdc, opt.colTitle); tr.top = opt.iPadding; tr.bottom = tr.top + pwd->iTitleHeight - opt.iPadding; @@ -619,11 +620,13 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa tr.bottom = tr.top + iRowHeight; if (pwd->bIsTrayTip && pwd->rows[i].bIsTitle) { - if (hFontTrayTitle) SelectObject(hdc, (HGDIOBJ)hFontTrayTitle); + if (hFontTrayTitle) + SelectObject(hdc, (HGDIOBJ)hFontTrayTitle); SetTextColor(hdc, opt.colTrayTitle); } else { - if (hFontLabels) SelectObject(hdc, (HGDIOBJ)hFontLabels); + if (hFontLabels) + SelectObject(hdc, (HGDIOBJ)hFontLabels); SetTextColor(hdc, opt.colLabel); } |