diff options
author | iovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a> | 2006-09-25 07:45:20 +0000 |
---|---|---|
committer | iovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a> | 2006-09-25 07:45:20 +0000 |
commit | 4a831afd95e453a92c7da8445cbe0582c540f6cc (patch) | |
tree | b3fe4cb47370c5902254b5580a5324bcc3722c4d /gtk-recordmydesktop/src/rmdSelect.py | |
parent | cc504650ca73cd9045c4bc2f89596954d2450257 (diff) |
automake based project
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@70 f606c939-3180-4ac9-a4b8-4b8779d57d0a
Diffstat (limited to 'gtk-recordmydesktop/src/rmdSelect.py')
-rw-r--r-- | gtk-recordmydesktop/src/rmdSelect.py | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/gtk-recordmydesktop/src/rmdSelect.py b/gtk-recordmydesktop/src/rmdSelect.py new file mode 100644 index 0000000..cf03403 --- /dev/null +++ b/gtk-recordmydesktop/src/rmdSelect.py @@ -0,0 +1,139 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# Istanbul - a desktop session recorder +# Copyright (C) 2005 Zaheer Abbas Merali (zaheerabbas at merali dot org) +# All rights reserved. + +# This file may be distributed and/or modified under the terms of +# the GNU General Public License version 2 as published by +# the Free Software Foundation. +# This file is distributed without any warranty; without even the implied +# warranty of merchantability or fitness for a particular purpose. +# See "LICENSE.GPL" in the source distribution for more information. + +# Headers in this file shall remain intact. + +#This file has been modified to be used in gtk-recordMyDesktop +#by John Varouhakis +#area_return list has been added to retrieve the values +#original file name is select.py in Istanbul-0.2.1 +import gtk +import gtk.gdk + +class GtkAreaSelector(gtk.Window): + def __init__(self,area_return): + self.area_return=area_return + gtk.Window.__init__(self) + self.set_app_paintable(True) + self.fullscreen() + self.connect("expose-event", self.expose_cb) + self.connect("button-press-event", self.button_press_cb) + self.connect("button-release-event", self.button_release_cb) + self.connect("motion-notify-event", self.motion_notify_cb) + self.connect("delete-event", self.delete_cb) + self.connect("realize", self.realize_cb) + root = gtk.gdk.get_default_root_window() + (width, height) = root.get_size() + self.root = root.get_image(0, 0, width, height) + self.x1 = self.y1 = -1 + self.x2 = self.y2 = 0 + self.show_all() + + def realize_cb(self, widget): + gdkwindow = self.window + gdkwindow.set_events(gdkwindow.get_events() | + gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | + gtk.gdk.POINTER_MOTION_MASK); + cursor = gtk.gdk.Cursor(gtk.gdk.CROSSHAIR) + gdkwindow.set_cursor(cursor) + gdkwindow.set_back_pixmap(None, False) + + def expose_cb(self, widget, event): + dashes = [ 1.0, 2.0 ] + cr = self.window.cairo_create() + cr.rectangle(event.area.x, event.area.y, event.area.width, + event.area.height) + cr.clip() + self.window.draw_image(self.style.black_gc, self.root, event.area.x, + event.area.y, event.area.x, event.area.y, event.area.width, + event.area.height) + cr.set_line_width(1.0) + cr.set_source_rgba (1.0, 0.0, 0.0, 1.0) + cr.set_dash (dashes, 0.0) + cr.move_to (self.x1 - 0.5, 0.0) + cr.line_to (self.x1 - 0.5, event.area.y + event.area.height) + cr.move_to (0.0, self.y1 - 0.5) + cr.line_to (event.area.x + event.area.width, self.y1 - 0.5) + cr.stroke () + + if self.x1 >= 0: + x = min(self.x1, self.x2) + y = min(self.y1, self.y2) + w = max(self.x1, self.x2) - x + h = max(self.y1, self.y2) - y + cr.set_dash ([], 0.0) + cr.rectangle ( x, y, w, h) + cr.fill() + cr.set_source_rgba (0.0, 0.0, 0.5, 0.5) + cr.rectangle (x + 0.5, y + 0.5, w - 1, h - 1) + cr.stroke() + + return False + + def motion_notify_cb(self, widget, event): + self.queue_draw() + + if self.x1 >= 0: + rect = gtk.gdk.Rectangle() + rect.x = min(self.x1, min(self.x2, event.x + 1)) + rect.width = max(self.x1, max(self.x2, event.x + 1)) - rect.x + rect.y = min(self.y1, min(self.y2, event.y + 1)) + rect.height = max(self.y1, max(self.y2, event.y + 1)) - rect.y + self.queue_draw_area(rect.x, rect.y, rect.width, rect.height) + + self.x2 = event.x + 1 + self.y2 = event.y + 1 + + return True + + def button_release_cb(self, widget, event): + if event.button == 1 and self.x1 >= 0: + self.x2 = event.x + 1 + self.y2 = event.y + 1 + # stop + self.area_return[0]=min(int(self.x1),int(self.x2)) + self.area_return[1]=min(int(self.y1),int(self.y2)) + self.area_return[2]=max(int(self.x1),int(self.x2)) + self.area_return[3]=max(int(self.y1),int(self.y2)) + self.hide() + self.destroy() + + return True + + def button_press_cb(self, widget, event): + if event.button != 1: + self.x1 = self.y1 = -1 + # stop + #print "(%d, %d) - (%d, %d)" % (self.x1, self.y1, self.x2, self.y2) + #self.area_return[0]=self.x1 + #self.area_return[1]=self.y1 + #self.area_return[2]=self.x2 + #self.area_return[3]=self.y2 + #print self.area_return + self.destroy() + return True + self.x1 = event.x + self.y1 = event.y + self.queue_draw() + return True + + def delete_cb(self, widget,Event=None): + pass + +if __name__ == "__main__": + w = GtkAreaSelector() + w.show() + gtk.main() + + |