mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2024-11-23 23:21:08 +01:00
Weather: Implemented zoom levels (#1033)
This commit is contained in:
parent
aa8524487b
commit
25ef1b23e1
@ -127,6 +127,7 @@ DWORD dwWeatherDevMode = FALSE;
|
|||||||
DWORD dwWeatherIconPack = EP_WEATHER_ICONPACK_MICROSOFT;
|
DWORD dwWeatherIconPack = EP_WEATHER_ICONPACK_MICROSOFT;
|
||||||
DWORD dwWeatherToLeft = 0;
|
DWORD dwWeatherToLeft = 0;
|
||||||
DWORD dwWeatherContentsMode = 0;
|
DWORD dwWeatherContentsMode = 0;
|
||||||
|
DWORD dwWeatherZoomFactor = 0;
|
||||||
WCHAR* wszWeatherTerm = NULL;
|
WCHAR* wszWeatherTerm = NULL;
|
||||||
WCHAR* wszWeatherLanguage = NULL;
|
WCHAR* wszWeatherLanguage = NULL;
|
||||||
WCHAR* wszEPWeatherKillswitch = NULL;
|
WCHAR* wszEPWeatherKillswitch = NULL;
|
||||||
@ -4366,10 +4367,10 @@ SIZE WINAPI PeopleButton_CalculateMinimumSizeHook(void* _this, SIZE* pSz)
|
|||||||
RECT rcWeatherFlyoutWindow;
|
RECT rcWeatherFlyoutWindow;
|
||||||
rcWeatherFlyoutWindow.left = mi.rcWork.left;
|
rcWeatherFlyoutWindow.left = mi.rcWork.left;
|
||||||
rcWeatherFlyoutWindow.top = mi.rcWork.top;
|
rcWeatherFlyoutWindow.top = mi.rcWork.top;
|
||||||
rcWeatherFlyoutWindow.right = rcWeatherFlyoutWindow.left + MulDiv(MulDiv(EP_WEATHER_WIDTH, dpiX, 96), dwTextScaleFactor, 100);
|
rcWeatherFlyoutWindow.right = rcWeatherFlyoutWindow.left + MulDiv(MulDiv(MulDiv(EP_WEATHER_WIDTH, dpiX, 96), dwTextScaleFactor, 100), dwWeatherZoomFactor, 100);
|
||||||
rcWeatherFlyoutWindow.bottom = rcWeatherFlyoutWindow.top + MulDiv(MulDiv(EP_WEATHER_HEIGHT, dpiX, 96), dwTextScaleFactor, 100);
|
rcWeatherFlyoutWindow.bottom = rcWeatherFlyoutWindow.top + MulDiv(MulDiv(MulDiv(EP_WEATHER_HEIGHT, dpiX, 96), dwTextScaleFactor, 100), dwWeatherZoomFactor, 100);
|
||||||
int k = 0;
|
int k = 0;
|
||||||
while (FAILED(hr = epw->lpVtbl->Initialize(epw, wszEPWeatherKillswitch, bAllocConsole, EP_WEATHER_PROVIDER_GOOGLE, rt, rt, dwWeatherTemperatureUnit, dwWeatherUpdateSchedule * 1000, rcWeatherFlyoutWindow, dwWeatherTheme, dwWeatherGeolocationMode, &hWndWeatherFlyout)))
|
while (FAILED(hr = epw->lpVtbl->Initialize(epw, wszEPWeatherKillswitch, bAllocConsole, EP_WEATHER_PROVIDER_GOOGLE, rt, rt, dwWeatherTemperatureUnit, dwWeatherUpdateSchedule * 1000, rcWeatherFlyoutWindow, dwWeatherTheme, dwWeatherGeolocationMode, &hWndWeatherFlyout, dwWeatherZoomFactor ? dwWeatherZoomFactor : 100, dpiX, dpiY)))
|
||||||
{
|
{
|
||||||
BOOL bFailed = FALSE;
|
BOOL bFailed = FALSE;
|
||||||
if (k == 0 && hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
|
if (k == 0 && hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
|
||||||
@ -6521,7 +6522,7 @@ void WINAPI LoadSettings(LPARAM lParam)
|
|||||||
dwRefreshUIMask = REFRESHUI_PEOPLE;
|
dwRefreshUIMask = REFRESHUI_PEOPLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD bOldWeatherContentsMode = dwWeatherContentsMode;
|
DWORD dwOldWeatherContentsMode = dwWeatherContentsMode;
|
||||||
dwSize = sizeof(DWORD);
|
dwSize = sizeof(DWORD);
|
||||||
RegQueryValueExW(
|
RegQueryValueExW(
|
||||||
hKey,
|
hKey,
|
||||||
@ -6531,11 +6532,29 @@ void WINAPI LoadSettings(LPARAM lParam)
|
|||||||
&dwWeatherContentsMode,
|
&dwWeatherContentsMode,
|
||||||
&dwSize
|
&dwSize
|
||||||
);
|
);
|
||||||
if (dwWeatherContentsMode != bOldWeatherContentsMode && epw)
|
if (dwWeatherContentsMode != dwOldWeatherContentsMode && PeopleButton_LastHWND)
|
||||||
{
|
{
|
||||||
dwRefreshUIMask |= REFRESHUI_PEOPLE;
|
dwRefreshUIMask |= REFRESHUI_PEOPLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD dwOldWeatherZoomFactor = dwWeatherZoomFactor;
|
||||||
|
dwSize = sizeof(DWORD);
|
||||||
|
RegQueryValueExW(
|
||||||
|
hKey,
|
||||||
|
TEXT("WeatherZoomFactor"),
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
&dwWeatherZoomFactor,
|
||||||
|
&dwSize
|
||||||
|
);
|
||||||
|
if (dwWeatherZoomFactor != dwOldWeatherZoomFactor && PeopleButton_LastHWND)
|
||||||
|
{
|
||||||
|
if (epw)
|
||||||
|
{
|
||||||
|
epw->lpVtbl->SetZoomFactor(epw, dwWeatherZoomFactor ? (LONG64)dwWeatherZoomFactor : 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ReleaseSRWLockShared(&lock_epw);
|
ReleaseSRWLockShared(&lock_epw);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -477,6 +477,25 @@
|
|||||||
;x 0 On a single line (default)
|
;x 0 On a single line (default)
|
||||||
;x 1 On 2 lines, if possible
|
;x 1 On 2 lines, if possible
|
||||||
"WeatherContentsMode"=dword:00000000
|
"WeatherContentsMode"=dword:00000000
|
||||||
|
;c 17 Zoom
|
||||||
|
;x 25 25 %
|
||||||
|
;x 33 33 %
|
||||||
|
;x 50 50 %
|
||||||
|
;x 67 67 %
|
||||||
|
;x 75 75 %
|
||||||
|
;x 80 80 %
|
||||||
|
;x 90 90 %
|
||||||
|
;x 0 100 % (default)
|
||||||
|
;x 110 110 %
|
||||||
|
;x 125 125 %
|
||||||
|
;x 150 150 %
|
||||||
|
;x 175 175 %
|
||||||
|
;x 200 200 %
|
||||||
|
;x 250 250 %
|
||||||
|
;x 300 300 %
|
||||||
|
;x 400 400 %
|
||||||
|
;x 500 500 %
|
||||||
|
"WeatherZoomFactor"=dword:00000000
|
||||||
;q
|
;q
|
||||||
;t Weather data courtesy of Google, and weather.com.
|
;t Weather data courtesy of Google, and weather.com.
|
||||||
;y Learn more about the Weather taskbar widget 🡕
|
;y Learn more about the Weather taskbar widget 🡕
|
||||||
|
@ -416,6 +416,25 @@
|
|||||||
;x 0 On a single line (default)
|
;x 0 On a single line (default)
|
||||||
;x 1 On 2 lines, if possible
|
;x 1 On 2 lines, if possible
|
||||||
"WeatherContentsMode"=dword:00000000
|
"WeatherContentsMode"=dword:00000000
|
||||||
|
;c 17 Zoom
|
||||||
|
;x 25 25 %
|
||||||
|
;x 33 33 %
|
||||||
|
;x 50 50 %
|
||||||
|
;x 67 67 %
|
||||||
|
;x 75 75 %
|
||||||
|
;x 80 80 %
|
||||||
|
;x 90 90 %
|
||||||
|
;x 0 100 % (default)
|
||||||
|
;x 110 110 %
|
||||||
|
;x 125 125 %
|
||||||
|
;x 150 150 %
|
||||||
|
;x 175 175 %
|
||||||
|
;x 200 200 %
|
||||||
|
;x 250 250 %
|
||||||
|
;x 300 300 %
|
||||||
|
;x 400 400 %
|
||||||
|
;x 500 500 %
|
||||||
|
"WeatherZoomFactor"=dword:00000000
|
||||||
;q
|
;q
|
||||||
;t Weather data courtesy of Google, and weather.com.
|
;t Weather data courtesy of Google, and weather.com.
|
||||||
;y Learn more about the Weather taskbar widget 🡕
|
;y Learn more about the Weather taskbar widget 🡕
|
||||||
|
@ -67,9 +67,11 @@ DEFINE_GUID(IID_IEPWeather,
|
|||||||
#define EP_WEATHER_WM_SET_BROWSER_THEME (WM_USER + 11)
|
#define EP_WEATHER_WM_SET_BROWSER_THEME (WM_USER + 11)
|
||||||
#define EP_WEATHER_WM_REBOUND_BROWSER (WM_USER + 12)
|
#define EP_WEATHER_WM_REBOUND_BROWSER (WM_USER + 12)
|
||||||
#define EP_WEATHER_WM_SETDEVMODE (WM_USER + 13)
|
#define EP_WEATHER_WM_SETDEVMODE (WM_USER + 13)
|
||||||
|
#define EP_WEATHER_WM_SETZOOMFACTOR (WM_USER + 14)
|
||||||
|
|
||||||
#define EP_WEATHER_HEIGHT 391
|
#define EP_WEATHER_HEIGHT_ERROR 260
|
||||||
#define EP_WEATHER_WIDTH 690
|
#define EP_WEATHER_HEIGHT 353
|
||||||
|
#define EP_WEATHER_WIDTH 673
|
||||||
|
|
||||||
#define EP_WEATHER_ICONPACK_MICROSOFT 0
|
#define EP_WEATHER_ICONPACK_MICROSOFT 0
|
||||||
#define EP_WEATHER_ICONPACK_GOOGLE 1
|
#define EP_WEATHER_ICONPACK_GOOGLE 1
|
||||||
|
@ -43,8 +43,7 @@ static void epw_Weather_SetTextScaleFactorFromRegistry(EPWeather* _this, HKEY hK
|
|||||||
}
|
}
|
||||||
if (bRefresh)
|
if (bRefresh)
|
||||||
{
|
{
|
||||||
_this->cntResizeWindow = 0;
|
_ep_Weather_StartResize(_this);
|
||||||
SetTimer(_this->hWnd, EP_WEATHER_TIMER_RESIZE_WINDOW, EP_WEATHER_TIMER_RESIZE_WINDOW_DELAY, NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,16 +151,21 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2EnvironmentCompleted(I
|
|||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToError(EPWeather* _this)
|
HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToError(EPWeather* _this)
|
||||||
{
|
{
|
||||||
_ep_weather_ReboundBrowser(_this, TRUE);
|
_ep_Weather_ReboundBrowser(_this, TRUE);
|
||||||
InterlockedExchange64(&_this->bIsNavigatingToError, TRUE);
|
InterlockedExchange64(&_this->bIsNavigatingToError, TRUE);
|
||||||
UINT dpi = GetDpiForWindow(_this->hWnd);
|
UINT dpi = GetDpiForWindow(_this->hWnd);
|
||||||
int ch = MulDiv(MulDiv(305, dpi, 96), epw_Weather_GetTextScaleFactor(_this), 100);
|
DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
||||||
|
DWORD dwZoomFactor = epw_Weather_GetZoomFactor(_this);
|
||||||
|
int ch = MulDiv(MulDiv(MulDiv(EP_WEATHER_HEIGHT_ERROR, dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100);
|
||||||
RECT rc;
|
RECT rc;
|
||||||
GetWindowRect(_this->hWnd, &rc);
|
GetClientRect(_this->hWnd, &rc);
|
||||||
int w = MulDiv(MulDiv(EP_WEATHER_WIDTH, GetDpiForWindow(_this->hWnd), 96), epw_Weather_GetTextScaleFactor(_this), 100);
|
int w = MulDiv(MulDiv(MulDiv(EP_WEATHER_WIDTH, GetDpiForWindow(_this->hWnd), 96), dwTextScaleFactor, 100), dwZoomFactor, 100);
|
||||||
if ((rc.bottom - rc.top != ch) || (rc.right - rc.left != w))
|
if ((rc.bottom - rc.top != ch) || (rc.right - rc.left != w))
|
||||||
{
|
{
|
||||||
SetWindowPos(_this->hWnd, NULL, 0, 0, w, ch, SWP_NOMOVE | SWP_NOSENDCHANGING);
|
RECT rcAdj;
|
||||||
|
SetRect(&rcAdj, 0, 0, w, ch);
|
||||||
|
AdjustWindowRectExForDpi(&rcAdj, epw_Weather_GetStyle(_this) & ~WS_OVERLAPPED, epw_Weather_HasMenuBar(_this), epw_Weather_GetExtendedStyle(_this), dpi);
|
||||||
|
SetWindowPos(_this->hWnd, NULL, 0, 0, rcAdj.right - rcAdj.left, rcAdj.bottom - rcAdj.top, SWP_NOMOVE | SWP_NOSENDCHANGING);
|
||||||
HWND hNotifyWnd = InterlockedAdd64(&_this->hNotifyWnd, 0);
|
HWND hNotifyWnd = InterlockedAdd64(&_this->hNotifyWnd, 0);
|
||||||
if (hNotifyWnd)
|
if (hNotifyWnd)
|
||||||
{
|
{
|
||||||
@ -180,7 +184,7 @@ HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToError(EPWeather* _this)
|
|||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToProvider(EPWeather* _this)
|
HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToProvider(EPWeather* _this)
|
||||||
{
|
{
|
||||||
_ep_weather_ReboundBrowser(_this, FALSE);
|
_ep_Weather_ReboundBrowser(_this, FALSE);
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
LONG64 dwProvider = InterlockedAdd64(&_this->dwProvider, 0);
|
LONG64 dwProvider = InterlockedAdd64(&_this->dwProvider, 0);
|
||||||
if (dwProvider == EP_WEATHER_PROVIDER_TEST)
|
if (dwProvider == EP_WEATHER_PROVIDER_TEST)
|
||||||
@ -259,7 +263,14 @@ HRESULT STDMETHODCALLTYPE _epw_Weather_ExecuteDataScript(EPWeather* _this)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE _ep_weather_ReboundBrowser(EPWeather* _this, LONG64 dwType)
|
HRESULT STDMETHODCALLTYPE _ep_Weather_StartResize(EPWeather* _this)
|
||||||
|
{
|
||||||
|
_this->cntResizeWindow = 0;
|
||||||
|
SetTimer(_this->hWnd, EP_WEATHER_TIMER_RESIZE_WINDOW, EP_WEATHER_TIMER_RESIZE_WINDOW_DELAY, NULL);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE _ep_Weather_ReboundBrowser(EPWeather* _this, LONG64 dwType)
|
||||||
{
|
{
|
||||||
UINT dpi = GetDpiForWindow(_this->hWnd);
|
UINT dpi = GetDpiForWindow(_this->hWnd);
|
||||||
RECT bounds;
|
RECT bounds;
|
||||||
@ -271,10 +282,11 @@ HRESULT STDMETHODCALLTYPE _ep_weather_ReboundBrowser(EPWeather* _this, LONG64 dw
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
||||||
bounds.left = 0 - MulDiv(MulDiv(167, dpi, 96), dwTextScaleFactor, 100);
|
DWORD dwZoomFactor = epw_Weather_GetZoomFactor(_this);
|
||||||
bounds.top = 0 - MulDiv(MulDiv(178, dpi, 96), dwTextScaleFactor, 100);
|
bounds.left = 0 - MulDiv(MulDiv(MulDiv(167, dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100);
|
||||||
bounds.right = MulDiv(MulDiv((!InterlockedAdd64(&_this->dwTextDir, 0) ? 1333 : 705), dpi, 96), dwTextScaleFactor, 100);// 5560;
|
bounds.top = 0 - MulDiv(MulDiv(MulDiv(178, dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100);
|
||||||
bounds.bottom = MulDiv(MulDiv(600, dpi, 96), dwTextScaleFactor, 100);// 15600;
|
bounds.right = MulDiv(MulDiv(MulDiv((!InterlockedAdd64(&_this->dwTextDir, 0) ? 1333 : 705), dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100);// 5560;
|
||||||
|
bounds.bottom = MulDiv(MulDiv(MulDiv(600, dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100);// 15600;
|
||||||
}
|
}
|
||||||
if (_this->pCoreWebView2Controller)
|
if (_this->pCoreWebView2Controller)
|
||||||
{
|
{
|
||||||
@ -293,9 +305,10 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2ControllerCompleted(IC
|
|||||||
_this->pCoreWebView2Controller = pCoreWebView2Controller;
|
_this->pCoreWebView2Controller = pCoreWebView2Controller;
|
||||||
_this->pCoreWebView2Controller->lpVtbl->get_CoreWebView2(_this->pCoreWebView2Controller, &_this->pCoreWebView2);
|
_this->pCoreWebView2Controller->lpVtbl->get_CoreWebView2(_this->pCoreWebView2Controller, &_this->pCoreWebView2);
|
||||||
_this->pCoreWebView2Controller->lpVtbl->AddRef(_this->pCoreWebView2Controller);
|
_this->pCoreWebView2Controller->lpVtbl->AddRef(_this->pCoreWebView2Controller);
|
||||||
|
_this->pCoreWebView2Controller->lpVtbl->put_ZoomFactor(_this->pCoreWebView2Controller, InterlockedAdd64(&_this->dwZoomFactor, 0) / 100.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
_ep_weather_ReboundBrowser(_this, FALSE);
|
_ep_Weather_ReboundBrowser(_this, FALSE);
|
||||||
|
|
||||||
ICoreWebView2Controller2* pCoreWebView2Controller2 = NULL;
|
ICoreWebView2Controller2* pCoreWebView2Controller2 = NULL;
|
||||||
_this->pCoreWebView2Controller->lpVtbl->QueryInterface(_this->pCoreWebView2Controller, &IID_ICoreWebView2Controller2, &pCoreWebView2Controller2);
|
_this->pCoreWebView2Controller->lpVtbl->QueryInterface(_this->pCoreWebView2Controller, &IID_ICoreWebView2Controller2, &pCoreWebView2Controller2);
|
||||||
@ -537,14 +550,19 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_ExecuteScriptCompleted(ICoreWebView2Exec
|
|||||||
int h = _wtoi(wszHeight);
|
int h = _wtoi(wszHeight);
|
||||||
int ch = MulDiv(h, EP_WEATHER_HEIGHT, 367);
|
int ch = MulDiv(h, EP_WEATHER_HEIGHT, 367);
|
||||||
UINT dpi = GetDpiForWindow(_this->hWnd);
|
UINT dpi = GetDpiForWindow(_this->hWnd);
|
||||||
ch = MulDiv(MulDiv(ch, dpi, 96), epw_Weather_GetTextScaleFactor(_this), 100);
|
DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
||||||
|
DWORD dwZoomFactor = epw_Weather_GetZoomFactor(_this);
|
||||||
|
ch = MulDiv(MulDiv(MulDiv(ch, dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100);
|
||||||
RECT rc;
|
RECT rc;
|
||||||
GetWindowRect(_this->hWnd, &rc);
|
GetClientRect(_this->hWnd, &rc);
|
||||||
int w = MulDiv(MulDiv(EP_WEATHER_WIDTH, GetDpiForWindow(_this->hWnd), 96), epw_Weather_GetTextScaleFactor(_this), 100);
|
int w = MulDiv(MulDiv(MulDiv(EP_WEATHER_WIDTH, GetDpiForWindow(_this->hWnd), 96), dwTextScaleFactor, 100), dwZoomFactor, 100);
|
||||||
if ((rc.bottom - rc.top != ch) || (rc.right - rc.left != w))
|
if ((rc.bottom - rc.top != ch) || (rc.right - rc.left != w))
|
||||||
{
|
{
|
||||||
SetWindowPos(_this->hWnd, NULL, 0, 0, w, ch, SWP_NOMOVE | SWP_NOSENDCHANGING);
|
RECT rcAdj;
|
||||||
_ep_weather_ReboundBrowser(_this, FALSE);
|
SetRect(&rcAdj, 0, 0, w, ch);
|
||||||
|
AdjustWindowRectExForDpi(&rcAdj, epw_Weather_GetStyle(_this) & ~WS_OVERLAPPED, epw_Weather_HasMenuBar(_this), epw_Weather_GetExtendedStyle(_this), dpi);
|
||||||
|
SetWindowPos(_this->hWnd, NULL, 0, 0, rcAdj.right - rcAdj.left, rcAdj.bottom - rcAdj.top, SWP_NOMOVE | SWP_NOSENDCHANGING);
|
||||||
|
_ep_Weather_ReboundBrowser(_this, FALSE);
|
||||||
HWND hNotifyWnd = InterlockedAdd64(&_this->hNotifyWnd, 0);
|
HWND hNotifyWnd = InterlockedAdd64(&_this->hNotifyWnd, 0);
|
||||||
if (hNotifyWnd)
|
if (hNotifyWnd)
|
||||||
{
|
{
|
||||||
@ -784,9 +802,19 @@ LRESULT CALLBACK epw_Weather_WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPA
|
|||||||
}
|
}
|
||||||
else if (uMsg == WM_TIMER && wParam == EP_WEATHER_TIMER_RESIZE_WINDOW)
|
else if (uMsg == WM_TIMER && wParam == EP_WEATHER_TIMER_RESIZE_WINDOW)
|
||||||
{
|
{
|
||||||
|
LPWSTR uri = NULL;
|
||||||
|
if (_this->pCoreWebView2)
|
||||||
|
{
|
||||||
|
_this->pCoreWebView2->lpVtbl->get_Source(_this->pCoreWebView2, &uri);
|
||||||
|
}
|
||||||
DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
||||||
|
DWORD dwZoomFactor = epw_Weather_GetZoomFactor(_this);
|
||||||
UINT dpi = GetDpiForWindow(_this->hWnd);
|
UINT dpi = GetDpiForWindow(_this->hWnd);
|
||||||
SetWindowPos(_this->hWnd, NULL, 0, 0, MulDiv(MulDiv(EP_WEATHER_WIDTH, dpi, 96), dwTextScaleFactor, 100), MulDiv(MulDiv(EP_WEATHER_HEIGHT, dpi, 96), dwTextScaleFactor, 100), SWP_NOMOVE | SWP_NOSENDCHANGING);
|
RECT rcAdj;
|
||||||
|
SetRect(&rcAdj, 0, 0, MulDiv(MulDiv(MulDiv(EP_WEATHER_WIDTH, dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100), MulDiv(MulDiv(MulDiv((!wcscmp(L"about:blank", uri ? uri : L"") ? EP_WEATHER_HEIGHT_ERROR : EP_WEATHER_HEIGHT), dpi, 96), dwTextScaleFactor, 100), dwZoomFactor, 100));
|
||||||
|
AdjustWindowRectExForDpi(&rcAdj, epw_Weather_GetStyle(_this) & ~WS_OVERLAPPED, epw_Weather_HasMenuBar(_this), epw_Weather_GetExtendedStyle(_this), dpi);
|
||||||
|
SetWindowPos(_this->hWnd, NULL, 0, 0, rcAdj.right - rcAdj.left, rcAdj.bottom - rcAdj.top, SWP_NOMOVE | SWP_NOSENDCHANGING);
|
||||||
|
CoTaskMemFree(uri);
|
||||||
if (_this->cntResizeWindow == 7)
|
if (_this->cntResizeWindow == 7)
|
||||||
{
|
{
|
||||||
_this->cntResizeWindow = 0;
|
_this->cntResizeWindow = 0;
|
||||||
@ -805,7 +833,7 @@ LRESULT CALLBACK epw_Weather_WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPA
|
|||||||
{
|
{
|
||||||
_this->pCoreWebView2->lpVtbl->get_Source(_this->pCoreWebView2, &uri);
|
_this->pCoreWebView2->lpVtbl->get_Source(_this->pCoreWebView2, &uri);
|
||||||
}
|
}
|
||||||
_ep_weather_ReboundBrowser(_this, !wcscmp(L"about:blank", uri ? uri : L""));
|
_ep_Weather_ReboundBrowser(_this, !wcscmp(L"about:blank", uri ? uri : L""));
|
||||||
CoTaskMemFree(uri);
|
CoTaskMemFree(uri);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -862,13 +890,12 @@ LRESULT CALLBACK epw_Weather_WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPA
|
|||||||
pCoreWebView2Settings6->lpVtbl->put_AreBrowserAcceleratorKeysEnabled(pCoreWebView2Settings6, wParam);
|
pCoreWebView2Settings6->lpVtbl->put_AreBrowserAcceleratorKeysEnabled(pCoreWebView2Settings6, wParam);
|
||||||
pCoreWebView2Settings6->lpVtbl->put_AreDefaultScriptDialogsEnabled(pCoreWebView2Settings6, wParam);
|
pCoreWebView2Settings6->lpVtbl->put_AreDefaultScriptDialogsEnabled(pCoreWebView2Settings6, wParam);
|
||||||
pCoreWebView2Settings6->lpVtbl->Release(pCoreWebView2Settings6);
|
pCoreWebView2Settings6->lpVtbl->Release(pCoreWebView2Settings6);
|
||||||
SetLastError(0);
|
LONG dwStyle = epw_Weather_GetStyle(_this);
|
||||||
LONG dwStyle = GetWindowLongW(_this->hWnd, GWL_STYLE);
|
|
||||||
if (!GetLastError())
|
if (!GetLastError())
|
||||||
{
|
{
|
||||||
if (wParam) dwStyle |= WS_SIZEBOX;
|
if (wParam) dwStyle |= WS_SIZEBOX;
|
||||||
else dwStyle &= ~WS_SIZEBOX;
|
else dwStyle &= ~WS_SIZEBOX;
|
||||||
SetWindowLong(_this->hWnd, GWL_STYLE, dwStyle);
|
SetWindowLongW(_this->hWnd, GWL_STYLE, dwStyle);
|
||||||
}
|
}
|
||||||
PostMessageW(_this->hWnd, EP_WEATHER_WM_FETCH_DATA, 0, 0);
|
PostMessageW(_this->hWnd, EP_WEATHER_WM_FETCH_DATA, 0, 0);
|
||||||
}
|
}
|
||||||
@ -876,6 +903,14 @@ LRESULT CALLBACK epw_Weather_WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (uMsg == EP_WEATHER_WM_SETZOOMFACTOR)
|
||||||
|
{
|
||||||
|
if (_this->pCoreWebView2Controller)
|
||||||
|
{
|
||||||
|
_this->pCoreWebView2Controller->lpVtbl->put_ZoomFactor(_this->pCoreWebView2Controller, wParam / 100.0);
|
||||||
|
_ep_Weather_StartResize(_this);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (uMsg == WM_CLOSE || (uMsg == WM_KEYUP && wParam == VK_ESCAPE) || (uMsg == WM_ACTIVATEAPP && wParam == FALSE && GetAncestor(GetForegroundWindow(), GA_ROOT) != _this->hWnd))
|
else if (uMsg == WM_CLOSE || (uMsg == WM_KEYUP && wParam == VK_ESCAPE) || (uMsg == WM_ACTIVATEAPP && wParam == FALSE && GetAncestor(GetForegroundWindow(), GA_ROOT) != _this->hWnd))
|
||||||
{
|
{
|
||||||
epw_Weather_Hide(_this);
|
epw_Weather_Hide(_this);
|
||||||
@ -890,7 +925,7 @@ LRESULT CALLBACK epw_Weather_WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPA
|
|||||||
pwp->flags |= (!dwDevMode ? (SWP_NOMOVE | SWP_NOSIZE) : 0);
|
pwp->flags |= (!dwDevMode ? (SWP_NOMOVE | SWP_NOSIZE) : 0);
|
||||||
if (dwDevMode)
|
if (dwDevMode)
|
||||||
{
|
{
|
||||||
_ep_weather_ReboundBrowser(_this, TRUE);
|
_ep_Weather_ReboundBrowser(_this, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -942,10 +977,15 @@ LRESULT CALLBACK epw_Weather_WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPA
|
|||||||
}
|
}
|
||||||
else if (uMsg == WM_DPICHANGED)
|
else if (uMsg == WM_DPICHANGED)
|
||||||
{
|
{
|
||||||
UINT dpiX = LOWORD(wParam);
|
//UINT dpiX = LOWORD(wParam);
|
||||||
int w = MulDiv(MulDiv(EP_WEATHER_WIDTH, dpiX, 96), epw_Weather_GetTextScaleFactor(_this), 100);
|
//UINT dpiY = HIWORD(wParam);
|
||||||
|
//DWORD dwTextScaleFactor = epw_Weather_GetTextScaleFactor(_this);
|
||||||
|
//DWORD dwZoomFactor = epw_Weather_GetZoomFactor(_this);
|
||||||
|
//RECT rcAdj;
|
||||||
|
//SetRect(&rcAdj, 0, 0, MulDiv(MulDiv(MulDiv(EP_WEATHER_WIDTH, dpiX, 96), dwTextScaleFactor, 100), dwZoomFactor, 100), MulDiv(MulDiv(MulDiv(EP_WEATHER_HEIGHT, dpiY, 96), dwTextScaleFactor, 100), dwZoomFactor, 100));
|
||||||
|
//AdjustWindowRectExForDpi(&rcAdj, epw_Weather_GetStyle(_this) & ~WS_OVERLAPPED, epw_Weather_HasMenuBar(_this), epw_Weather_GetExtendedStyle(_this), dpiX);
|
||||||
RECT* rc = lParam;
|
RECT* rc = lParam;
|
||||||
SetWindowPos(_this->hWnd, NULL, rc->left, rc->top, w, rc->bottom - rc->top, 0);
|
SetWindowPos(_this->hWnd, NULL, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (uMsg == WM_PAINT && !IsWindows11())
|
else if (uMsg == WM_PAINT && !IsWindows11())
|
||||||
@ -1110,6 +1150,13 @@ HRESULT STDMETHODCALLTYPE epw_Weather_SetIconPack(EPWeather* _this, LONG64 dwIco
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE epw_Weather_SetZoomFactor(EPWeather* _this, LONG64 dwZoomFactor)
|
||||||
|
{
|
||||||
|
InterlockedExchange64(&_this->dwZoomFactor, dwZoomFactor);
|
||||||
|
PostMessageW(_this->hWnd, EP_WEATHER_WM_SETZOOMFACTOR, dwZoomFactor, 0);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
@ -1150,7 +1197,11 @@ DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DWORD dwDevMode = InterlockedAdd64(&_this->dwDevMode, 0);
|
DWORD dwDevMode = InterlockedAdd64(&_this->dwDevMode, 0);
|
||||||
_this->hWnd = CreateWindowExW(0, _T(EPW_WEATHER_CLASSNAME), L"", WS_OVERLAPPED | WS_CAPTION | (dwDevMode ? WS_SIZEBOX : 0), _this->rc.left, _this->rc.top, _this->rc.right - _this->rc.left, _this->rc.bottom - _this->rc.top, NULL, NULL, epw_hModule, _this); // 1030, 630
|
DWORD dwStyle = WS_CAPTION | (dwDevMode ? WS_SIZEBOX : 0);
|
||||||
|
DWORD dwExStyle = 0;
|
||||||
|
RECT rc = _this->rc;
|
||||||
|
AdjustWindowRectExForDpi(&rc, dwStyle, FALSE, dwExStyle, _this->dpiXInitial);
|
||||||
|
_this->hWnd = CreateWindowExW(dwExStyle, _T(EPW_WEATHER_CLASSNAME), L"", WS_OVERLAPPED | dwStyle, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, epw_hModule, _this); // 1030, 630
|
||||||
if (!_this->hWnd)
|
if (!_this->hWnd)
|
||||||
{
|
{
|
||||||
_this->hrLastError = HRESULT_FROM_WIN32(GetLastError());
|
_this->hrLastError = HRESULT_FROM_WIN32(GetLastError());
|
||||||
@ -1361,7 +1412,7 @@ DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_Initialize(EPWeather* _this, WCHAR wszName[MAX_PATH], BOOL bAllocConsole, LONG64 dwProvider, LONG64 cbx, LONG64 cby, LONG64 dwTemperatureUnit, LONG64 dwUpdateSchedule, RECT rc, LONG64 dwDarkMode, LONG64 dwGeolocationMode, HWND* hWnd)
|
HRESULT STDMETHODCALLTYPE epw_Weather_Initialize(EPWeather* _this, WCHAR wszName[MAX_PATH], BOOL bAllocConsole, LONG64 dwProvider, LONG64 cbx, LONG64 cby, LONG64 dwTemperatureUnit, LONG64 dwUpdateSchedule, RECT rc, LONG64 dwDarkMode, LONG64 dwGeolocationMode, HWND* hWnd, LONG64 dwZoomFactor, LONG64 dpiXInitial, LONG64 dpiYInitial)
|
||||||
{
|
{
|
||||||
InitializeGlobalVersionAndUBR();
|
InitializeGlobalVersionAndUBR();
|
||||||
|
|
||||||
@ -1417,6 +1468,9 @@ HRESULT STDMETHODCALLTYPE epw_Weather_Initialize(EPWeather* _this, WCHAR wszName
|
|||||||
}
|
}
|
||||||
|
|
||||||
InterlockedExchange64(&_this->dwGeolocationMode, dwGeolocationMode);
|
InterlockedExchange64(&_this->dwGeolocationMode, dwGeolocationMode);
|
||||||
|
InterlockedExchange64(&_this->dwZoomFactor, dwZoomFactor);
|
||||||
|
_this->dpiXInitial = dpiXInitial;
|
||||||
|
_this->dpiYInitial = dpiYInitial;
|
||||||
|
|
||||||
_this->hUxtheme = LoadLibraryW(L"uxtheme.dll");
|
_this->hUxtheme = LoadLibraryW(L"uxtheme.dll");
|
||||||
if (_this->hUxtheme)
|
if (_this->hUxtheme)
|
||||||
|
@ -54,6 +54,7 @@ typedef interface EPWeather
|
|||||||
LONG64 dwDevMode;
|
LONG64 dwDevMode;
|
||||||
LONG64 dwTextDir;
|
LONG64 dwTextDir;
|
||||||
LONG64 dwIconPack;
|
LONG64 dwIconPack;
|
||||||
|
LONG64 dwZoomFactor;
|
||||||
|
|
||||||
HANDLE hMutexData; // protects the following:
|
HANDLE hMutexData; // protects the following:
|
||||||
DWORD cbTemperature;
|
DWORD cbTemperature;
|
||||||
@ -80,6 +81,8 @@ typedef interface EPWeather
|
|||||||
EventRegistrationToken* tkOnNavigationCompleted;
|
EventRegistrationToken* tkOnNavigationCompleted;
|
||||||
EventRegistrationToken* tkOnPermissionRequested;
|
EventRegistrationToken* tkOnPermissionRequested;
|
||||||
RECT rc;
|
RECT rc;
|
||||||
|
LONG64 dpiXInitial;
|
||||||
|
LONG64 dpiYInitial;
|
||||||
|
|
||||||
HANDLE hSignalExitMainThread;
|
HANDLE hSignalExitMainThread;
|
||||||
HANDLE hSignalKillSwitch;
|
HANDLE hSignalKillSwitch;
|
||||||
@ -92,7 +95,7 @@ ULONG STDMETHODCALLTYPE epw_Weather_Release(EPWeather* _this);
|
|||||||
HRESULT STDMETHODCALLTYPE epw_Weather_QueryInterface(EPWeather* _this, REFIID riid, void** ppv);
|
HRESULT STDMETHODCALLTYPE epw_Weather_QueryInterface(EPWeather* _this, REFIID riid, void** ppv);
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_About(EPWeather* _this, HWND hWnd);
|
HRESULT STDMETHODCALLTYPE epw_Weather_About(EPWeather* _this, HWND hWnd);
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_Initialize(EPWeather* _this, WCHAR wszName[MAX_PATH], BOOL bAllocConsole, LONG64 dwProvider, LONG64 cbx, LONG64 cby, LONG64 dwTemperatureUnit, LONG64 dwUpdateSchedule, RECT rc, LONG64 dwDarkMode, LONG64 dwGeolocationMode, HWND* hWnd);
|
HRESULT STDMETHODCALLTYPE epw_Weather_Initialize(EPWeather* _this, WCHAR wszName[MAX_PATH], BOOL bAllocConsole, LONG64 dwProvider, LONG64 cbx, LONG64 cby, LONG64 dwTemperatureUnit, LONG64 dwUpdateSchedule, RECT rc, LONG64 dwDarkMode, LONG64 dwGeolocationMode, HWND* hWnd, LONG64 dwZoomFactor, LONG64 dpiXInitial, LONG64 dpiYInitial);
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_Show(EPWeather* _this);
|
HRESULT STDMETHODCALLTYPE epw_Weather_Show(EPWeather* _this);
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_Hide(EPWeather* _this);
|
HRESULT STDMETHODCALLTYPE epw_Weather_Hide(EPWeather* _this);
|
||||||
@ -118,6 +121,7 @@ HRESULT STDMETHODCALLTYPE epw_Weather_SetGeolocationMode(EPWeather* _this, LONG6
|
|||||||
HRESULT STDMETHODCALLTYPE epw_Weather_SetWindowCornerPreference(EPWeather* _this, LONG64 dwWindowCornerPreference);
|
HRESULT STDMETHODCALLTYPE epw_Weather_SetWindowCornerPreference(EPWeather* _this, LONG64 dwWindowCornerPreference);
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_SetDevMode(EPWeather* _this, LONG64 dwDevMode, LONG64 bRefresh);
|
HRESULT STDMETHODCALLTYPE epw_Weather_SetDevMode(EPWeather* _this, LONG64 dwDevMode, LONG64 bRefresh);
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_SetIconPack(EPWeather* _this, LONG64 dwIconPack, LONG64 bRefresh);
|
HRESULT STDMETHODCALLTYPE epw_Weather_SetIconPack(EPWeather* _this, LONG64 dwIconPack, LONG64 bRefresh);
|
||||||
|
HRESULT STDMETHODCALLTYPE epw_Weather_SetZoomFactor(EPWeather* _this, LONG64 dwZoomFactor);
|
||||||
|
|
||||||
static const IEPWeatherVtbl IEPWeather_Vtbl = {
|
static const IEPWeatherVtbl IEPWeather_Vtbl = {
|
||||||
.QueryInterface = epw_Weather_QueryInterface,
|
.QueryInterface = epw_Weather_QueryInterface,
|
||||||
@ -146,9 +150,14 @@ static const IEPWeatherVtbl IEPWeather_Vtbl = {
|
|||||||
.SetWindowCornerPreference = epw_Weather_SetWindowCornerPreference,
|
.SetWindowCornerPreference = epw_Weather_SetWindowCornerPreference,
|
||||||
.SetDevMode = epw_Weather_SetDevMode,
|
.SetDevMode = epw_Weather_SetDevMode,
|
||||||
.SetIconPack = epw_Weather_SetIconPack,
|
.SetIconPack = epw_Weather_SetIconPack,
|
||||||
|
.SetZoomFactor = epw_Weather_SetZoomFactor,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline DWORD epw_Weather_GetTextScaleFactor(EPWeather* _this) { return InterlockedAdd64(&_this->dwTextScaleFactor, 0); }
|
static inline DWORD epw_Weather_GetTextScaleFactor(EPWeather* _this) { return InterlockedAdd64(&_this->dwTextScaleFactor, 0); }
|
||||||
|
static inline DWORD epw_Weather_GetZoomFactor(EPWeather* _this) { return InterlockedAdd64(&_this->dwZoomFactor, 0); }
|
||||||
|
static inline DWORD epw_Weather_GetStyle(EPWeather* _this) { SetLastError(0); return GetWindowLongW(_this->hWnd, GWL_STYLE); }
|
||||||
|
static inline DWORD epw_Weather_HasMenuBar(EPWeather* _this) { return 0; }
|
||||||
|
static inline DWORD epw_Weather_GetExtendedStyle(EPWeather* _this) { SetLastError(0); return GetWindowLongW(_this->hWnd, GWL_EXSTYLE); }
|
||||||
static void epw_Weather_SetTextScaleFactorFromRegistry(EPWeather* _this, HKEY hKey, BOOL bRefresh);
|
static void epw_Weather_SetTextScaleFactorFromRegistry(EPWeather* _this, HKEY hKey, BOOL bRefresh);
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE epw_Weather_static_Stub(void* _this);
|
HRESULT STDMETHODCALLTYPE epw_Weather_static_Stub(void* _this);
|
||||||
|
@ -11,7 +11,22 @@ import "unknwn.idl";
|
|||||||
{
|
{
|
||||||
HRESULT About([in] HWND hWnd);
|
HRESULT About([in] HWND hWnd);
|
||||||
|
|
||||||
HRESULT Initialize([in] WCHAR wszName[260], [in] BOOL bAllocConsole, [in] LONG64 dwProvider, [in] LONG64 cbx, [in] LONG64 cby, [in] LONG64 dwTemperatureUnit, [in] LONG64 dwUpdateSchedule, [in] RECT rc, [in] LONG64 dwDarkMode, [in] LONG64 dwGeolocationMode, [out] HWND* hWnd);
|
HRESULT Initialize(
|
||||||
|
[in] WCHAR wszName[260],
|
||||||
|
[in] BOOL bAllocConsole,
|
||||||
|
[in] LONG64 dwProvider,
|
||||||
|
[in] LONG64 cbx,
|
||||||
|
[in] LONG64 cby,
|
||||||
|
[in] LONG64 dwTemperatureUnit,
|
||||||
|
[in] LONG64 dwUpdateSchedule,
|
||||||
|
[in] RECT rc,
|
||||||
|
[in] LONG64 dwDarkMode,
|
||||||
|
[in] LONG64 dwGeolocationMode,
|
||||||
|
[out] HWND* hWnd,
|
||||||
|
[in] LONG64 dwZoomFactor,
|
||||||
|
[in] LONG64 dpiXInitial,
|
||||||
|
[in] LONG64 dpiYInitial
|
||||||
|
);
|
||||||
|
|
||||||
HRESULT Show();
|
HRESULT Show();
|
||||||
|
|
||||||
@ -68,4 +83,6 @@ import "unknwn.idl";
|
|||||||
HRESULT SetDevMode([in] LONG64 dwDevMode, [in] LONG64 bRefresh);
|
HRESULT SetDevMode([in] LONG64 dwDevMode, [in] LONG64 bRefresh);
|
||||||
|
|
||||||
HRESULT SetIconPack([in] LONG64 dwIconPack, [in] LONG64 bRefresh);
|
HRESULT SetIconPack([in] LONG64 dwIconPack, [in] LONG64 bRefresh);
|
||||||
|
|
||||||
|
HRESULT SetZoomFactor([in] LONG64 dwZoomFactor);
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user