summaryrefslogtreecommitdiff
path: root/gtk-recordmydesktop/src/rmdSelect.py
diff options
context:
space:
mode:
Diffstat (limited to 'gtk-recordmydesktop/src/rmdSelect.py')
-rw-r--r--gtk-recordmydesktop/src/rmdSelect.py139
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()
+
+
© All Rights Reserved