1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2025-01-26 08:03:48 +01:00

Weather: Option to limit width of the widget

This commit is contained in:
Valentin Radu 2022-02-21 17:47:45 +02:00
parent aa2aa9d3b6
commit d344cef35f
3 changed files with 29 additions and 11 deletions

View File

@ -3806,7 +3806,7 @@ void stub1(void* i)
} }
HWND PeopleButton_LastHWND = NULL; HWND PeopleButton_LastHWND = NULL;
#define WEATHER_FIXEDSIZE2_MAXWIDTH 192
BOOL explorer_DeleteMenu(HMENU hMenu, UINT uPosition, UINT uFlags) BOOL explorer_DeleteMenu(HMENU hMenu, UINT uPosition, UINT uFlags)
{ {
if (uPosition == 621 && uFlags == 0) // when removing News and interests if (uPosition == 621 && uFlags == 0) // when removing News and interests
@ -3895,6 +3895,7 @@ void RecomputeWeatherFlyoutLocation(HWND hWnd)
} }
int prev_total_h = 0; int prev_total_h = 0;
BOOL people_has_ellipsed = FALSE;
SIZE (*PeopleButton_CalculateMinimumSizeFunc)(void*, SIZE*); SIZE (*PeopleButton_CalculateMinimumSizeFunc)(void*, SIZE*);
SIZE WINAPI PeopleButton_CalculateMinimumSizeHook(void* _this, SIZE* pSz) SIZE WINAPI PeopleButton_CalculateMinimumSizeHook(void* _this, SIZE* pSz)
{ {
@ -3902,7 +3903,7 @@ SIZE WINAPI PeopleButton_CalculateMinimumSizeHook(void* _this, SIZE* pSz)
AcquireSRWLockShared(&lock_epw); AcquireSRWLockShared(&lock_epw);
if (epw) if (epw)
{ {
if (bWeatherFixedSize) if (bWeatherFixedSize == 1)
{ {
int mul = 1; int mul = 1;
switch (dwWeatherViewMode) switch (dwWeatherViewMode)
@ -4041,7 +4042,7 @@ int PeopleBand_MulDivHook(int nNumber, int nNumerator, int nDenominator)
AcquireSRWLockShared(&lock_epw); AcquireSRWLockShared(&lock_epw);
if (epw) if (epw)
{ {
if (bWeatherFixedSize) if (bWeatherFixedSize == 1)
{ {
int mul = 1; int mul = 1;
switch (dwWeatherViewMode) switch (dwWeatherViewMode)
@ -4120,6 +4121,8 @@ __int64 __fastcall PeopleBand_DrawTextWithGlowHook(
AcquireSRWLockShared(&lock_epw); AcquireSRWLockShared(&lock_epw);
if (a5 == 0x21 && epw) if (a5 == 0x21 && epw)
{ {
people_has_ellipsed = FALSE;
BOOL bUseCachedData = InSendMessage(); BOOL bUseCachedData = InSendMessage();
BOOL bIsThemeActive = TRUE; BOOL bIsThemeActive = TRUE;
if (!IsThemeActive() || IsHighContrast()) if (!IsThemeActive() || IsHighContrast())
@ -4319,12 +4322,13 @@ __int64 __fastcall PeopleBand_DrawTextWithGlowHook(
} }
int margin_v = (a4->bottom - rt) / 2; int margin_v = (a4->bottom - rt) / 2;
int total_h = (bIsIconMode ? ((margin_h - p) + rt + (margin_h - p)) : margin_h) + addend; int total_h = (bIsIconMode ? ((margin_h - p) + rt + (margin_h - p)) : margin_h) + addend;
if (bWeatherFixedSize) if (bWeatherFixedSize == 1)
{ {
if (total_h > a4->right) if (total_h > a4->right)
{ {
int diff = total_h - a4->right; int diff = total_h - a4->right;
rcText2.right -= diff - 2; rcText2.right -= diff - 2;
people_has_ellipsed = TRUE;
switch (dwWeatherViewMode) switch (dwWeatherViewMode)
{ {
case EP_WEATHER_VIEW_ICONTEXT: case EP_WEATHER_VIEW_ICONTEXT:
@ -4343,10 +4347,17 @@ __int64 __fastcall PeopleBand_DrawTextWithGlowHook(
} }
} }
int start_x = 0; // prev_total_h - total_h; int start_x = 0; // prev_total_h - total_h;
if (bWeatherFixedSize) if (bWeatherFixedSize == 1)
{ {
start_x = (a4->right - total_h) / 2; start_x = (a4->right - total_h) / 2;
} }
if (bWeatherFixedSize == 2 && (total_h > MulDiv(192, dpiX, 96)))
{
int diff = total_h - MulDiv(WEATHER_FIXEDSIZE2_MAXWIDTH, dpiX, 96);
rcText2.right -= diff - 2;
total_h = MulDiv(WEATHER_FIXEDSIZE2_MAXWIDTH, dpiX, 96);
people_has_ellipsed = TRUE;
}
HBITMAP hBitmap = NULL, hOldBitmap = NULL; HBITMAP hBitmap = NULL, hOldBitmap = NULL;
void* pvBits = NULL; void* pvBits = NULL;
@ -4432,7 +4443,7 @@ __int64 __fastcall PeopleBand_DrawTextWithGlowHook(
} }
} }
if (bWeatherFixedSize) if (bWeatherFixedSize == 1)
{ {
} }
@ -4525,7 +4536,12 @@ void WINAPI PeopleButton_ShowTooltipHook(__int64 _this, unsigned __int8 bShow)
{ {
WCHAR wszBuffer[MAX_PATH]; WCHAR wszBuffer[MAX_PATH];
ZeroMemory(wszBuffer, sizeof(WCHAR) * MAX_PATH); ZeroMemory(wszBuffer, sizeof(WCHAR) * MAX_PATH);
epw->lpVtbl->GetTitle(epw, sizeof(WCHAR) * MAX_PATH, wszBuffer, dwWeatherViewMode); DWORD mode = dwWeatherViewMode;
if (bWeatherFixedSize && people_has_ellipsed)
{
mode = EP_WEATHER_VIEW_ICONTEMP;
}
epw->lpVtbl->GetTitle(epw, sizeof(WCHAR) * MAX_PATH, wszBuffer, mode);
if (wcsstr(wszBuffer, L"(null)")) if (wcsstr(wszBuffer, L"(null)"))
{ {
HMODULE hModule = GetModuleHandleW(L"pnidui.dll"); HMODULE hModule = GetModuleHandleW(L"pnidui.dll");

View File

@ -370,8 +370,9 @@
;x 4 Temperature only ;x 4 Temperature only
;x 5 Temperature and description ;x 5 Temperature and description
"WeatherViewMode"=dword:00000000 "WeatherViewMode"=dword:00000000
;c 2 Widget size ;c 3 Widget size
;x 0 Enlarge/shrink to fit contents (default) ;x 0 Automatic (fit contents) (default)
;x 2 Automatic (fit contents) with threshold
;x 1 Fixed ;x 1 Fixed
"WeatherFixedSize"=dword:00000000 "WeatherFixedSize"=dword:00000000
;c 7 Update frequency ;c 7 Update frequency

View File

@ -313,8 +313,9 @@
;x 4 Temperature only ;x 4 Temperature only
;x 5 Temperature and description ;x 5 Temperature and description
"WeatherViewMode"=dword:00000000 "WeatherViewMode"=dword:00000000
;c 2 Widget size ;c 3 Widget size
;x 0 Enlarge/shrink to fit contents (default) ;x 0 Automatic (fit contents) (default)
;x 2 Automatic (fit contents) with threshold
;x 1 Fixed ;x 1 Fixed
"WeatherFixedSize"=dword:00000000 "WeatherFixedSize"=dword:00000000
;c 7 Update frequency ;c 7 Update frequency