freedoom/tools/cleanroom/images.py
2008-02-23 18:56:55 +00:00

90 lines
2.7 KiB
Python

#!/usr/bin/env python
# example images.py
import pygtk
pygtk.require('2.0')
import gtk
class ImagesExample:
# when invoked (via signal delete_event), terminates the application.
def close_application(self, widget, event, data=None):
gtk.main_quit()
return False
def __init__(self):
# create the main window, and attach delete_event signal to terminating
# the application
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("delete_event", self.close_application)
window.set_border_width(10)
window.show()
# a horizontal box to hold the buttons
hbox = gtk.HBox()
hbox.show()
window.add(hbox)
# create several images with data from files and load images into
# buttons
baseimage = gtk.Image()
baseimage.set_from_file("../../patches/wall40_1.gif")
pixbuf = baseimage.get_pixbuf()
if pixbuf:
scale = 1
baseimage.set_from_pixbuf(pixbuf.scale_simple(
pixbuf.get_width() * scale,
pixbuf.get_height() * scale,
gtk.gdk.INTERP_NEAREST
))
baseimage.show()
basepatch = gtk.Image()
basepatch.set_from_file("../../patches/ps20a0.gif")
pb = basepatch.get_pixbuf()
basepatch.set_from_pixbuf(pb.scale_simple(
pb.get_width() * scale,
pb.get_height() * scale,
gtk.gdk.INTERP_NEAREST
))
pb = basepatch.get_pixbuf()
pb = pb.add_alpha(True,chr(0),chr(255),chr(255))
for x,y in [(0,0), (24,24), (104,16), (24,104), (-16,0), (0,-16)]:
x *= scale
y *= scale
image = gtk.Image()
image.set_from_pixbuf(baseimage.get_pixbuf().copy())
image.show()
dest_x = max(0, x)
dest_y = max(0, y)
dest_height = min(pb.get_height(), image.get_pixbuf().get_height() - dest_y)
dest_width = min(pb.get_width(), image.get_pixbuf().get_width() - dest_x)
if x < 0:
dest_width += x
if y < 0:
dest_height += y
offset_x = x
offset_y = y
pb.composite(
image.get_pixbuf(),
dest_x, dest_y, dest_width, dest_height,
offset_x, offset_y, 1, 1, # scale
gtk.gdk.INTERP_NEAREST, 255
)
# a button to contain the image widget
button = gtk.Button()
button.add(image)
button.show()
hbox.pack_start(button)
def main():
gtk.main()
return 0
if __name__ == "__main__":
ImagesExample()
main()