diff options
Diffstat (limited to 'gtk-recordmydesktop')
| -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) | 
