增加显示器交互
parent
f6ac50c4cf
commit
1c3595c23a
9
app.js
9
app.js
|
@ -38,6 +38,15 @@ bind($('.btn4'), 'click', async function () {
|
|||
// native.clipboard.clear()
|
||||
})
|
||||
|
||||
bind($('.btn5'), 'click', async function () {
|
||||
native.tray()
|
||||
})
|
||||
|
||||
bind($('.btn6'), 'click', async function () {
|
||||
console.log(await native.screen.getAllDisplays())
|
||||
console.log(await native.screen.getPrimaryDisplay())
|
||||
})
|
||||
|
||||
bind($('textarea'), 'paste', async function (ev) {
|
||||
let items = ev.clipboardData.items
|
||||
for (let it of items) {
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
<hr>
|
||||
<button class="btn3">写图片到剪切板</button>
|
||||
<button class="btn4">退出</button>
|
||||
<button class="btn5">tray</button>
|
||||
<button class="btn6">screen</button>
|
||||
<img style="width:100px;border:1px solid #09f;" src="" alt="">
|
||||
<textarea></textarea>
|
||||
|
||||
|
|
|
@ -185,5 +185,13 @@ Object.assign(native, {
|
|||
return handler('clipboard', { action: 'clear' })
|
||||
}
|
||||
},
|
||||
screen: {
|
||||
getAllDisplays() {
|
||||
return handler('monitor', { action: 'get-all' })
|
||||
},
|
||||
getPrimaryDisplay() {
|
||||
return handler('monitor', { action: 'get-primary' })
|
||||
}
|
||||
},
|
||||
handler
|
||||
})
|
||||
|
|
46
main.py
46
main.py
|
@ -18,6 +18,22 @@ except (ValueError, ImportError):
|
|||
AppIndicator3 = None
|
||||
|
||||
|
||||
def get_monitor_info(monitor):
|
||||
return {
|
||||
"model": monitor.props.model,
|
||||
"scale_factor": monitor.props.scale_factor,
|
||||
"manufacturer": monitor.props.manufacturer,
|
||||
"refresh_rate": monitor.props.refresh_rate,
|
||||
"is_primary": monitor.is_primary(),
|
||||
"geometry": {
|
||||
"width": monitor.props.geometry.width,
|
||||
"height": monitor.props.geometry.height,
|
||||
"x": monitor.props.geometry.x,
|
||||
"y": monitor.props.geometry.y,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class WebKitWindow(Gtk.Window):
|
||||
def __init__(self):
|
||||
|
||||
|
@ -59,8 +75,8 @@ class WebKitWindow(Gtk.Window):
|
|||
|
||||
|
||||
|
||||
# self.webview.load_uri("http://127.0.0.1:10086/index.html")
|
||||
self.webview.load_uri("https://benchmark.wkit.fun")
|
||||
self.webview.load_uri("http://127.0.0.1:10086/index.html")
|
||||
# self.webview.load_uri("https://benchmark.wkit.fun")
|
||||
|
||||
|
||||
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||
|
@ -72,6 +88,8 @@ class WebKitWindow(Gtk.Window):
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
def create_tray(self):
|
||||
|
||||
if AppIndicator3 :
|
||||
|
@ -190,6 +208,25 @@ class WebKitWindow(Gtk.Window):
|
|||
self.webview.send_message_to_page(WebKit2.UserMessage.new('blabla'))
|
||||
self.webview.evaluate_javascript(scripts, -1)
|
||||
|
||||
|
||||
case 'monitor':
|
||||
if params['action'] == 'get-all':
|
||||
display = Gdk.Display.get_default()
|
||||
monitor_num = display.get_n_monitors()
|
||||
monitors = [display.get_monitor(i) for i in range(monitor_num)]
|
||||
monitors = [get_monitor_info(m) for m in monitors]
|
||||
|
||||
scripts = 'native.$emit("' + callback + '",' + json.dumps(monitors) + ')'
|
||||
self.webview.evaluate_javascript(scripts, -1)
|
||||
|
||||
elif params['action'] == 'get-primary':
|
||||
display = Gdk.Display.get_default()
|
||||
monitor = display.get_primary_monitor()
|
||||
info = get_monitor_info(monitor)
|
||||
|
||||
scripts = 'native.$emit("' + callback + '",' + json.dumps(info) + ')'
|
||||
self.webview.evaluate_javascript(scripts, -1)
|
||||
|
||||
case _:
|
||||
if callback :
|
||||
res = {"foo": 123, "bar": (11,22,33)}
|
||||
|
@ -206,6 +243,11 @@ win = WebKitWindow()
|
|||
win.connect("destroy", Gtk.main_quit)
|
||||
win.show_all()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
tray = win.create_tray()
|
||||
|
||||
Gtk.main()
|
|
@ -0,0 +1,30 @@
|
|||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
gi.require_version("WebKit2", "4.1")
|
||||
|
||||
from gi.repository import Gtk, Gdk
|
||||
|
||||
|
||||
|
||||
def get_monitor_info(monitor):
|
||||
return {
|
||||
"model": monitor.props.model,
|
||||
"scale_factor": monitor.props.scale_factor,
|
||||
"manufacturer": monitor.props.manufacturer,
|
||||
"refresh_rate": monitor.props.refresh_rate,
|
||||
"is_primary": monitor.is_primary(),
|
||||
"geometry": {
|
||||
"width": monitor.props.geometry.width,
|
||||
"height": monitor.props.geometry.height,
|
||||
"x": monitor.props.geometry.x,
|
||||
"y": monitor.props.geometry.y,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
display = Gdk.Display.get_default()
|
||||
monitor_num = display.get_n_monitors()
|
||||
monitors = [display.get_monitor(i) for i in range(monitor_num)]
|
||||
monitors = [get_monitor_info(m) for m in monitors]
|
Reference in New Issue