mirror of
https://github.com/freedoom/freedoom.git
synced 2025-09-01 13:25:46 -04:00
90 lines
2.7 KiB
Python
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()
|