mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-27 15:44:12 +08:00
zf
This commit is contained in:
parent
3c1103ab7e
commit
3db17ea5aa
2
.gitignore
vendored
2
.gitignore
vendored
@ -21,7 +21,7 @@ Thumbs.db
|
|||||||
*.wav
|
*.wav
|
||||||
build/
|
build/
|
||||||
|
|
||||||
|
plugins/libs/webview2
|
||||||
plugins/builds
|
plugins/builds
|
||||||
plugins/build
|
plugins/build
|
||||||
temp/
|
temp/
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from qtsymbols import *
|
from qtsymbols import *
|
||||||
import os, platform, functools, threading, time, inspect
|
import os, platform, functools, threading, time, inspect
|
||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
import windows, qtawesome
|
import windows, qtawesome, winsharedutils
|
||||||
from webviewpy import (
|
from webviewpy import (
|
||||||
webview_native_handle_kind_t,
|
webview_native_handle_kind_t,
|
||||||
Webview,
|
Webview,
|
||||||
@ -629,8 +629,12 @@ def getscaledrect(size: QSize):
|
|||||||
|
|
||||||
class WebivewWidget(QWidget):
|
class WebivewWidget(QWidget):
|
||||||
on_load = pyqtSignal(str)
|
on_load = pyqtSignal(str)
|
||||||
|
on_ZoomFactorChanged = pyqtSignal(float)
|
||||||
html_limit = 2 * 1024 * 1024 # 2mb
|
html_limit = 2 * 1024 * 1024 # 2mb
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
winsharedutils.remove_ZoomFactorChanged(self.__token)
|
||||||
|
|
||||||
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(
|
||||||
@ -644,14 +648,50 @@ class WebivewWidget(QWidget):
|
|||||||
)
|
)
|
||||||
self.webview = None
|
self.webview = None
|
||||||
self.webview = Webview(debug=debug, window=int(self.winId()))
|
self.webview = Webview(debug=debug, window=int(self.winId()))
|
||||||
|
# 直接写在这里了
|
||||||
|
self._putzoom()
|
||||||
|
self.on_ZoomFactorChanged.connect(self._zoomchanged)
|
||||||
|
#
|
||||||
|
zoomfunc = winsharedutils.add_ZoomFactorChanged_CALLBACK(self.ZoomFactorChanged)
|
||||||
|
self.__token = winsharedutils.add_ZoomFactorChanged(
|
||||||
|
self.webview.get_native_handle(
|
||||||
|
webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_BROWSER_CONTROLLER
|
||||||
|
),
|
||||||
|
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)""")
|
||||||
|
|
||||||
|
def _putzoom(self):
|
||||||
|
self.put_ZoomFactor(globalconfig["webview2"]["ZoomFactor"])
|
||||||
|
|
||||||
|
def _zoomchanged(self, zoom):
|
||||||
|
globalconfig["webview2"]["ZoomFactor"] = zoom
|
||||||
|
|
||||||
|
def ZoomFactorChanged(self, zoom):
|
||||||
|
self.on_ZoomFactorChanged.emit(zoom)
|
||||||
|
|
||||||
|
def put_ZoomFactor(self, zoom):
|
||||||
|
winsharedutils.put_ZoomFactor(
|
||||||
|
self.webview.get_native_handle(
|
||||||
|
webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_BROWSER_CONTROLLER
|
||||||
|
),
|
||||||
|
zoom,
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_ZoomFactor(self, zoom):
|
||||||
|
return winsharedutils.get_ZoomFactor(
|
||||||
|
self.webview.get_native_handle(
|
||||||
|
webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_BROWSER_CONTROLLER
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def _on_load(self, href):
|
def _on_load(self, href):
|
||||||
self.on_load.emit(href)
|
self.on_load.emit(href)
|
||||||
|
|
||||||
def navigate(self, url):
|
def navigate(self, url):
|
||||||
|
self._putzoom()
|
||||||
self.webview.navigate(url)
|
self.webview.navigate(url)
|
||||||
|
|
||||||
def resizeEvent(self, a0: QResizeEvent) -> None:
|
def resizeEvent(self, a0: QResizeEvent) -> None:
|
||||||
@ -663,6 +703,7 @@ class WebivewWidget(QWidget):
|
|||||||
windows.MoveWindow(hwnd, 0, 0, size[0], size[1], True)
|
windows.MoveWindow(hwnd, 0, 0, size[0], size[1], True)
|
||||||
|
|
||||||
def setHtml(self, html):
|
def setHtml(self, html):
|
||||||
|
self._putzoom()
|
||||||
self.webview.set_html(html)
|
self.webview.set_html(html)
|
||||||
|
|
||||||
def parsehtml(self, html):
|
def parsehtml(self, html):
|
||||||
@ -753,6 +794,15 @@ class QWebWrap(QWidget):
|
|||||||
lambda qurl: self.on_load.emit(qurl.url())
|
lambda qurl: self.on_load.emit(qurl.url())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.internal.setZoomFactor(globalconfig["QWebEngineView"]["ZoomFactor"])
|
||||||
|
t = QTimer(self)
|
||||||
|
t.setInterval(1000)
|
||||||
|
t.timeout.connect(self.__getzoomfactor)
|
||||||
|
t.start(0)
|
||||||
|
|
||||||
|
def __getzoomfactor(self):
|
||||||
|
globalconfig["QWebEngineView"]["ZoomFactor"] = self.internal.zoomFactor()
|
||||||
|
|
||||||
def navigate(self, url: str):
|
def navigate(self, url: str):
|
||||||
from PyQt5.QtCore import QUrl
|
from PyQt5.QtCore import QUrl
|
||||||
|
|
||||||
@ -1101,7 +1151,7 @@ def openfiledirectory(directory,multi, edit, isdir, filter1="*.*", callback=None
|
|||||||
|
|
||||||
if len(res) == 0:
|
if len(res) == 0:
|
||||||
return
|
return
|
||||||
edit.setText('|'.join(res) if multi else res)
|
edit.setText("|".join(res) if multi else res)
|
||||||
if callback:
|
if callback:
|
||||||
callback(res)
|
callback(res)
|
||||||
|
|
||||||
@ -1117,8 +1167,8 @@ def getsimplepatheditor(
|
|||||||
lay = QHBoxLayout()
|
lay = QHBoxLayout()
|
||||||
lay.setContentsMargins(0, 0, 0, 0)
|
lay.setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
director=(text[0] if len(text) else '') if multi else text
|
director = (text[0] if len(text) else "") if multi else text
|
||||||
e = QLineEdit('|'.join(text) if multi else text)
|
e = QLineEdit("|".join(text) if multi else text)
|
||||||
e.setReadOnly(True)
|
e.setReadOnly(True)
|
||||||
if useiconbutton:
|
if useiconbutton:
|
||||||
bu = getcolorbutton("", "", None, icon="fa.gear", constcolor="#FF69B4")
|
bu = getcolorbutton("", "", None, icon="fa.gear", constcolor="#FF69B4")
|
||||||
@ -1126,7 +1176,13 @@ def getsimplepatheditor(
|
|||||||
bu = QPushButton(_TR("选择" + ("文件夹" if isdir else "文件")))
|
bu = QPushButton(_TR("选择" + ("文件夹" if isdir else "文件")))
|
||||||
bu.clicked.connect(
|
bu.clicked.connect(
|
||||||
functools.partial(
|
functools.partial(
|
||||||
openfiledirectory,director, multi, e, isdir, "" if isdir else filter1, callback
|
openfiledirectory,
|
||||||
|
director,
|
||||||
|
multi,
|
||||||
|
e,
|
||||||
|
isdir,
|
||||||
|
"" if isdir else filter1,
|
||||||
|
callback,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
lay.addWidget(e)
|
lay.addWidget(e)
|
||||||
|
@ -19,6 +19,7 @@ from ctypes import (
|
|||||||
c_float,
|
c_float,
|
||||||
c_double,
|
c_double,
|
||||||
c_char,
|
c_char,
|
||||||
|
CFUNCTYPE,
|
||||||
)
|
)
|
||||||
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
|
||||||
@ -399,3 +400,15 @@ setAcrylicEffect = utilsdll.setAcrylicEffect
|
|||||||
setAcrylicEffect.argtypes = (HWND,)
|
setAcrylicEffect.argtypes = (HWND,)
|
||||||
clearEffect = utilsdll.clearEffect
|
clearEffect = utilsdll.clearEffect
|
||||||
clearEffect.argtypes = (HWND,)
|
clearEffect.argtypes = (HWND,)
|
||||||
|
|
||||||
|
add_ZoomFactorChanged_CALLBACK = CFUNCTYPE(None, c_double)
|
||||||
|
add_ZoomFactorChanged = utilsdll.add_ZoomFactorChanged
|
||||||
|
add_ZoomFactorChanged.argtypes = (c_void_p, c_void_p)
|
||||||
|
add_ZoomFactorChanged.restype = c_void_p
|
||||||
|
remove_ZoomFactorChanged = utilsdll.remove_ZoomFactorChanged
|
||||||
|
remove_ZoomFactorChanged.argtypes = c_void_p, c_void_p
|
||||||
|
get_ZoomFactor = utilsdll.get_ZoomFactor
|
||||||
|
get_ZoomFactor.argtypes = (c_void_p,)
|
||||||
|
get_ZoomFactor.restype = c_double
|
||||||
|
put_ZoomFactor = utilsdll.put_ZoomFactor
|
||||||
|
put_ZoomFactor.argtypes = c_void_p, c_double
|
||||||
|
@ -1638,6 +1638,12 @@
|
|||||||
"name": "实时编辑"
|
"name": "实时编辑"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"webview2":{
|
||||||
|
"ZoomFactor": 1
|
||||||
|
},
|
||||||
|
"QWebEngineView":{
|
||||||
|
"ZoomFactor": 1
|
||||||
|
},
|
||||||
"realtime_edit_target": "realtime_edit",
|
"realtime_edit_target": "realtime_edit",
|
||||||
"magpiepath": "",
|
"magpiepath": "",
|
||||||
"minifollow": false,
|
"minifollow": false,
|
||||||
|
@ -11,6 +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)
|
||||||
|
|
||||||
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
|
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
|
||||||
set(LTLPlatform "Win32")
|
set(LTLPlatform "Win32")
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
python fetchwebview2.py
|
||||||
cmake ../CMakeLists.txt -G "Visual Studio 17 2022" -A win32 -T host=x86 -B ../build/x86
|
cmake ../CMakeLists.txt -G "Visual Studio 17 2022" -A win32 -T host=x86 -B ../build/x86
|
||||||
cmake --build ../build/x86 --config Release --target ALL_BUILD -j 14
|
cmake --build ../build/x86 --config Release --target ALL_BUILD -j 14
|
||||||
python copytarget.py 1
|
python copytarget.py 1
|
@ -1,3 +1,4 @@
|
|||||||
|
python fetchwebview2.py
|
||||||
cmake ../CMakeLists.txt -G "Visual Studio 17 2022" -A x64 -T host=x64 -B ../build/x64
|
cmake ../CMakeLists.txt -G "Visual Studio 17 2022" -A x64 -T host=x64 -B ../build/x64
|
||||||
cmake --build ../build/x64 --config Release --target ALL_BUILD -j 14
|
cmake --build ../build/x64 --config Release --target ALL_BUILD -j 14
|
||||||
python copytarget.py 0
|
python copytarget.py 0
|
22
plugins/scripts/fetchwebview2.py
Normal file
22
plugins/scripts/fetchwebview2.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
mswebview2_version = "1.0.1150.38"
|
||||||
|
|
||||||
|
import os, subprocess
|
||||||
|
|
||||||
|
target = os.path.normpath(os.path.join(os.path.dirname(__file__), r"..\libs\webview2"))
|
||||||
|
os.makedirs(target, exist_ok=True)
|
||||||
|
nuget_exe = os.path.join(target, "nuget.exe")
|
||||||
|
print(nuget_exe)
|
||||||
|
if os.path.exists(nuget_exe) == False:
|
||||||
|
os.system(
|
||||||
|
rf'curl -sSLo "{nuget_exe}" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe'
|
||||||
|
)
|
||||||
|
|
||||||
|
mswebview2_dir = os.path.join(target, f"Microsoft.Web.WebView2.{mswebview2_version}")
|
||||||
|
if os.path.exists(mswebview2_dir) == False:
|
||||||
|
os.mkdir(mswebview2_dir)
|
||||||
|
print(
|
||||||
|
rf""""{nuget_exe}" install Microsoft.Web.Webview2 -Verbosity quiet -Version "{mswebview2_version}" -OutputDirectory {target}"""
|
||||||
|
)
|
||||||
|
subprocess.run(
|
||||||
|
rf'"{nuget_exe}" install Microsoft.Web.Webview2 -Verbosity quiet -Version "{mswebview2_version}" -OutputDirectory {target}'
|
||||||
|
)
|
@ -11,7 +11,7 @@ generate_product_version(
|
|||||||
VERSION_PATCH ${VERSION_PATCH}
|
VERSION_PATCH ${VERSION_PATCH}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(winsharedutils MODULE AreoAcrylic.cpp screenshot.cpp audio.cpp ../implsapi.cpp hwnd.cpp darklistener.cpp theme.cpp version.cpp otsu.cpp cinterface.cpp clipboard.cpp lnk.cpp dllmain.cpp levenshtein.cpp muteprocess.cpp sapi_dll.cpp simplemecab.cpp SimpleBrowser.cpp MWebBrowser.cpp icon.cpp maglistener.cpp ${versioninfo})
|
add_library(winsharedutils MODULE webview2_extra.cpp AreoAcrylic.cpp screenshot.cpp audio.cpp ../implsapi.cpp hwnd.cpp darklistener.cpp theme.cpp version.cpp otsu.cpp cinterface.cpp clipboard.cpp lnk.cpp dllmain.cpp levenshtein.cpp muteprocess.cpp sapi_dll.cpp simplemecab.cpp SimpleBrowser.cpp MWebBrowser.cpp icon.cpp maglistener.cpp ${versioninfo})
|
||||||
target_precompile_headers(winsharedutils REUSE_FROM pch)
|
target_precompile_headers(winsharedutils REUSE_FROM pch)
|
||||||
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
||||||
set_target_properties(winsharedutils PROPERTIES OUTPUT_NAME "winsharedutils64")
|
set_target_properties(winsharedutils PROPERTIES OUTPUT_NAME "winsharedutils64")
|
||||||
|
48
plugins/winsharedutils/webview2_extra.cpp
Normal file
48
plugins/winsharedutils/webview2_extra.cpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#include "define.h"
|
||||||
|
|
||||||
|
#include <wrl.h>
|
||||||
|
#include <wil/com.h>
|
||||||
|
#include <wil/result.h>
|
||||||
|
#include <wil/com.h>
|
||||||
|
#include <wrl/implements.h>
|
||||||
|
using namespace Microsoft::WRL;
|
||||||
|
#include <WebView2.h>
|
||||||
|
|
||||||
|
DECLARE void *add_ZoomFactorChanged(void *m_host, void (*signal)(double))
|
||||||
|
{
|
||||||
|
|
||||||
|
EventRegistrationToken *m_zoomFactorChangedToken = new EventRegistrationToken;
|
||||||
|
// Register a handler for the ZoomFactorChanged event.
|
||||||
|
// This handler just announces the new level of zoom on the window's title bar.
|
||||||
|
reinterpret_cast<ICoreWebView2Controller *>(m_host)->add_ZoomFactorChanged(
|
||||||
|
Callback<ICoreWebView2ZoomFactorChangedEventHandler>(
|
||||||
|
[signal](ICoreWebView2Controller *sender, IUnknown *args) -> HRESULT
|
||||||
|
{
|
||||||
|
double zoomFactor;
|
||||||
|
sender->get_ZoomFactor(&zoomFactor);
|
||||||
|
signal(zoomFactor);
|
||||||
|
// std::wstring message = L"WebView2APISample (Zoom: " +
|
||||||
|
// std::to_wstring(int(zoomFactor * 100)) + L"%)";
|
||||||
|
// SetWindowText(m_appWindow->GetMainWindow(), message.c_str());
|
||||||
|
return S_OK;
|
||||||
|
})
|
||||||
|
.Get(),
|
||||||
|
m_zoomFactorChangedToken);
|
||||||
|
return m_zoomFactorChangedToken;
|
||||||
|
}
|
||||||
|
DECLARE void remove_ZoomFactorChanged(void *m_host, void *m_zoomFactorChangedToken)
|
||||||
|
{
|
||||||
|
|
||||||
|
reinterpret_cast<ICoreWebView2Controller *>(m_host)->remove_ZoomFactorChanged(*reinterpret_cast<EventRegistrationToken *>(m_zoomFactorChangedToken));
|
||||||
|
delete m_zoomFactorChangedToken;
|
||||||
|
}
|
||||||
|
DECLARE double get_ZoomFactor(void *m_host)
|
||||||
|
{
|
||||||
|
double zoomFactor;
|
||||||
|
reinterpret_cast<ICoreWebView2Controller *>(m_host)->get_ZoomFactor(&zoomFactor);
|
||||||
|
return zoomFactor;
|
||||||
|
}
|
||||||
|
DECLARE void put_ZoomFactor(void *m_host, double zoomFactor)
|
||||||
|
{
|
||||||
|
reinterpret_cast<ICoreWebView2Controller *>(m_host)->put_ZoomFactor(zoomFactor);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user