37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
#
|
|
# Python GUI - Images - Gtk
|
|
#
|
|
|
|
from gi.repository import Gdk
|
|
from GtkImageScaling import gtk_scale_pixbuf
|
|
from GImages import Image as GImage
|
|
|
|
class Image(GImage):
|
|
|
|
def _init_from_file(self, file):
|
|
self._gdk_pixbuf = GdkPixbuf.Pixbuf.new_from_file(file)
|
|
|
|
def get_width(self):
|
|
return self._gdk_pixbuf.get_width()
|
|
|
|
def get_height(self):
|
|
return self._gdk_pixbuf.get_height()
|
|
|
|
def draw(self, canvas, src_rect, dst_rect):
|
|
sx, sy, sr, sb = src_rect
|
|
dx, dy, dr, db = dst_rect
|
|
sw = sr - sx
|
|
sh = sb - sy
|
|
dw = dr - dx
|
|
dh = db - dy
|
|
gdk_pixbuf = self._gdk_pixbuf
|
|
if sw <> dw or sh <> dh:
|
|
gdk_scaled_pixbuf = gtk_scale_pixbuf(gdk_pixbuf, sx, sy, sw, sh, dw, dh)
|
|
canvas._gdk_drawable.draw_pixbuf(
|
|
canvas._gdk_gc, gdk_scaled_pixbuf,
|
|
0, 0, dx, dy, dw, dh, Gdk.RGB_DITHER_NORMAL, 0, 0)
|
|
else:
|
|
canvas._gdk_drawable.draw_pixbuf(
|
|
canvas._gdk_gc, self._gdk_pixbuf,
|
|
sx, sy, dx, dy, sw, sh, Gdk.RGB_DITHER_NORMAL, 0, 0)
|