import gtk
import numpy
import base64

IMAGE = '/9j/4AAQSkZJRgABAgEASABIAAD/7QE0UGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQPzAAAAAAAIAAAAAAAAAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0EBgAAAAAAAgAE/+4ADkFkb2JlAGQAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEHBwcNDA0YEBAYFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAUABQAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/dAAQACv/aAAwDAQACEQMRAD8AKvLvnu4hcJI52zYCQPNoIZ7afmMqoB6lScBgFBV73zJHqVtUnfDGKkpUNZW2jKxj4vHJkItKLzULq4Yl2NPDHkqGVjUVwoeheTdatrW3COQDlM42zBZdJrNncwlag1yrhIZW8/8ANmmQTBmSlcvgWBeWapJdWE5KMQAcZbKH/9DmVzDLBLVaihzNLUjNMuJ5JlUk0xBVmlneiKJYwanwy6LEopbyEMDIRXww2hPrKwiv7UtGvxAbEZEyWkuuNFuoyfgONrSHK3luKgEUw2qpB5nuLf4XbHZVeTzCtyhUvucIAVi+uxesGI3rkZBQ/wD/0YPOYLlSVIqczju0rLC3aOStMAUpnLfpbJRd5DkyaVFaDY3eo3alqlScAV7b5d0u1sLFfUAqRkJG0gI57a3n6RinjTBapXqWh2zIRwAOSElp5z5n8sS/E0OxHbLGLz69l1PT5SGrQZAkhNL7fzIZBwl6++ImtP8A/9LlENpqob90Ccy92CYxHW1FCg+eEEsaTDTtNu7iZWlBJOEBXqPlXS1tkRiKHJliyya9PwrXYZCkpzps0ZQKTucgQyCF1i8WI8VPxHJQCCWO3/GdPiO5ywMWG69okMyNVQ2SItDzbVdDMMpMe2/TKZRZAv8A/9MFqegSWdgZAoBpXYZsKaWIW2oOk5VzUVyFqy3Rb+x9RQ9BXvkgUPQNOntGiBRwcSrVxc/vKg9MNKh5vNC2i050OCk23Bq/12js1cICERcQySQ8kxBVj2opMoKkGp7ZJCTf4anuiXZdj0GAsn//1JdrtssltJFTqCM2MWgvFNe0q4trp2ANKk5XONJCXQahJEaEkUyIKU707zhdWhFHJHhXJiaKTl/zEVoeNPjI64eNaQ+mT3ms3oY19OtcF2l6HpmniJVXJIZjY6astrQZWSmkHc+WZJJa8ajJCaKVBoht03WmPGtP/9U41PzHAJD8QpmzApx2L6pe6bdk8iKnviSFY7N5etrpv3Eg5HsMrMAWVqY8gas5+AVGR8NbTTSfyt1CSVWuDRO4x4KW3ouk+XLPTIVjiQcu7ZJUz4rHvhVHad5ltrQhJHAHfIGNptkKeatKMfLmtchwFNpNqvmm1cEKwpk440W//9bnN5r9xJXc5mGbVSWSanKxPxHI8SaV9J1mW2vo5CxKgiowiSCHvnlbVdMv7ONlZeZAqPfLLQyB4k41XpkVQxgYnbCqFutOu5QQnTDasS1/QdUiUyKTXrtkgbQxGbU9ZsyVctQYNwtISbzZeUoxORM1p//XVufyekaMlF3+WZ3pad2G63+Wup2bMRGSB7YDBPExebQr2F6NGQR7ZHhW2SeVG1O3uo1RmAr0yYCCXumlPI9onqbtTAVTCOOMmld8UogwhV6VwWqAvDEUKyKCD44QhiepaTp10xTgKnLQxSM/lwlzKeK/CemRNJf/0O0aTq9nMoBIIzKlEhrBRt7pem3kZqqmuQEiFp555r8q6fDV1jFfll8JWwIY7ougR/WxJxooyZUMwkvIbOECvQZGksebzJMJqhtq5PhRbN/Ll5+kbUEjcd8pmKZArta0pxCzKMYSUh5xqN1NZ3R5VABzIDWneiearYkK5AbIGCQX/9k='


# http://www.pygtk.org/pygtk2tutorial/ch-GettingStarted.html
class Base:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_default_size(200, 200)
        self.window.connect("destroy", self.destroy)
        self.window.connect("activate-focus", self.invert_colors)

        self.image = gtk.Image()
        open("/tmp/chaos.jpg", 'w').write(base64.b64decode(IMAGE))
        self.image.set_from_file("/tmp/chaos.jpg")
        self.image.show()

        self.window.add(self.image)

        self.window.show()

    def main(self):
        gtk.main()

    def invert_colors(self, *args):
        # http://www.pygtk.org/pygtk2tutorial/sec-Images.html
        temp_pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 200, 200)
        self.pixbuf = self.image.get_pixbuf()
        temp_pix = self.sugar_paint_invert_colors(self.pixbuf)
        self.image.set_from_pixbuf(temp_pix)

    def sugar_paint_invert_colors(self, temp_pix):
        # http://git.sugarlabs.org/paint/mainline/blobs/master/Area.py#line1033
        def proc_invert_color(temp_pix):
            pix_manip2 = temp_pix.get_pixels_array()
            pix_manip = numpy.ones(pix_manip2.shape, dtype=numpy.uint8) \
                        * 255
            pix_manip2 = pix_manip - pix_manip2
            temp_pix = gtk.gdk.pixbuf_new_from_array(pix_manip2,
                                                     gtk.gdk.COLORSPACE_RGB, 8)
            return temp_pix
        return proc_invert_color(temp_pix)

    # Another callback
    def destroy(self, widget, data=None):
        gtk.main_quit()

if __name__ == "__main__":
    base = Base()
    base.main()
