#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

class App:
    
    def delete_event(self, widget, event, data=None):
        return False
    
    def destroy(self, widget, data=None):
        gtk.main_quit()
    
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)
        
        self.button = gtk.Button("Take snapshot")
        self.button.connect("pressed", self.snapshot, None)
                
        self.target = gtk.Label("Target")
        tv = gtk.TextView()
        tb = tv.get_buffer()
        tb.set_text("\nScroll down until the label above label is offscreen.  Then take snapshot.")
        anchor = tb.create_child_anchor(tb.get_start_iter())
        tv.add_child_at_anchor(self.target, anchor)
        tv.set_wrap_mode(gtk.WRAP_WORD)
        tv.set_size_request(150,50)
        
        box = gtk.VBox()
        box.pack_start(tv, False)
        box.pack_start(self.button, False)
        self.window.add(box)        
        self.window.show_all()
    
    def main(self):
        gtk.main()
    
    def snapshot(self, widget, data=None):
        x,y,w,h = self.target.allocation
        pm = self.target.get_snapshot()
        pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, w, h)
        pb.get_from_drawable(pm, pm.get_colormap(), 0, 0, 0, 0, -1, -1)
        pb.save("snapshot.png", "png")
    
if __name__ == "__main__":
    app = App()
    app.main()

