增加显示器交互
							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