aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-07-06 16:10:13 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-07-06 21:30:49 +1000
commit00bd06f02cf168eb0752e1d0819969a528742ba7 (patch)
treed4eaed6ff7c29326c97c1551d2f1d7aede4de2b3
parent2f762cfb545e025e550e523986db3d79ba1fb5fa (diff)
downloadwix-00bd06f02cf168eb0752e1d0819969a528742ba7.tar.gz
wix-00bd06f02cf168eb0752e1d0819969a528742ba7.tar.bz2
wix-00bd06f02cf168eb0752e1d0819969a528742ba7.zip
Use the DefaultDPI width and height as the source width and height for images.
-rw-r--r--src/dutil/thmutil.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/dutil/thmutil.cpp b/src/dutil/thmutil.cpp
index b40868a1..4da489e4 100644
--- a/src/dutil/thmutil.cpp
+++ b/src/dutil/thmutil.cpp
@@ -1258,8 +1258,10 @@ DAPI_(HRESULT) ThemeDrawBackground(
1258 { 1258 {
1259 HDC hdcMem = ::CreateCompatibleDC(pps->hdc); 1259 HDC hdcMem = ::CreateCompatibleDC(pps->hdc);
1260 HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pTheme->hImage)); 1260 HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pTheme->hImage));
1261 DWORD dwSourceWidth = pTheme->nDefaultDpiWidth;
1262 DWORD dwSourceHeight = pTheme->nDefaultDpiHeight;
1261 1263
1262 ::StretchBlt(pps->hdc, 0, 0, pTheme->nWidth, pTheme->nHeight, hdcMem, pTheme->nSourceX, pTheme->nSourceY, pTheme->nWidth, pTheme->nHeight, SRCCOPY); 1264 ::StretchBlt(pps->hdc, 0, 0, pTheme->nWidth, pTheme->nHeight, hdcMem, pTheme->nSourceX, pTheme->nSourceY, dwSourceWidth, dwSourceHeight, SRCCOPY);
1263 1265
1264 ::SelectObject(hdcMem, hDefaultBitmap); 1266 ::SelectObject(hdcMem, hDefaultBitmap);
1265 ::DeleteDC(hdcMem); 1267 ::DeleteDC(hdcMem);
@@ -3666,6 +3668,8 @@ static HRESULT DrawButton(
3666{ 3668{
3667 int nSourceX = pControl->hImage ? 0 : pControl->nSourceX; 3669 int nSourceX = pControl->hImage ? 0 : pControl->nSourceX;
3668 int nSourceY = pControl->hImage ? 0 : pControl->nSourceY; 3670 int nSourceY = pControl->hImage ? 0 : pControl->nSourceY;
3671 DWORD dwSourceWidth = pControl->nDefaultDpiWidth;
3672 DWORD dwSourceHeight = pControl->nDefaultDpiHeight;
3669 3673
3670 HDC hdcMem = ::CreateCompatibleDC(pdis->hDC); 3674 HDC hdcMem = ::CreateCompatibleDC(pdis->hDC);
3671 HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pControl->hImage ? pControl->hImage : pTheme->hImage)); 3675 HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pControl->hImage ? pControl->hImage : pTheme->hImage));
@@ -3674,20 +3678,20 @@ static HRESULT DrawButton(
3674 // "clicked" gets priority 3678 // "clicked" gets priority
3675 if (ODS_SELECTED & pdis->itemState) 3679 if (ODS_SELECTED & pdis->itemState)
3676 { 3680 {
3677 nSourceY += pControl->nHeight * 2; 3681 nSourceY += pControl->nDefaultDpiHeight * 2;
3678 } 3682 }
3679 // then hover 3683 // then hover
3680 else if (pControl->dwData & THEME_CONTROL_DATA_HOVER) 3684 else if (pControl->dwData & THEME_CONTROL_DATA_HOVER)
3681 { 3685 {
3682 nSourceY += pControl->nHeight; 3686 nSourceY += pControl->nDefaultDpiHeight;
3683 } 3687 }
3684 // then focused 3688 // then focused
3685 else if (WS_TABSTOP & dwStyle && ODS_FOCUS & pdis->itemState) 3689 else if (WS_TABSTOP & dwStyle && ODS_FOCUS & pdis->itemState)
3686 { 3690 {
3687 nSourceY += pControl->nHeight * 3; 3691 nSourceY += pControl->nDefaultDpiHeight * 3;
3688 } 3692 }
3689 3693
3690 ::StretchBlt(pdis->hDC, 0, 0, pControl->nWidth, pControl->nHeight, hdcMem, nSourceX, nSourceY, pControl->nWidth, pControl->nHeight, SRCCOPY); 3694 ::StretchBlt(pdis->hDC, 0, 0, pControl->nWidth, pControl->nHeight, hdcMem, nSourceX, nSourceY, dwSourceWidth, dwSourceHeight, SRCCOPY);
3691 3695
3692 ::SelectObject(hdcMem, hDefaultBitmap); 3696 ::SelectObject(hdcMem, hDefaultBitmap);
3693 ::DeleteDC(hdcMem); 3697 ::DeleteDC(hdcMem);
@@ -3773,6 +3777,8 @@ static HRESULT DrawImage(
3773 DWORD dwWidth = pdis->rcItem.right - pdis->rcItem.left; 3777 DWORD dwWidth = pdis->rcItem.right - pdis->rcItem.left;
3774 int nSourceX = pControl->hImage ? 0 : pControl->nSourceX; 3778 int nSourceX = pControl->hImage ? 0 : pControl->nSourceX;
3775 int nSourceY = pControl->hImage ? 0 : pControl->nSourceY; 3779 int nSourceY = pControl->hImage ? 0 : pControl->nSourceY;
3780 DWORD dwSourceHeight = pControl->nDefaultDpiHeight;
3781 DWORD dwSourceWidth = pControl->nDefaultDpiWidth;
3776 3782
3777 BLENDFUNCTION bf = { }; 3783 BLENDFUNCTION bf = { };
3778 bf.BlendOp = AC_SRC_OVER; 3784 bf.BlendOp = AC_SRC_OVER;
@@ -3784,9 +3790,9 @@ static HRESULT DrawImage(
3784 3790
3785 // Try to draw the image with transparency and if that fails (usually because the image has no 3791 // Try to draw the image with transparency and if that fails (usually because the image has no
3786 // alpha channel) then draw the image as is. 3792 // alpha channel) then draw the image as is.
3787 if (!::AlphaBlend(pdis->hDC, 0, 0, dwWidth, dwHeight, hdcMem, nSourceX, nSourceY, dwWidth, dwHeight, bf)) 3793 if (!::AlphaBlend(pdis->hDC, 0, 0, dwWidth, dwHeight, hdcMem, nSourceX, nSourceY, dwSourceWidth, dwSourceHeight, bf))
3788 { 3794 {
3789 ::StretchBlt(pdis->hDC, 0, 0, dwWidth, dwHeight, hdcMem, nSourceX, nSourceY, dwWidth, dwHeight, SRCCOPY); 3795 ::StretchBlt(pdis->hDC, 0, 0, dwWidth, dwHeight, hdcMem, nSourceX, nSourceY, dwSourceWidth, dwSourceHeight, SRCCOPY);
3790 } 3796 }
3791 3797
3792 ::SelectObject(hdcMem, hDefaultBitmap); 3798 ::SelectObject(hdcMem, hDefaultBitmap);
@@ -3805,29 +3811,30 @@ static HRESULT DrawProgressBar(
3805 DWORD dwProgressPercentage = LOWORD(pControl->dwData); 3811 DWORD dwProgressPercentage = LOWORD(pControl->dwData);
3806 DWORD dwHeight = pdis->rcItem.bottom - pdis->rcItem.top; 3812 DWORD dwHeight = pdis->rcItem.bottom - pdis->rcItem.top;
3807 DWORD dwCenter = (pdis->rcItem.right - 2) * dwProgressPercentage / 100; 3813 DWORD dwCenter = (pdis->rcItem.right - 2) * dwProgressPercentage / 100;
3814 DWORD dwSourceHeight = pControl->nDefaultDpiHeight;
3808 int nSourceX = pControl->hImage ? 0 : pControl->nSourceX; 3815 int nSourceX = pControl->hImage ? 0 : pControl->nSourceX;
3809 int nSourceY = (pControl->hImage ? 0 : pControl->nSourceY) + (dwProgressColor * pControl->nHeight); 3816 int nSourceY = (pControl->hImage ? 0 : pControl->nSourceY) + (dwProgressColor * dwSourceHeight);
3810 3817
3811 HDC hdcMem = ::CreateCompatibleDC(pdis->hDC); 3818 HDC hdcMem = ::CreateCompatibleDC(pdis->hDC);
3812 HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pControl->hImage ? pControl->hImage : pTheme->hImage)); 3819 HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pControl->hImage ? pControl->hImage : pTheme->hImage));
3813 3820
3814 // Draw the left side of the progress bar. 3821 // Draw the left side of the progress bar.
3815 ::StretchBlt(pdis->hDC, 0, 0, 1, dwHeight, hdcMem, nSourceX, nSourceY, 1, dwHeight, SRCCOPY); 3822 ::StretchBlt(pdis->hDC, 0, 0, 1, dwHeight, hdcMem, nSourceX, nSourceY, 1, dwSourceHeight, SRCCOPY);
3816 3823
3817 // Draw the filled side of the progress bar, if there is any. 3824 // Draw the filled side of the progress bar, if there is any.
3818 if (0 < dwCenter) 3825 if (0 < dwCenter)
3819 { 3826 {
3820 ::StretchBlt(pdis->hDC, 1, 0, dwCenter, dwHeight, hdcMem, nSourceX + 1, nSourceY, 1, dwHeight, SRCCOPY); 3827 ::StretchBlt(pdis->hDC, 1, 0, dwCenter, dwHeight, hdcMem, nSourceX + 1, nSourceY, 1, dwSourceHeight, SRCCOPY);
3821 } 3828 }
3822 3829
3823 // Draw the unfilled side of the progress bar, if there is any. 3830 // Draw the unfilled side of the progress bar, if there is any.
3824 if (dwCenter < static_cast<DWORD>(pdis->rcItem.right - 2)) 3831 if (dwCenter < static_cast<DWORD>(pdis->rcItem.right - 2))
3825 { 3832 {
3826 ::StretchBlt(pdis->hDC, 1 + dwCenter, 0, pdis->rcItem.right - dwCenter - 1, dwHeight, hdcMem, nSourceX + 2, nSourceY, 1, dwHeight, SRCCOPY); 3833 ::StretchBlt(pdis->hDC, 1 + dwCenter, 0, pdis->rcItem.right - dwCenter - 1, dwHeight, hdcMem, nSourceX + 2, nSourceY, 1, dwSourceHeight, SRCCOPY);
3827 } 3834 }
3828 3835
3829 // Draw the right side of the progress bar. 3836 // Draw the right side of the progress bar.
3830 ::StretchBlt(pdis->hDC, pdis->rcItem.right - 1, 0, 1, dwHeight, hdcMem, nSourceX, nSourceY, 1, dwHeight, SRCCOPY); 3837 ::StretchBlt(pdis->hDC, pdis->rcItem.right - 1, 0, 1, dwHeight, hdcMem, nSourceX, nSourceY, 1, dwSourceHeight, SRCCOPY);
3831 3838
3832 ::SelectObject(hdcMem, hDefaultBitmap); 3839 ::SelectObject(hdcMem, hDefaultBitmap);
3833 ::DeleteDC(hdcMem); 3840 ::DeleteDC(hdcMem);