View difference between Paste ID: NGSJYe41 and AuawXXTQ
SHOW: | | - or go back to the newest paste.
1
import sys
2
import cairo, gi
3-
gi.require_version('Gtk', '2.0')
3+
4-
gi.require_version('Gdk', '2.0')
4+
USE_GTK2 = True
5-
gi.require_version('WebKit', '1.0')
5+
6
if USE_GTK2:
7
	gi.require_version('Gtk', '2.0')
8
	gi.require_version('Gdk', '2.0')
9
	gi.require_version('WebKit', '1.0')
10
from gi.repository import Gtk, Gdk, WebKit
11
12
DEFAULT_SIZE = 800, 480
13
14
if len(sys.argv) != 3:
15
	print 'usage: %s url filename'%sys.argv[0]
16
	sys.exit(-1)
17
18
uri, filename = sys.argv[1:]
19
20-
w = Gtk.OffscreenWindow()
20+
21-
w.set_default_size(800, 640)
21+
22-
v = WebKit.WebView()
22+
23-
w.add(v)
23+
24
	uri = 'http://' + uri
25
26
window = Gtk.OffscreenWindow()
27
view = WebKit.WebView()
28
settings = view.get_settings()
29
settings.props.auto_resize_window = True
30
settings.props.enable_plugins = False
31
view.set_settings(settings)
32
window.add(view)
33
34
def capture_window(window):
35-
def progress_cb(webview, progress, window):
35+
36-
	if webview.get_progress() == 1.0:
36+
	if w < 50 or h < 50:
37
		# window is too small.
38
		# resize window and reload
39-
v.connect('notify::progress', progress_cb, w)
39+
		window.set_default_size(*DEFAULT_SIZE)
40-
v.load_uri(uri)
40+
		view.reload()
41-
w.show_all()
41+
		return
42
43
	dst = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
44
	ctx = cairo.Context(dst)
45
	surface = Gdk.cairo_create(window.get_window()).get_target()
46
	ctx.set_source_surface(surface)
47
	ctx.paint()
48
	dst.write_to_png(filename)
49
	Gtk.main_quit()
50
51
def load_cb(webview, pspec, window):
52
	if webview.get_load_status() == WebKit.LoadStatus.FINISHED:
53
		capture_window(window)
54
55
view.connect('notify::load-status', load_cb, window)
56
view.load_uri(uri)
57
window.show_all()
58
59
Gtk.main()