Index: win32/shell32/dialogs/drvdefext.cpp =================================================================== --- win32/shell32/dialogs/drvdefext.cpp (revision 75615) +++ win32/shell32/dialogs/drvdefext.cpp (working copy) @@ -211,64 +211,60 @@ { HBRUSH hBlueBrush = CreateSolidBrush(RGB(0, 0, 255)); HBRUSH hMagBrush = CreateSolidBrush(RGB(255, 0, 255)); + HBRUSH hbrOld; HPEN hDarkBluePen = CreatePen(PS_SOLID, 1, RGB(0, 0, 128)); HPEN hDarkMagPen = CreatePen(PS_SOLID, 1, RGB(128, 0, 128)); - - INT xCenter = (pDrawItem->rcItem.left + pDrawItem->rcItem.right)/2; - INT yCenter = (pDrawItem->rcItem.top + pDrawItem->rcItem.bottom - 10)/2; + HPEN hOldPen = (HPEN)SelectObject(pDrawItem->hDC, hDarkMagPen); + INT xCenter = (pDrawItem->rcItem.left + pDrawItem->rcItem.right) / 2; + INT yCenter = (pDrawItem->rcItem.top + pDrawItem->rcItem.bottom - 10) / 2; INT cx = pDrawItem->rcItem.right - pDrawItem->rcItem.left; INT cy = pDrawItem->rcItem.bottom - pDrawItem->rcItem.top - 10; - TRACE("FreeSpace %u a %f cx %d\n", m_FreeSpacePerc, M_PI+m_FreeSpacePerc/100.0f*M_PI*2.0f, cx); + INT xRadial = xCenter + (INT)(cos(M_PI + m_FreeSpacePerc / 100.0f * M_PI * 2.0f) * cx / 2); + INT yRadial = yCenter - (INT)(sin(M_PI + m_FreeSpacePerc / 100.0f * M_PI * 2.0f) * cy / 2); - HBRUSH hbrOld = (HBRUSH)SelectObject(pDrawItem->hDC, hMagBrush); - INT xRadial = xCenter + (INT)(cos(M_PI+m_FreeSpacePerc/100.0f*M_PI*2.0f)*cx/2); - INT yRadial = yCenter - (INT)(sin(M_PI+m_FreeSpacePerc/100.0f*M_PI*2.0f)*cy/2); - if (m_FreeSpacePerc > 0) - { - Pie(pDrawItem->hDC, - pDrawItem->rcItem.left, - pDrawItem->rcItem.top, - pDrawItem->rcItem.right, - pDrawItem->rcItem.bottom - 10, - pDrawItem->rcItem.left, - yCenter, - xRadial, - yRadial); + TRACE("FreeSpace %u a %f cx %d\n", m_FreeSpacePerc, M_PI+m_FreeSpacePerc / 100.0f * M_PI * 2.0f, cx); - SelectObject(pDrawItem->hDC, hBlueBrush); - Pie(pDrawItem->hDC, - pDrawItem->rcItem.left, - pDrawItem->rcItem.top, - pDrawItem->rcItem.right, - pDrawItem->rcItem.bottom - 10, - xRadial, - yRadial, - pDrawItem->rcItem.left, - yCenter); - SelectObject(pDrawItem->hDC, hbrOld); - } - else - { - SelectObject(pDrawItem->hDC, hBlueBrush); - Ellipse(pDrawItem->hDC, - pDrawItem->rcItem.left, - pDrawItem->rcItem.top, - pDrawItem->rcItem.right, - pDrawItem->rcItem.bottom - 10); - } - HPEN hOldPen = (HPEN)SelectObject(pDrawItem->hDC, hDarkMagPen); for (INT x = pDrawItem->rcItem.left; x < pDrawItem->rcItem.right; ++x) { + double cos_val = (x - xCenter) * 2.0f / cx; + INT y = yCenter + (INT)(sin(acos(cos_val)) * cy / 2) - 1; + if (m_FreeSpacePerc < 50 && x == xRadial) SelectObject(pDrawItem->hDC, hDarkBluePen); - double cos_val = (x - xCenter)*2.0f/cx; - INT y = yCenter+(INT)(sin(acos(cos_val))*cy/2); MoveToEx(pDrawItem->hDC, x, y, NULL); LineTo(pDrawItem->hDC, x, y + 10); } + SelectObject(pDrawItem->hDC, hOldPen); + if (m_FreeSpacePerc > 50) + { + hbrOld = (HBRUSH)SelectObject(pDrawItem->hDC, hMagBrush); + + Ellipse(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top, + pDrawItem->rcItem.right, pDrawItem->rcItem.bottom - 10); + + SelectObject(pDrawItem->hDC, hBlueBrush); + + Pie(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top, pDrawItem->rcItem.right, + pDrawItem->rcItem.bottom - 10, xRadial, yRadial, pDrawItem->rcItem.left, yCenter); + } + else + { + hbrOld = (HBRUSH)SelectObject(pDrawItem->hDC, hBlueBrush); + + Ellipse(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top, + pDrawItem->rcItem.right, pDrawItem->rcItem.bottom - 10); + + SelectObject(pDrawItem->hDC, hMagBrush); + + Pie(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top, pDrawItem->rcItem.right, + pDrawItem->rcItem.bottom - 10, pDrawItem->rcItem.left, yCenter, xRadial, yRadial); + } + + SelectObject(pDrawItem->hDC, hbrOld); + DeleteObject(hBlueBrush); DeleteObject(hMagBrush); DeleteObject(hDarkBluePen);