This commit is contained in:
恍兮惚兮 2024-06-17 17:01:01 +08:00
parent 7fec150cca
commit fa22e9e0a3
8 changed files with 52 additions and 21 deletions

View File

@ -9,7 +9,6 @@ from gui.usefulwidget import (
D_getspinbox, D_getspinbox,
D_getcolorbutton, D_getcolorbutton,
getcolorbutton, getcolorbutton,
D_getsimpleswitch,
selectcolor, selectcolor,
) )
@ -316,9 +315,9 @@ def uisetting(self):
("明暗", 4), ("明暗", 4),
( (
D_getsimplecombobox( D_getsimplecombobox(
_TRL(["明亮", "黑暗", "跟随系统"]), _TRL(["跟随系统", "明亮", "黑暗"]),
globalconfig, globalconfig,
"darklight", "darklight2",
lambda _: gobject.baseobject.setcommonstylesheet(), lambda _: gobject.baseobject.setcommonstylesheet(),
), ),
5, 5,

View File

@ -683,6 +683,11 @@ class WebivewWidget(abstractwebview):
self.__token, self.__token,
) )
def get_controller(self):
return self.webview.get_native_handle(
webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_BROWSER_CONTROLLER
)
def __init__(self, parent=None, debug=False) -> None: def __init__(self, parent=None, debug=False) -> None:
super().__init__(parent) super().__init__(parent)
declare_library_path( declare_library_path(
@ -700,25 +705,31 @@ class WebivewWidget(abstractwebview):
self.on_ZoomFactorChanged.emit self.on_ZoomFactorChanged.emit
) )
self.__token = winsharedutils.add_ZoomFactorChanged( self.__token = winsharedutils.add_ZoomFactorChanged(
self.webview.get_native_handle( self.get_controller(), zoomfunc
webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_BROWSER_CONTROLLER
),
zoomfunc,
) )
self.keepref = [zoomfunc] self.keepref = [zoomfunc]
self.webview.bind("__on_load", self._on_load) self.webview.bind("__on_load", self._on_load)
self.webview.init("""window.__on_load(window.location.href)""") self.webview.init("""window.__on_load(window.location.href)""")
self.__darkstate = None
t = QTimer(self)
t.setInterval(100)
t.timeout.connect(self.__darkstatechecker)
t.timeout.emit()
t.start()
def __darkstatechecker(self):
dl = globalconfig["darklight2"]
if dl == self.__darkstate:
return
self.__darkstate = dl
winsharedutils.put_PreferredColorScheme(self.get_controller(), dl)
def set_zoom(self, zoom): def set_zoom(self, zoom):
self.put_ZoomFactor(zoom) self.put_ZoomFactor(zoom)
def put_ZoomFactor(self, zoom): def put_ZoomFactor(self, zoom):
winsharedutils.put_ZoomFactor( winsharedutils.put_ZoomFactor(self.get_controller(), zoom)
self.webview.get_native_handle(
webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_BROWSER_CONTROLLER
),
zoom,
)
def _on_load(self, href): def _on_load(self, href):
self.on_load.emit(href) self.on_load.emit(href)

View File

@ -84,12 +84,12 @@ def simplehtmlparser(text, tag, sign):
def nowisdark(): def nowisdark():
dl = globalconfig["darklight"] dl = globalconfig["darklight2"]
if dl == 0: if dl == 1:
dark = False dark = False
elif dl == 1:
dark = True
elif dl == 2: elif dl == 2:
dark = True
elif dl == 0:
dark = winsharedutils.isDark() dark = winsharedutils.isDark()
return dark return dark

View File

@ -20,6 +20,7 @@ from ctypes import (
c_double, c_double,
c_char, c_char,
CFUNCTYPE, CFUNCTYPE,
c_long,
) )
from ctypes.wintypes import WORD, HANDLE, HWND, LONG, DWORD, RECT, BYTE from ctypes.wintypes import WORD, HANDLE, HWND, LONG, DWORD, RECT, BYTE
from windows import WINDOWPLACEMENT from windows import WINDOWPLACEMENT
@ -409,6 +410,9 @@ get_ZoomFactor.argtypes = (c_void_p,)
get_ZoomFactor.restype = c_double get_ZoomFactor.restype = c_double
put_ZoomFactor = utilsdll.put_ZoomFactor put_ZoomFactor = utilsdll.put_ZoomFactor
put_ZoomFactor.argtypes = c_void_p, c_double put_ZoomFactor.argtypes = c_void_p, c_double
put_PreferredColorScheme = utilsdll.put_PreferredColorScheme
put_PreferredColorScheme.argtypes = c_void_p, c_int
put_PreferredColorScheme.restype = c_long
clipboard_callback = utilsdll.clipboard_callback clipboard_callback = utilsdll.clipboard_callback
clipboard_callback.argtypes = (c_void_p,) clipboard_callback.argtypes = (c_void_p,)

View File

@ -1192,7 +1192,7 @@
"type": "offline" "type": "offline"
} }
}, },
"darklight": 0, "darklight2": 0,
"darktheme": 0, "darktheme": 0,
"lighttheme": 0, "lighttheme": 0,
"usesearchword": false, "usesearchword": false,

View File

@ -11,7 +11,7 @@ include_directories(${CMAKE_CURRENT_LIST_DIR}/wil/include)
include_directories(${CMAKE_CURRENT_LIST_DIR}/miniaudio) include_directories(${CMAKE_CURRENT_LIST_DIR}/miniaudio)
include_directories(${CMAKE_CURRENT_LIST_DIR}/tinymp3) include_directories(${CMAKE_CURRENT_LIST_DIR}/tinymp3)
include_directories(${CMAKE_CURRENT_LIST_DIR}/webview2/Microsoft.Web.WebView2.1.0.1150.38/build/native/include) include_directories(${CMAKE_CURRENT_LIST_DIR}/webview2/Microsoft.Web.WebView2.1.0.2478.35/build/native/include)
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4) if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
set(LTLPlatform "Win32") set(LTLPlatform "Win32")

View File

@ -1,4 +1,4 @@
mswebview2_version = "1.0.1150.38" mswebview2_version = "1.0.2478.35"
import os, subprocess import os, subprocess

View File

@ -7,10 +7,27 @@
#include <wrl/implements.h> #include <wrl/implements.h>
using namespace Microsoft::WRL; using namespace Microsoft::WRL;
#include <WebView2.h> #include <WebView2.h>
#define CHECK_FAILURE(x) \
if (FAILED((x))) \
return x;
DECLARE void *add_ZoomFactorChanged(void *m_host, void (*signal)(double)) DECLARE HRESULT put_PreferredColorScheme(void *m_host, COREWEBVIEW2_PREFERRED_COLOR_SCHEME scheme)
{ {
wil::com_ptr<ICoreWebView2Controller> m_controller(reinterpret_cast<ICoreWebView2Controller *>(m_host));
wil::com_ptr<ICoreWebView2> coreWebView2;
CHECK_FAILURE(m_controller->get_CoreWebView2(&coreWebView2));
auto webView2_13 = coreWebView2.try_query<ICoreWebView2_13>();
if (webView2_13)
{
wil::com_ptr<ICoreWebView2Profile> profile;
CHECK_FAILURE(webView2_13->get_Profile(&profile));
CHECK_FAILURE(profile->put_PreferredColorScheme(scheme));
}
return S_FALSE;
}
DECLARE void *add_ZoomFactorChanged(void *m_host, void (*signal)(double))
{
EventRegistrationToken *m_zoomFactorChangedToken = new EventRegistrationToken; EventRegistrationToken *m_zoomFactorChangedToken = new EventRegistrationToken;
// Register a handler for the ZoomFactorChanged event. // Register a handler for the ZoomFactorChanged event.
// This handler just announces the new level of zoom on the window's title bar. // This handler just announces the new level of zoom on the window's title bar.