diff options
-rwxr-xr-x | gtk-recordmydesktop/gtk-recordMyDesktop | 4 | ||||
-rw-r--r-- | gtk-recordmydesktop/rmdPrefsWidget.py | 112 | ||||
-rw-r--r-- | gtk-recordmydesktop/rmdSelect.py | 18 | ||||
-rwxr-xr-x | gtk-recordmydesktop/rmdSelectThumb.py | 185 | ||||
-rw-r--r-- | gtk-recordmydesktop/rmdSimple.py | 277 | ||||
-rw-r--r-- | gtk-recordmydesktop/rmdTrayIcon.py | 105 | ||||
-rw-r--r-- | gtk-recordmydesktop/rmdTrayPopup.py | 14 |
7 files changed, 590 insertions, 125 deletions
diff --git a/gtk-recordmydesktop/gtk-recordMyDesktop b/gtk-recordmydesktop/gtk-recordMyDesktop index 61afcf1..69e309f 100755 --- a/gtk-recordmydesktop/gtk-recordMyDesktop +++ b/gtk-recordmydesktop/gtk-recordMyDesktop @@ -27,10 +27,10 @@ #* For further information contact me at johnvarouhakis@gmail.com * #**********************************************************************************/ -import rmdTrayIcon +import rmdSimple def main(): - tr=rmdTrayIcon.trayIcon() + tr=rmdSimple.simpleWidget() main() diff --git a/gtk-recordmydesktop/rmdPrefsWidget.py b/gtk-recordmydesktop/rmdPrefsWidget.py index 6ca4b3f..772d952 100644 --- a/gtk-recordmydesktop/rmdPrefsWidget.py +++ b/gtk-recordmydesktop/rmdPrefsWidget.py @@ -36,27 +36,27 @@ import os class prefsWidget(object): - labelStrings=[_('Frames Per Second'),_('Sound Recording'),_('Startup Delay(secs)'), + labelStrings=[_('Frames Per Second'),_(''),_('Startup Delay(secs)'), _('Channels'),_('Frequency'),_('Device'),_('Video Quality'),_('Sound Quality'), _('Display'),_('Mouse Cursor'),_('Full shots at every frame'),_('MIT-Shm extension'), _('Drop Frames(encoder)'),_('Shared Threshold'),_('Quick Subsampling')] mouseStrings=[_('Normal'),_('White'),_('Black'),_('None')] stateStrings=[_('Enabled'),_('Disabled')] - tabStrings=[_('Basic'),_('Sound'),_('Encoding'),_('Advanced')] + tabStrings=[_('Basic'),_('Sound'),_('Advanced')] def destroy(self,Event=None): self.values[0]=self.fpsSpinButton.get_value_as_int() self.values[1]=self.mouseComboBox.get_active() - self.values[2]=self.soundComboBox.get_active() + #self.values[2]=self.soundComboBox.get_active() self.values[3]=self.fullComboBox.get_active() - self.values[4]=self.pathEntry.get_text() + #self.values[4]=self.pathEntry.get_text() #self.values[5]=self.are self.values[6]=self.delaySpinButton.get_value_as_int() self.values[7]=self.channelsSpinButton.get_value_as_int() self.values[8]=self.freqSpinButton.get_value_as_int() self.values[9]=self.deviceEntry.get_text().replace(' ','') - self.values[10]=self.vidqSpinButton.get_value_as_int() - self.values[11]=self.soundqSpinButton.get_value_as_int() + #self.values[10]=self.vidqSpinButton.get_value_as_int() + #self.values[11]=self.soundqSpinButton.get_value_as_int() self.values[12]=self.displayEntry.get_text().replace(' ','') self.values[13]=self.sharedComboBox.get_active() self.values[14]=self.frdropComboBox.get_active() @@ -72,25 +72,14 @@ class prefsWidget(object): self.optionsOpen[0]=0 self.window.destroy() - def __fileSelQuit__(self,Event=None): - self.fileSel.destroy() - - def __fileSelOk__(self,Event=None): - self.pathEntry.set_text(self.fileSel.get_filename()) - self.fileSel.destroy() - def __fileSelect__(self,Event=None): - self.fileSel = gtk.FileSelection(title=None) - self.fileSel.ok_button.connect("clicked", self.__fileSelOk__) - self.fileSel.cancel_button.connect("clicked", self.__fileSelQuit__) - self.fileSel.set_filename(self.values[4]) - self.fileSel.show() def __subWidgets__(self): self.labels={} self.boxes={} self.labelbox={} - for i in range(4): + #self.labelbox[0]=gtk.VBox(homogeneous=False, spacing=20) + for i in range(3): self.labelbox[i]=gtk.VBox(homogeneous=False, spacing=20) self.notebook = gtk.Notebook() @@ -99,21 +88,21 @@ class prefsWidget(object): self.fpsSpinButton= gtk.SpinButton(self.fpsAdjustment, climb_rate=0.5, digits=0) - self.soundComboBox = gtk.combo_box_new_text() - for i in range(2): - self.soundComboBox.append_text(self.stateStrings[i]) - self.soundComboBox.set_active(self.values[2]) + #self.soundComboBox = gtk.combo_box_new_text() + #for i in range(2): + #self.soundComboBox.append_text(self.stateStrings[i]) + #self.soundComboBox.set_active(self.values[2]) self.delayAdjustment=gtk.Adjustment(value=self.values[6], lower=0,upper=10000, step_incr=1, page_incr=5, page_size=0) self.delaySpinButton= gtk.SpinButton(self.delayAdjustment, climb_rate=0.5, digits=0) - self.pathEntry= gtk.Entry(max=0) - self.pathEntry.set_text(self.values[4]) - self.pathButton = gtk.Button(None,gtk.STOCK_SAVE_AS) + #self.pathEntry= gtk.Entry(max=0) + #self.pathEntry.set_text(self.values[4]) + #self.pathButton = gtk.Button(None,gtk.STOCK_SAVE_AS) - self.okButton=gtk.Button(None,gtk.STOCK_OK) + self.okButton=gtk.Button(None,gtk.STOCK_CLOSE) - for i in range(3): + for i in xrange(0,3,2): self.labels[i]=gtk.Label(self.labelStrings[i]) self.labels[i].set_justify(gtk.JUSTIFY_LEFT) self.boxes[i]=gtk.HBox(homogeneous=False, spacing=0) @@ -123,26 +112,27 @@ class prefsWidget(object): self.boxes[3]=gtk.HBox(homogeneous=False, spacing=20) self.labelbox[0].pack_start(self.boxes[3],expand=False,fill=False) - placeholder2=gtk.Label("") + placeholder2=gtk.Label("\n\n\n\n\n\n") placeholder2.show() - self.labelbox[0].pack_start(placeholder2) + self.labelbox[0].pack_start(placeholder2,True,True) self.boxes[4]=gtk.HBox(homogeneous=False, spacing=0) self.labelbox[0].pack_end(self.boxes[4]) self.fpsSpinButton.show() self.boxes[0].pack_end(self.fpsSpinButton,expand=False,fill=False) - self.soundComboBox.show() - self.boxes[1].pack_end(self.soundComboBox,expand=False,fill=False) + #self.soundComboBox.show() + #self.boxes[1].pack_end(self.soundComboBox,expand=False,fill=False) self.delaySpinButton.show() self.boxes[2].pack_end(self.delaySpinButton,expand=False,fill=False) - self.pathEntry.show() - self.boxes[3].pack_start(self.pathEntry,expand=False,fill=False) - self.pathButton.show() - self.boxes[3].pack_end(self.pathButton,expand=False,fill=False) + #self.pathEntry.show() + #self.boxes[3].pack_start(self.pathEntry,expand=False,fill=False) + #self.pathButton.show() + #self.boxes[3].pack_end(self.pathButton,expand=False,fill=False) self.okButton.show() - self.boxes[4].pack_start(self.okButton,expand=True,fill=True) + self.boxes[4].pack_end(self.okButton,expand=False,fill=False) for i in range(5): - self.boxes[i].show() + if i!=1: + self.boxes[i].show() #sound page for i in xrange(3,6): self.labels[i]=gtk.Label(self.labelStrings[i]) @@ -172,24 +162,24 @@ class prefsWidget(object): #encoding page - for i in xrange(6,8): - self.labels[i]=gtk.Label(self.labelStrings[i]) - self.labels[i].set_justify(gtk.JUSTIFY_LEFT) - self.boxes[i+5]=gtk.HBox(homogeneous=False, spacing=0) - self.boxes[i+5].pack_start(self.labels[i],expand=False,fill=False) - self.labels[i].show() - #self.boxes[i+5].show() - self.labelbox[2].pack_start(self.boxes[i+5],expand=False,fill=False) - self.vidqAdjustment=gtk.Adjustment(value=self.values[10], lower=0,upper=63, step_incr=1, page_incr=1, page_size=1) - self.vidqSpinButton= gtk.SpinButton(self.vidqAdjustment, climb_rate=0.5, digits=0) - self.boxes[11].pack_end(self.vidqSpinButton,expand=False,fill=False) - self.vidqSpinButton.show() - self.boxes[11].show() - self.soundqAdjustment=gtk.Adjustment(value=self.values[11], lower=-1,upper=10, step_incr=1, page_incr=1, page_size=1) - self.soundqSpinButton= gtk.SpinButton(self.soundqAdjustment, climb_rate=0.5, digits=0) - self.boxes[12].pack_end(self.soundqSpinButton,expand=False,fill=False) - self.soundqSpinButton.show() - self.boxes[12].show() + #for i in xrange(6,8): + #self.labels[i]=gtk.Label(self.labelStrings[i]) + #self.labels[i].set_justify(gtk.JUSTIFY_LEFT) + #self.boxes[i+5]=gtk.HBox(homogeneous=False, spacing=0) + #self.boxes[i+5].pack_start(self.labels[i],expand=False,fill=False) + #self.labels[i].show() + ##self.boxes[i+5].show() + #self.labelbox[2].pack_start(self.boxes[i+5],expand=False,fill=False) + #self.vidqAdjustment=gtk.Adjustment(value=self.values[10], lower=0,upper=63, step_incr=1, page_incr=1, page_size=1) + #self.vidqSpinButton= gtk.SpinButton(self.vidqAdjustment, climb_rate=0.5, digits=0) + #self.boxes[11].pack_end(self.vidqSpinButton,expand=False,fill=False) + #self.vidqSpinButton.show() + #self.boxes[11].show() + #self.soundqAdjustment=gtk.Adjustment(value=self.values[11], lower=-1,upper=10, step_incr=1, page_incr=1, page_size=1) + #self.soundqSpinButton= gtk.SpinButton(self.soundqAdjustment, climb_rate=0.5, digits=0) + #self.boxes[12].pack_end(self.soundqSpinButton,expand=False,fill=False) + #self.soundqSpinButton.show() + #self.boxes[12].show() #misc page for i in xrange(8,15): @@ -199,7 +189,7 @@ class prefsWidget(object): self.boxes[i+5].pack_start(self.labels[i],expand=False,fill=False) self.labels[i].show() #self.boxes[i+5].show() - self.labelbox[3].pack_start(self.boxes[i+5],expand=False,fill=False) + self.labelbox[2].pack_start(self.boxes[i+5],expand=False,fill=False) self.displayEntry= gtk.Entry(max=0) self.displayEntry.set_text(self.values[12]) self.boxes[13].pack_end(self.displayEntry,expand=False,fill=False) @@ -254,15 +244,15 @@ class prefsWidget(object): self.boxes[19].show() #append and show - for i in range(4): + for i in range(3): self.notebook.append_page(self.labelbox[i],gtk.Label(self.tabStrings[i])) self.window.add(self.notebook) - for i in range(4): + for i in range(3): self.labelbox[i].show() self.notebook.show() def __makeCons__(self): - self.pathButton.connect("clicked",self.__fileSelect__) + #self.pathButton.connect("clicked",self.__fileSelect__) self.okButton.connect("clicked",self.destroy) def __init__(self,values,optionsOpen): @@ -276,7 +266,7 @@ class prefsWidget(object): self.__makeCons__() - self.window.set_size_request(288,384) + self.window.set_size_request(350,-1) self.window.show() def main(self): diff --git a/gtk-recordmydesktop/rmdSelect.py b/gtk-recordmydesktop/rmdSelect.py index 45dfb2f..cf03403 100644 --- a/gtk-recordmydesktop/rmdSelect.py +++ b/gtk-recordmydesktop/rmdSelect.py @@ -106,21 +106,7 @@ class GtkAreaSelector(gtk.Window): 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)) - dialog = gtk.Dialog(title=None, parent=None, flags=0, buttons=None) - label1 = gtk.Label("Recording area for the next session\n\t\t\tis set to:") - dialog.vbox.pack_start(label1, True, True, 0) - label1.show() - label2 = gtk.Label("(%d,%d) - (%d,%d)\n"%(self.area_return[0],self.area_return[1],self.area_return[2],self.area_return[3])) - dialog.vbox.pack_start(label2, True, True, 0) - label2.show() - button = gtk.Button(label=None, stock=gtk.STOCK_OK) - dialog.vbox.pack_start(button, True, True, 0) - def __destroy(button): - dialog.destroy() - button.connect("clicked", __destroy) - button.show() - dialog.set_size_request(300,128) - dialog.show() + self.hide() self.destroy() return True @@ -142,7 +128,7 @@ class GtkAreaSelector(gtk.Window): self.queue_draw() return True - def delete_cb(self, widget): + def delete_cb(self, widget,Event=None): pass if __name__ == "__main__": diff --git a/gtk-recordmydesktop/rmdSelectThumb.py b/gtk-recordmydesktop/rmdSelectThumb.py new file mode 100755 index 0000000..74c2186 --- /dev/null +++ b/gtk-recordmydesktop/rmdSelectThumb.py @@ -0,0 +1,185 @@ + +import gtk +import gtk.gdk +#from rmdSelect import * +import gobject +import gc + +class GtkThumbSelector(gtk.DrawingArea): + def __init__(self,area_return,hidden,update_interval=2000): + self.hidden=hidden + self.area_return=area_return + self.selecting=0 + gtk.DrawingArea.__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() + self.wroot = gtk.gdk.get_default_root_window() + (self.wwidth, self.wheight) = self.wroot.get_size() + ############################################################### + + self.factor=1; + twidth=self.wwidth + while twidth>320 or self.factor<4: + twidth/=2 + self.factor*=2 + self.root=gtk.gdk.Image(gtk.gdk.IMAGE_NORMAL,self.wroot.get_visual(),self.wwidth/self.factor,self.wheight/self.factor) + #(width, height) = root.get_size() + sroot = self.wroot.get_image(0, 0, self.wwidth, self.wheight) + self.__subsample__(sroot,self.wwidth,self.wheight,self.root,self.factor) + #self.root = root.get_image(0, 0, width, height) + self.x1 = self.y1 = -1 + self.x2 = self.y2 = -1 + self.set_size_request(self.wwidth/self.factor,self.wheight/self.factor) + self.timed_id=gobject.timeout_add(update_interval,self.update_image) + + def __subsample__(self,im1,w,h,im2,stride,x=0,y=0): + for i in xrange(y,h,stride): + for k in xrange(x,w,stride): + im2.put_pixel(k/stride,i/stride,im1.get_pixel(k,i)) + def button_release_cb(self, widget, event): + if event.button == 1 and self.x1 >= 0 and widget==self: + self.selecting=0 + self.x2 = event.x + 1 + self.y2 = event.y + 1 + # stop + if self.x1 <0: self.x1=0 + if self.x2 <0: self.x2=0 + if self.y1 <0: self.y1=0 + if self.y2 <0: self.y2=0 + if self.x1 >self.wwidth/self.factor: self.x1=self.wwidth/self.factor + if self.x2 >self.wwidth/self.factor: self.x2=self.wwidth/self.factor + if self.y1 >self.wheight/self.factor: self.y1=self.wheight/self.factor + if self.y2 >self.wheight/self.factor: self.y2=self.wheight/self.factor + + + self.area_return[0]=min(int(self.x1),int(self.x2))*self.factor + self.area_return[1]=min(int(self.y1),int(self.y2))*self.factor + self.area_return[2]=max(int(self.x1),int(self.x2))*self.factor + self.area_return[3]=max(int(self.y1),int(self.y2))*self.factor + self.x1=self.y1=self.x2=self.y2=-1 + #print self.area_return + self.update_image() + + def button_press_cb(self, widget, event): + if widget==self: + if event.button == 1: + self.selecting=1 + self.update_image() + self.x1 = event.x + self.y1 = event.y + else: + self.x1 = self.y1=self.x2=self.y2=-1 + self.area_return[0]=self.area_return[1]=0 + self.area_return[2]=self.wwidth + self.area_return[3]=self.wheight + self.update_image() + + def realize_cb(self, widget): + if widget == self: + 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): + if widget==self: + 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): + if widget ==self: + 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 update_image(self): + #self.root.destroy() + self.queue_draw() + if self.hidden[0]==0 : + gc.collect() + sroot = self.wroot.get_image(0,0,self.wwidth,self.wheight) + self.__subsample__(sroot,self.wwidth,self.wheight,self.root,self.factor) + vals=[0,0, self.wwidth, self.wheight] + if self.area_return[0]>=0: + vals[0]=self.area_return[0] + if self.area_return[1]>=0: + vals[1]=self.area_return[1] + if self.area_return[2]>=0: + vals[2]=self.area_return[2]-self.area_return[0] + if self.area_return[3]>=0: + vals[3]=self.area_return[3]-self.area_return[1] + if vals[0] >0 or vals[1] >0 or vals[2] <self.wwidth or vals[3] <self.wheight: + if self.selecting==0: + self.__draw_lines__(self.root,vals,self.factor) + return True + def __draw_lines__(self,img,vals,factor): + for i in xrange(vals[0]/factor,vals[0]/factor+vals[2]/factor): + for k in range(2): + img.put_pixel(i,vals[1]/factor+k,0xff0000) + img.put_pixel(i,(vals[1]+vals[3]/2-k)/factor,0xff0000) + img.put_pixel(i,(vals[1]+vals[3]-1-k)/factor,0xff0000) + for i in xrange(vals[1]/factor,vals[1]/factor+vals[3]/factor): + for k in range(2): + img.put_pixel(vals[0]/factor+k,i,0xff0000) + img.put_pixel((vals[0]+vals[2]/2-k)/factor,i,0xff0000) + img.put_pixel((vals[0]+vals[2]-1-k)/factor,i,0xff0000) + +#area_return=[-1,-1,-1,-1] + +#w=GtkThumbSelector(area_return,0) +#w.show() +#gtk.main() +#print area_return + + + + diff --git a/gtk-recordmydesktop/rmdSimple.py b/gtk-recordmydesktop/rmdSimple.py new file mode 100644 index 0000000..5d0c242 --- /dev/null +++ b/gtk-recordmydesktop/rmdSimple.py @@ -0,0 +1,277 @@ +#/********************************************************************************* +#* gtk-recordMyDesktop * +#********************************************************************************** +#* * +#* Copyright (C) 2006 John Varouhakis * +#* * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU General Public License as published by * +#* the Free Software Foundation; either version 2 of the License, or * +#* (at your option) any later version. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU General Public License for more details. * +#* * +#* You should have received a copy of the GNU General Public License * +#* along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * +#* * +#* * +#* * +#* For further information contact me at johnvarouhakis@gmail.com * +#**********************************************************************************/ + + +import pygtk +pygtk.require('2.0') +import gtk +import locale, gettext +_ = gettext.gettext +import os +from rmdPrefsWidget import * +from rmdTrayIcon import * +import gtk.gdk +import gobject +import gc +import rmdPrefsWidget as pW +import rmdSelectThumb as sT + +class simpleWidget(object): + hidden=[0] + labelStrings=[_('Video Quality'),_('Sound Quality')] + buttonStrings=[_('Advanced'),_('Select Window')] + options=None + optionsOpen=[0] + def __subWidgets__(self): + self.labelbox=gtk.VBox(homogeneous=False, spacing=20) + #self.labelbox.set_size_request(400,272) + self.NBox=gtk.HBox(homogeneous=False, spacing=20) + self.NEBox=gtk.VBox(homogeneous=False, spacing=0) + self.NEVQBox=gtk.HBox(homogeneous=False, spacing=10) + self.NESQBox=gtk.HBox(homogeneous=False, spacing=10) + self.NETABox=gtk.VBox(homogeneous=False, spacing=10) + self.NWBox=gtk.VBox(homogeneous=False, spacing=0) + + + + self.NBox.pack_start(self.NWBox,expand=False,fill=False) + self.NBox.pack_start(self.NEBox,expand=True,fill=True) + self.NEBox.pack_start(self.NEVQBox,expand=False,fill=False) + self.NEBox.pack_start(self.NESQBox,expand=False,fill=False) + self.NEBox.pack_start(self.NETABox,expand=False,fill=False) + + self.SBox=gtk.HBox(homogeneous=True, spacing=0) + self.SEBox=gtk.HBox(homogeneous=False, spacing=10) + self.SWBox=gtk.HBox(homogeneous=False, spacing=10) + self.SBox.pack_start(self.SWBox,expand=True,fill=True) + self.SBox.pack_start(self.SEBox,expand=True,fill=True) + + self.labelbox.pack_start(self.NBox,expand=False,fill=False) + self.labelbox.pack_end(self.SBox,expand=False,fill=False) + + self.wroot = gtk.gdk.get_default_root_window() + (self.wwidth, self.wheight) = self.wroot.get_size() + + ############################################################### + #self.image = gtk.Image() + self.factor=1; + twidth=self.wwidth + while twidth>320 or self.factor<4: + twidth/=2 + self.factor*=2 + #self.thumb=gtk.gdk.Image(gtk.gdk.IMAGE_NORMAL,self.wroot.get_visual(),self.wwidth/self.factor,self.wheight/self.factor) + + + #sroot = self.wroot.get_image(0, 0, self.wwidth, self.wheight) + #self.__subsample__(sroot,self.wwidth,self.wheight,self.thumb,self.factor) + #self.image.set_from_image(self.thumb,None) + + #self.image.set_size_request(self.wwidth/self.factor,self.wheight/self.factor) + ##self.NWBox.pack_start(self.image,False,False) + #self.image.show() + ############################################################### + self.image=sT.GtkThumbSelector(self.values[5],self.hidden,2000) + self.image.show() + + self.NWBox.pack_start(self.image,False,False) + #quality + self.v_adj=gtk.Adjustment(value=(self.values[10]*100)/63, lower=0, upper=100, step_incr=1, page_incr=10, page_size=0) + self.v_quality=gtk.HScale(self.v_adj) + self.v_quality.set_value_pos(gtk.POS_LEFT) + self.v_quality.set_digits(0) + self.s_button= gtk.CheckButton(label=None) + self.s_adj=gtk.Adjustment(value=(self.values[11]*10), lower=0, upper=100, step_incr=1, page_incr=10, page_size=0) + #print (self.values[11]*10) + self.s_quality=gtk.HScale(self.s_adj) + self.s_quality.set_value_pos(gtk.POS_LEFT) + self.s_quality.set_digits(0) + self.v_label=gtk.Label(" "+self.labelStrings[0]) + self.s_label=gtk.Label(self.labelStrings[1]) + + self.advanced_button=gtk.Button(self.buttonStrings[0]) + self.tipLabel=gtk.Label("") + self.NEVQBox.pack_start(self.v_label,expand=False,fill=False) + self.NEVQBox.pack_start(self.v_quality,expand=True,fill=True) + self.NESQBox.pack_start(self.s_button,expand=False,fill=False) + self.NESQBox.pack_start(self.s_label,expand=False,fill=False) + self.NESQBox.pack_start(self.s_quality,expand=True,fill=True) + self.NETABox.pack_start(self.advanced_button,expand=False,fill=False) + self.NETABox.pack_start(self.tipLabel,expand=False,fill=False) + + self.win_button=gtk.Button(self.buttonStrings[1]) + self.start_button=gtk.Button(None,gtk.STOCK_MEDIA_RECORD) + self.file_button=gtk.Button(None,gtk.STOCK_SAVE_AS) + self.quit_button=gtk.Button(None,gtk.STOCK_QUIT) + self.SWBox.pack_start(self.win_button,False,False) + self.SWBox.pack_start(self.start_button,False,False) + self.SEBox.pack_end(self.quit_button,False,False) + self.SEBox.pack_end(self.file_button,False,False) + + self.win_button.show() + self.start_button.show() + self.file_button.show() + self.quit_button.show() + + self.v_quality.show() + self.s_button.show() + self.s_quality.show() + self.v_label.show() + self.s_label.show() + self.tipLabel.show() + self.advanced_button.show() + self.NEVQBox.show() + self.NESQBox.show() + self.NETABox.show() + self.NEBox.show() + self.NWBox.show() + self.NBox.show() + self.SEBox.show() + self.SWBox.show() + self.SBox.show() + + self.labelbox.show() + self.window.add(self.labelbox) + + def __subsample__(self,im1,w,h,im2,stride,x=0,y=0): + for i in xrange(y,h,stride): + for k in xrange(x,w,stride): + im2.put_pixel(k/stride,i/stride,im1.get_pixel(k,i)) + #def __draw_lines__(self,img,vals,factor): + #for i in xrange(vals[0]/factor,vals[0]/factor+vals[2]/factor): + #for k in range(2): + #img.put_pixel(i,vals[1]/factor+k,0xff0000) + #img.put_pixel(i,(vals[1]+vals[3]/2-k)/factor,0xff0000) + #img.put_pixel(i,(vals[1]+vals[3]-1-k)/factor,0xff0000) + #for i in xrange(vals[1]/factor,vals[1]/factor+vals[3]/factor): + #for k in range(2): + #img.put_pixel(vals[0]/factor+k,i,0xff0000) + #img.put_pixel((vals[0]+vals[2]/2-k)/factor,i,0xff0000) + #img.put_pixel((vals[0]+vals[2]-1-k)/factor,i,0xff0000) + + #def __update_image__(self): + ##self.root.destroy() + #if self.hidden[0]==0: + #gc.collect() + #sroot = self.wroot.get_image(0,0,self.wwidth,self.wheight) + #self.__subsample__(sroot,self.wwidth,self.wheight,self.thumb,self.factor) + #vals=[0,0, self.wwidth, self.wheight] + #if self.values[5][0]>=0: + #vals[0]=self.values[5][0] + #if self.values[5][1]>=0: + #vals[1]=self.values[5][1] + #if self.values[5][2]>=0: + #vals[2]=self.values[5][2]-self.values[5][0] + #if self.values[5][3]>=0: + #vals[3]=self.values[5][3]-self.values[5][1] + #if vals[0] >0 or vals[1] >0 or vals[2] <self.wwidth or vals[3] <self.wheight: + #self.__draw_lines__(self.thumb,vals,self.factor) + #self.image.set_from_image(self.thumb,None) + #return True + def __exit__(self,Event=None): + gtk.main_quit() + self.values[0]=-1 + self.optionsOpen[0]=0 + self.window.destroy() + def hide(self,Event=None): + self.window.hide() + self.hidden[0]=1 + def show(self,Event=None): + self.window.show() + self.hidden[0]=0 + def advanced(self,button=None): + if self.optionsOpen[0] ==0: + self.optionsOpen[0]=1 + self.options=pW.prefsWidget(self.values,self.optionsOpen) + #self.parent.show() + else: + if self.options != None: + self.options.window.destroy() + self.optionsOpen[0]=0 + + def __fileSelQuit__(self,Event=None): + self.fileSel.destroy() + + def __fileSelOk__(self,Event=None): + self.values[4]=self.fileSel.get_filename() + #self.pathEntry.set_text(self.fileSel.get_filename()) + self.fileSel.destroy() + + def __fileSelect__(self,Event=None): + self.fileSel = gtk.FileSelection(title=None) + self.fileSel.ok_button.connect("clicked", self.__fileSelOk__) + self.fileSel.cancel_button.connect("clicked", self.__fileSelQuit__) + self.fileSel.set_filename(self.values[4]) + self.fileSel.show() + + def __makeCons__(self): + self.advanced_button.connect("clicked",self.advanced) + self.file_button.connect("clicked",self.__fileSelect__) + self.quit_button.connect("clicked",self.__exit__) + self.start_button.connect("clicked",self.trayIcon.record_ext) + self.s_button.connect("clicked",self.__sound_check__) + def __sound_check__(self,widget): + self.s_quality.set_sensitive(widget.get_active()) + self.values[2]=widget.get_active() + + def update(self) : + self.values[10]=int((self.v_quality.get_value()*63)/100) + self.values[11]=int(self.v_quality.get_value()/10) + + def __init__(self): + self.values= [15,0,True,1,os.path.join(os.getenv('HOME'),'out.ogg'),[-1,-1,-1,-1],0, + 1,22050,'hw:0,0',63,10,"$DISPLAY",0,1,75,1] + self.optionsOpen=[0] + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.connect("destroy", self.__exit__) + self.window.set_border_width(10) + self.window.set_title("recordMyDesktop") + self.__subWidgets__() + + #self.timed_id=gobject.timeout_add(2000,self.__update_image__) + #if resolution is low let it decide size on it's own + if self.wwidth>640: + self.window.set_size_request(int(self.wwidth/self.factor*2.3),-1) + self.window.set_resizable(False) + + self.trayIcon=trayIcon(self) + self.__makeCons__() + self.s_quality.set_sensitive(self.values[2]) + self.s_button.set_active(self.values[2]) + self.window.show() + wh=self.window.size_request() + self.window.set_size_request(wh[0],wh[1]) + gtk.main() + + + + + + + + + + + diff --git a/gtk-recordmydesktop/rmdTrayIcon.py b/gtk-recordmydesktop/rmdTrayIcon.py index fe497a5..103dcdc 100644 --- a/gtk-recordmydesktop/rmdTrayIcon.py +++ b/gtk-recordmydesktop/rmdTrayIcon.py @@ -56,8 +56,8 @@ import os,signal class trayIcon(object): - values=[15,0,0,1,os.path.join(os.getenv('HOME'),'out.ogg'),[-1,-1,-1,-1],0, - 1,22050,'hw:0,0',63,10,"$DISPLAY",0,1,75,1] + #values=[15,0,0,1,os.path.join(os.getenv('HOME'),'out.ogg'),[-1,-1,-1,-1],0, + #1,22050,'hw:0,0',63,10,"$DISPLAY",0,1,75,1] exit_status={ 0:'Success', 1*256:'Error while parsing the arguments.', @@ -78,12 +78,17 @@ class trayIcon(object): state=0#0 stopped,1 recording,2 paused rmdPid=None - optionsOpen=[0] + optionsOpen=[1] + reopen=0 timed_id=None def __buttonPress__(self,widget,event=None): - if event.button==1 and self.optionsOpen[0]==0: + if event.button==1 : if self.state == 0: + if self.optionsOpen[0]==1: + self.parent.hide() + self.optionsOpen[0]=0 + self.reopen=1 self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_SMALL_TOOLBAR) self.state=1 self.__execRMD__() @@ -108,63 +113,72 @@ class trayIcon(object): self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_SMALL_TOOLBAR) self.state=1 self.__pauseRMD__() - + def record_ext(self,button=None): + if self.state == 0: + if self.optionsOpen[0]==1: + self.parent.hide() + self.optionsOpen[0]=0 + self.reopen=1 + self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_STOP,gtk.ICON_SIZE_SMALL_TOOLBAR) + self.state=1 + self.__execRMD__() + def __execRMD__(self): - - execargs=["recordmydesktop","-o",'%s'%self.values[4], - "-fps","%d"%self.values[0]] - if self.values[2]==1 : + self.parent.update() + execargs=["recordmydesktop","-o",'%s'%self.parent.values[4], + "-fps","%d"%self.parent.values[0]] + if self.parent.values[2]==False : execargs.append("--nosound") - if self.values[1] == 1: + if self.parent.values[1] == 1: execargs.append("-dummy-cursor") execargs.append("white") - elif self.values[1] == 2: + elif self.parent.values[1] == 2: execargs.append("-dummy-cursor") execargs.append("black") - elif self.values[1] == 3: + elif self.parent.values[1] == 3: execargs.append("--no-cursor") - if self.values[3] == 0: + if self.parent.values[3] == 0: execargs.append("--full-shots") - if self.values[13] == 0: + if self.parent.values[13] == 0: execargs.append("--with-shared") - if self.values[3] == 1 and self.values[13] == 1 : + if self.parent.values[3] == 1 and self.parent.values[13] == 1 : execargs.append("--no-cond-shared") - if self.values[5][0]>0 : + if self.parent.values[5][0]>0 : execargs.append('-x') - execargs.append('%d'%self.values[5][0]) - if self.values[5][1]>0: + execargs.append('%d'%self.parent.values[5][0]) + if self.parent.values[5][1]>0: execargs.append('-y') - execargs.append('%d'%self.values[5][1]) - if self.values[5][2]>0 and self.values[5][3]>0: + execargs.append('%d'%self.parent.values[5][1]) + if self.parent.values[5][2]>0 and self.parent.values[5][3]>0: execargs.append('-width') - execargs.append('%d'%(self.values[5][2]-self.values[5][0])) + execargs.append('%d'%(self.parent.values[5][2]-self.parent.values[5][0])) execargs.append('-height') - execargs.append('%d'%(self.values[5][3]-self.values[5][1])) + execargs.append('%d'%(self.parent.values[5][3]-self.parent.values[5][1])) for i in range(4): - self.values[5][i]=-1 - if self.values[6]>0: + self.parent.values[5][i]=-1 + if self.parent.values[6]>0: execargs.append('-delay') - execargs.append('%d'%self.values[6]) + execargs.append('%d'%self.parent.values[6]) execargs.append('-channels') - execargs.append('%d'%self.values[7]) + execargs.append('%d'%self.parent.values[7]) execargs.append('-freq') - execargs.append('%d'%self.values[8]) + execargs.append('%d'%self.parent.values[8]) execargs.append('-device') - execargs.append('%s'%self.values[9]) + execargs.append('%s'%self.parent.values[9]) execargs.append('-v_quality') - execargs.append('%d'%self.values[10]) + execargs.append('%d'%self.parent.values[10]) execargs.append('-s_quality') - execargs.append('%d'%self.values[11]) - if self.values[12] != "$DISPLAY": + execargs.append('%d'%self.parent.values[11]) + if self.parent.values[12] != "$DISPLAY": execargs.append('-display') - execargs.append('%s'%self.values[12]) - if self.values[14] == 0: + execargs.append('%s'%self.parent.values[12]) + if self.parent.values[14] == 0: execargs.append('--drop-frames') execargs.append('-shared-threshold') - execargs.append('%d'%self.values[15]) - if self.values[16] == 0: + execargs.append('%d'%self.parent.values[15]) + if self.parent.values[16] == 0: execargs.append('--quick-subsampling') @@ -195,7 +209,7 @@ class trayIcon(object): button.show() dialog.set_size_request(300,128) dialog.show() - + def __pauseRMD__(self): os.kill(self.rmdPid,signal.SIGUSR1) @@ -208,10 +222,15 @@ class trayIcon(object): os.kill(self.rmdPid,signal.SIGTERM) exit_ret=os.waitpid(self.rmdPid,0) #if exit_ret[0]==self.rmdPid: - self.__exit_status_dialog(exit_ret[1]) + #self.__exit_status_dialog(exit_ret[1]) else: self.__exit_status_dialog(exit_ret[1]) self.rmdPid=None + if self.reopen==1: + self.parent.show() + self.optionsOpen[0]=1 + self.reopen=0 + #print exit_ret def __check_status__(self): if self.rmdPid!=None: @@ -221,6 +240,10 @@ class trayIcon(object): self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_RECORD,gtk.ICON_SIZE_SMALL_TOOLBAR) self.__exit_status_dialog(exit_ret[1]) self.rmdPid=None + if self.reopen==1: + self.parent.show() + self.optionsOpen[0]=1 + self.reopen=0 return False else: return True @@ -228,17 +251,19 @@ class trayIcon(object): return False - def __init__(self): + def __init__(self,parent): + self.parent=parent + #self.parent.values=values self.event_box = gtk.EventBox() self.trayIcon=gtk.Image() self.trayIcon.set_from_stock(gtk.STOCK_MEDIA_RECORD, gtk.ICON_SIZE_SMALL_TOOLBAR) self.event_box.add(self.trayIcon) self.tray_container = egg.trayicon.TrayIcon("recordMyDesktop") self.tray_container.add(self.event_box) - self.tray_popup=iTP.TrayPopupMenu(self.values,self.optionsOpen) + self.tray_popup=iTP.TrayPopupMenu(self.parent,self.parent.values,self.optionsOpen) self.event_box.connect("button-press-event", self.__buttonPress__) self.tray_container.show_all() - gtk.main() + #gtk.main() diff --git a/gtk-recordmydesktop/rmdTrayPopup.py b/gtk-recordmydesktop/rmdTrayPopup.py index 7df1c87..b16a884 100644 --- a/gtk-recordmydesktop/rmdTrayPopup.py +++ b/gtk-recordmydesktop/rmdTrayPopup.py @@ -28,7 +28,8 @@ import rmdPrefsWidget as pW class TrayPopupMenu: options=None - def __init__(self,values,optionsOpen): + def __init__(self,parent,values,optionsOpen): + self.parent=parent self.optionsOpen=optionsOpen self.values=values self._setup_popup_menu() @@ -44,11 +45,12 @@ class TrayPopupMenu: def _prefs_widget(self,button): if self.optionsOpen[0] ==0: self.optionsOpen[0]=1 - self.options=pW.prefsWidget(self.values,self.optionsOpen) + #self.options=pW.prefsWidget(self.values,self.optionsOpen) + self.parent.show() else: - if self.options != None: - self.options.window.destroy() - self.optionsOpen[0]=0 + #if self.options != None: + self.parent.hide() + self.optionsOpen[0]=0 def _setup_prefs_widget(self): self.popupmenu_prefs_widget = gtk.ImageMenuItem( gtk.STOCK_PREFERENCES) @@ -74,7 +76,7 @@ class TrayPopupMenu: def _setup_select_area(self): self.popupmenu_selectarea = gtk.ImageMenuItem( - _("_Select Area to Record")) + _("_Select Area On Screen")) self.popupmenu.add(self.popupmenu_selectarea) self.popupmenu_selectarea.connect("activate", self._select_area_cb) |