增加显示器交互
parent
f6ac50c4cf
commit
1c3595c23a
9
app.js
9
app.js
|
@ -38,6 +38,15 @@ bind($('.btn4'), 'click', async function () {
|
||||||
// native.clipboard.clear()
|
// 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) {
|
bind($('textarea'), 'paste', async function (ev) {
|
||||||
let items = ev.clipboardData.items
|
let items = ev.clipboardData.items
|
||||||
for (let it of items) {
|
for (let it of items) {
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
<hr>
|
<hr>
|
||||||
<button class="btn3">写图片到剪切板</button>
|
<button class="btn3">写图片到剪切板</button>
|
||||||
<button class="btn4">退出</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="">
|
<img style="width:100px;border:1px solid #09f;" src="" alt="">
|
||||||
<textarea></textarea>
|
<textarea></textarea>
|
||||||
|
|
||||||
|
|
|
@ -185,5 +185,13 @@ Object.assign(native, {
|
||||||
return handler('clipboard', { action: 'clear' })
|
return handler('clipboard', { action: 'clear' })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
screen: {
|
||||||
|
getAllDisplays() {
|
||||||
|
return handler('monitor', { action: 'get-all' })
|
||||||
|
},
|
||||||
|
getPrimaryDisplay() {
|
||||||
|
return handler('monitor', { action: 'get-primary' })
|
||||||
|
}
|
||||||
|
},
|
||||||
handler
|
handler
|
||||||
})
|
})
|
||||||
|
|
46
main.py
46
main.py
|
@ -18,6 +18,22 @@ except (ValueError, ImportError):
|
||||||
AppIndicator3 = None
|
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):
|
class WebKitWindow(Gtk.Window):
|
||||||
def __init__(self):
|
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("http://127.0.0.1:10086/index.html")
|
||||||
self.webview.load_uri("https://benchmark.wkit.fun")
|
# self.webview.load_uri("https://benchmark.wkit.fun")
|
||||||
|
|
||||||
|
|
||||||
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||||
|
@ -72,6 +88,8 @@ class WebKitWindow(Gtk.Window):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def create_tray(self):
|
def create_tray(self):
|
||||||
|
|
||||||
if AppIndicator3 :
|
if AppIndicator3 :
|
||||||
|
@ -190,6 +208,25 @@ class WebKitWindow(Gtk.Window):
|
||||||
self.webview.send_message_to_page(WebKit2.UserMessage.new('blabla'))
|
self.webview.send_message_to_page(WebKit2.UserMessage.new('blabla'))
|
||||||
self.webview.evaluate_javascript(scripts, -1)
|
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 _:
|
case _:
|
||||||
if callback :
|
if callback :
|
||||||
res = {"foo": 123, "bar": (11,22,33)}
|
res = {"foo": 123, "bar": (11,22,33)}
|
||||||
|
@ -206,6 +243,11 @@ win = WebKitWindow()
|
||||||
win.connect("destroy", Gtk.main_quit)
|
win.connect("destroy", Gtk.main_quit)
|
||||||
win.show_all()
|
win.show_all()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
tray = win.create_tray()
|
tray = win.create_tray()
|
||||||
|
|
||||||
Gtk.main()
|
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