Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflavio <fdanesse@gmail.com>2012-03-07 22:55:01 (GMT)
committer flavio <fdanesse@gmail.com>2012-03-07 22:55:01 (GMT)
commit0846929120274b02be668e21fc19228f49c2b0ae (patch)
tree2fbf901b7425536846bfc38bf92668bf77528256
parentb3c9636356fbe5b9792c1e43ae988ee6e174d6de (diff)
Correcciones
-rw-r--r--GnomeJAMediaImagenes.py126
-rw-r--r--ImageProcess.py43
-rw-r--r--icons/JAMediaImagenes.pngbin0 -> 5046 bytes
-rw-r--r--icons/acercar.pngbin0 -> 2077 bytes
-rw-r--r--icons/alejar.pngbin0 -> 2044 bytes
-rw-r--r--icons/ambross.pngbin0 -> 46039 bytes
-rw-r--r--icons/blur.pngbin23630 -> 27174 bytes
-rw-r--r--icons/descargas.pngbin0 -> 1797 bytes
-rw-r--r--icons/deshacer.pngbin0 -> 2275 bytes
-rw-r--r--icons/embross.pngbin46830 -> 0 bytes
-rw-r--r--icons/escalaoriginal.pngbin0 -> 2324 bytes
-rw-r--r--icons/finedges.pngbin36680 -> 38622 bytes
-rw-r--r--icons/grey.pngbin35991 -> 36180 bytes
-rw-r--r--icons/mirror.pngbin44938 -> 0 bytes
-rw-r--r--icons/offset.pngbin44358 -> 0 bytes
-rw-r--r--icons/original.pngbin44406 -> 44310 bytes
-rw-r--r--icons/rotar.pngbin0 -> 2531 bytes
-rw-r--r--icons/rotate_anticlockwise.svg71
-rw-r--r--icons/rotate_clockwise.svg71
-rw-r--r--icons/sharpen.pngbin31093 -> 49131 bytes
-rw-r--r--icons/solarize.pngbin44086 -> 43639 bytes
-rw-r--r--toolbar.py254
22 files changed, 287 insertions, 278 deletions
diff --git a/GnomeJAMediaImagenes.py b/GnomeJAMediaImagenes.py
index 2307136..e7778ea 100644
--- a/GnomeJAMediaImagenes.py
+++ b/GnomeJAMediaImagenes.py
@@ -18,19 +18,21 @@
# JAMediaImagenes.py por:
# Flavio Danesse <fdanesse@gmail.com>
# CeibalJAM! - Uruguay
-# Basado en código de: Keshav Sharma <keshav7890@gmail.com> & Vaibhav Sharma
-import time, os, gtk, pygtk, gobject, gst, pygst, sys, time
+import time, os, gtk, pygtk, gobject, gst, pygst, sys, time, commands
from gettext import gettext as _
-from toolbar import ViewToolbar, EditToolbar, IPButton
+from toolbar import ViewToolbar, EditToolbar
from ImageProcess import ImageProcessor
+DIRECTORIO_BASE= os.path.dirname(__file__)
+ICONOS= os.path.join(DIRECTORIO_BASE, "icons/")
+
class JAMediaImagenes(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
- #self.set_title(_("Luna"))
- #self.set_icon_from_file(os.path.join(MG.ICONOS,"luna-ico.png"))
+ self.set_title("JAMedia Imágenes")
+ self.set_icon_from_file(os.path.join(ICONOS,"JAMediaImagenes.png"))
self.set_resizable(True)
self.set_size_request( 800, 600 )
self.set_position(gtk.WIN_POS_CENTER)
@@ -49,32 +51,31 @@ class JAMediaImagenes(gtk.Window):
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.add_with_viewport(self.view)
- self.view_toolbar = ViewToolbar()
- self.view_toolbar.connect('abrir_archivo', self.abrir_archivo)
- self.view_toolbar.connect('guardar_archivo', self.guardar_archivo)
- self.view_toolbar.connect('zoom_in', self.zoom_in)
- self.view_toolbar.connect('zoom_out', self.zoom_out)
- self.view_toolbar.connect('zoom_to_fit', self.zoom_tofit)
- self.view_toolbar.connect('rotate_clockwise', self.rotate_anticlockwise)
- self.view_toolbar.connect('rotate_anticlockwise', self.rotate_clockwise)
- self.view_toolbar.connect('undo', self.undo)
- self.view_toolbar.connect('redo', self.redo)
- self.view_toolbar.connect('cam_cb',self.fotografiar)
- self.view_toolbar.show()
- self.edit_toolbar = EditToolbar()
- self.edit_toolbar.connect('grey', self.view.grey)
- self.edit_toolbar.connect('blur', self.view.image_Blur)
- self.edit_toolbar.connect('transpose', self.view.image_Transpose)
- self.edit_toolbar.connect('offset', self.view.image_Offset)
- self.edit_toolbar.connect('contour', self.view.image_Contour)
- self.edit_toolbar.connect('finedges', self.view.image_Finedges)
- self.edit_toolbar.connect('solarize', self.view.image_Solarize)
- self.edit_toolbar.connect('invert', self.view.image_Invert)
- self.edit_toolbar.connect('ambross', self.view.image_Ambross)
- self.edit_toolbar.connect('sharpen', self.view.image_Sharpen)
- self.edit_toolbar.show()
-
- for toolbar in [self.view_toolbar, self.edit_toolbar]:
+ view_toolbar = ViewToolbar()
+ view_toolbar.connect('abrir_archivo', self.abrir_archivo)
+ view_toolbar.connect('guardar_archivo', self.guardar_archivo)
+ view_toolbar.connect('zoom_in', self.zoom_in)
+ view_toolbar.connect('zoom_out', self.zoom_out)
+ view_toolbar.connect('zoom_to_fit', self.zoom_tofit)
+ view_toolbar.connect('rotate_clockwise', self.rotate_anticlockwise)
+ view_toolbar.connect('rotate_anticlockwise', self.rotate_clockwise)
+ view_toolbar.connect('undo', self.undo)
+ view_toolbar.connect('redo', self.redo)
+ view_toolbar.connect('cam_cb',self.fotografiar)
+ view_toolbar.show()
+ edit_toolbar = EditToolbar()
+ edit_toolbar.connect('grey', self.view.grey)
+ edit_toolbar.connect('blur', self.view.image_Blur)
+ edit_toolbar.connect('transpose', self.view.image_Transpose)
+ edit_toolbar.connect('contour', self.view.image_Contour)
+ edit_toolbar.connect('finedges', self.view.image_Finedges)
+ edit_toolbar.connect('solarize', self.view.image_Solarize)
+ edit_toolbar.connect('invert', self.view.image_Invert)
+ edit_toolbar.connect('ambross', self.view.image_Ambross)
+ edit_toolbar.connect('sharpen', self.view.image_Sharpen)
+ edit_toolbar.show()
+
+ for toolbar in [view_toolbar, edit_toolbar]:
caja.pack_start(toolbar, False, False, 0)
caja.pack_start(sw, True, True, 0)
@@ -86,13 +87,15 @@ class JAMediaImagenes(gtk.Window):
return False
def fotografiar(self, button):
- tempfile = "/tmp/photo.jpg"
- photocmd = "v4l2src ! ffmpegcolorspace ! jpegenc ! filesink location=%s" % (tempfile)
- pipeline = gst.parse_launch (photocmd)
- pipeline.set_state(gst.STATE_PLAYING)
- time.sleep(3)
- pipeline.set_state(gst.STATE_NULL)
- self.view.set_pixbuf( gtk.gdk.pixbuf_new_from_file(tempfile) )
+ archivo = "/tmp/photo.jpg"
+ #photocmd = "v4l2src ! ffmpegcolorspace ! jpegenc ! filesink location=%s" % (archivo)
+ #pipeline = gst.parse_launch (photocmd)
+ #pipeline.set_state(gst.STATE_PLAYING)
+ #time.sleep(3)
+ #pipeline.set_state(gst.STATE_NULL)
+ comando= 'gst-launch-0.10 v4l2src ! ffmpegcolorspace ! pngenc ! filesink location=%s' % (archivo)
+ commands.getoutput(comando)
+ self.view.set_pixbuf( gtk.gdk.pixbuf_new_from_file(archivo) )
def undo(self, button):
self.view.image_undo()
@@ -120,13 +123,16 @@ class JAMediaImagenes(gtk.Window):
selector.connect('abrir_archivo', self.load)
def guardar_archivo(self, button):
- #selector = Selector_de_Archivos(self)
- #selector.connect('abrir_archivo', self.load)
- self.view.guardar_archivo()
+ if not self.view.pixbufs_stack: return
+ selector = Selector_de_Directorio(self)
+ selector.connect('guardar_archivo', self.save)
def load(self, widget= None, senial= None):
self.view.set_pixbuf( gtk.gdk.pixbuf_new_from_file(senial) )
+ def save(self, widget= None, senial= None):
+ self.view.guardar_archivo(senial)
+
class Selector_de_Archivos (gtk.FileChooserDialog):
__gsignals__ = {'abrir_archivo': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_STRING,]))}
def __init__(self, ventana):
@@ -158,6 +164,7 @@ class Selector_de_Archivos (gtk.FileChooserDialog):
def abrir(self, widget):
archivo = self.get_filename()
+ if not archivo: return self.salir(None)
if os.path.exists(archivo):
if os.path.isfile(archivo):
self.emit('abrir_archivo', archivo)
@@ -166,6 +173,43 @@ class Selector_de_Archivos (gtk.FileChooserDialog):
def salir(self, widget):
self.destroy()
+class Selector_de_Directorio (gtk.FileChooserDialog):
+ __gsignals__ = {'guardar_archivo': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_STRING,]))}
+ def __init__(self, ventana):
+ gtk.FileChooserDialog.__init__(self, title= "Guardar Imagen", parent=ventana,
+ action=gtk.FILE_CHOOSER_ACTION_SAVE)
+ self.set_default_size( 640, 480 )
+ self.resize( 640, 480 )
+
+ # extras
+ hbox = gtk.HBox()
+ boton_abrir = gtk.Button("Guardar")
+ boton_salir = gtk.Button("Salir")
+ hbox.pack_end(boton_salir, True, True, 5)
+ hbox.pack_end(boton_abrir, True, True, 5)
+ self.set_extra_widget(hbox)
+
+ filter = gtk.FileFilter()
+ filter.set_name("Imagenes")
+ filter.add_mime_type("image/*")
+ self.add_filter(filter)
+
+ # Callbacks
+ boton_salir.connect("clicked", self.salir)
+ boton_abrir.connect("clicked",self.guardar)
+
+ self.show_all()
+ self.resize( 640, 480 )
+
+ def guardar(self, widget):
+ archivo = self.get_filename()
+ if not archivo: return self.salir(None)
+ self.emit('guardar_archivo', archivo)
+ self.salir(None)
+
+ def salir(self, widget):
+ self.destroy()
+
if __name__=="__main__":
JAMediaImagenes()
diff --git a/ImageProcess.py b/ImageProcess.py
index 042e7ac..e8c2930 100644
--- a/ImageProcess.py
+++ b/ImageProcess.py
@@ -28,12 +28,10 @@ else:
import Image,ImageEnhance,ImageFont,ImageFilter,ImageOps, ImageDraw
def pixbuftoImage(pb):
- print "*** pixbuftoImage:",pb
width,height = pb.get_width(),pb.get_height()
return Image.fromstring("RGB",(width,height),pb.get_pixels() )
def imagetopixbuf(im):
- print "*** imagetopixbuf:", im
file1 = StringIO.StringIO()
im.save(file1, "ppm")
contents = file1.getvalue()
@@ -73,10 +71,21 @@ class ImageProcessor(gtk.DrawingArea):
self.window.process_updates( True )
def add_pixbuf_stack(self, pixbuf):
- self.pixbufs_stack.append(pixbuf)
- while len(self.pixbufs_stack) > 10:
- self.pixbufs_stack.remove(self.pixbufs_stack[0])
- self.temp_pixbuf_index = self.pixbufs_stack.index(pixbuf)
+ if self.pixbufs_stack:
+ if self.temp_pixbuf_index != self.pixbufs_stack.index(self.pixbufs_stack[-1]):
+ self.pixbufs_stack = self.pixbufs_stack[0:self.temp_pixbuf_index+1]
+ self.pixbufs_stack.append(pixbuf)
+ self.temp_pixbuf_index = self.pixbufs_stack.index(pixbuf)
+ else:
+ self.pixbufs_stack.append(pixbuf)
+ while len(self.pixbufs_stack) > 10:
+ self.pixbufs_stack.remove(self.pixbufs_stack[0])
+ self.temp_pixbuf_index = self.pixbufs_stack.index(pixbuf)
+ else:
+ self.pixbufs_stack.append(pixbuf)
+ while len(self.pixbufs_stack) > 10:
+ self.pixbufs_stack.remove(self.pixbufs_stack[0])
+ self.temp_pixbuf_index = self.pixbufs_stack.index(pixbuf)
def do_expose_event(self, event):
ctx = self.window.cairo_create()
@@ -115,6 +124,7 @@ class ImageProcessor(gtk.DrawingArea):
else:
rotacion = gtk.gdk.PIXBUF_ROTATE_CLOCKWISE
pixbuf = self.temp_pixbuf.copy().rotate_simple(rotacion)
+ self.tamanio = (int(pixbuf.get_width() * self.zoom), int(pixbuf.get_height() * self.zoom))
self.add_pixbuf_stack(pixbuf)
self.window.invalidate_rect(self.get_allocation(), True)
self.window.process_updates(True)
@@ -140,11 +150,15 @@ class ImageProcessor(gtk.DrawingArea):
def image_undo(self):
if self.pixbufs_stack and self.temp_pixbuf_index > 0:
self.temp_pixbuf_index -= 1
+ pixbuf = self.pixbufs_stack[self.temp_pixbuf_index]
+ self.tamanio = (int(pixbuf.get_width() * self.zoom), int(pixbuf.get_height() * self.zoom))
self.window.invalidate_rect(self.get_allocation(), True)
self.window.process_updates(True)
def image_redo(self):
if self.pixbufs_stack and self.temp_pixbuf_index < len(self.pixbufs_stack)-1:
self.temp_pixbuf_index += 1
+ pixbuf = self.pixbufs_stack[self.temp_pixbuf_index]
+ self.tamanio = (int(pixbuf.get_width() * self.zoom), int(pixbuf.get_height() * self.zoom))
self.window.invalidate_rect(self.get_allocation(), True)
self.window.process_updates(True)
@@ -166,16 +180,6 @@ class ImageProcessor(gtk.DrawingArea):
self.window.invalidate_rect(self.get_allocation(), True)
self.window.process_updates(True)
- def image_Offset(self,value):
- if not self.pixbufs_stack: return
- im = pixbuftoImage(self.temp_pixbuf.copy())
- w,h=im.size
- im = im.offset(w/2,h/2)
- pixbuf = imagetopixbuf(im)
- self.add_pixbuf_stack(pixbuf)
- self.window.invalidate_rect(self.get_allocation(), True)
- self.window.process_updates(True)
-
def image_Contour(self,value):
if not self.pixbufs_stack: return
im = pixbuftoImage(self.temp_pixbuf.copy())
@@ -230,7 +234,8 @@ class ImageProcessor(gtk.DrawingArea):
self.window.invalidate_rect(self.get_allocation(), True)
self.window.process_updates(True)
- def guardar_archivo(self):
- if not self.pixbufs_stack: return
- self.pixbufs_stack[self.temp_pixbuf_index].save("prueba", "png", {"quality":"100"})
+ def guardar_archivo(self, path):
+ if not self.pixbufs_stack or not path: return
+ path = "%s%s" % (path, ".png")
+ self.pixbufs_stack[self.temp_pixbuf_index].save(path, "png")
diff --git a/icons/JAMediaImagenes.png b/icons/JAMediaImagenes.png
new file mode 100644
index 0000000..cc8097e
--- /dev/null
+++ b/icons/JAMediaImagenes.png
Binary files differ
diff --git a/icons/acercar.png b/icons/acercar.png
new file mode 100644
index 0000000..ed51480
--- /dev/null
+++ b/icons/acercar.png
Binary files differ
diff --git a/icons/alejar.png b/icons/alejar.png
new file mode 100644
index 0000000..8045380
--- /dev/null
+++ b/icons/alejar.png
Binary files differ
diff --git a/icons/ambross.png b/icons/ambross.png
new file mode 100644
index 0000000..83399b9
--- /dev/null
+++ b/icons/ambross.png
Binary files differ
diff --git a/icons/blur.png b/icons/blur.png
index 8333c89..697cddf 100644
--- a/icons/blur.png
+++ b/icons/blur.png
Binary files differ
diff --git a/icons/descargas.png b/icons/descargas.png
new file mode 100644
index 0000000..9e27d68
--- /dev/null
+++ b/icons/descargas.png
Binary files differ
diff --git a/icons/deshacer.png b/icons/deshacer.png
new file mode 100644
index 0000000..c6a281a
--- /dev/null
+++ b/icons/deshacer.png
Binary files differ
diff --git a/icons/embross.png b/icons/embross.png
deleted file mode 100644
index f0255c9..0000000
--- a/icons/embross.png
+++ /dev/null
Binary files differ
diff --git a/icons/escalaoriginal.png b/icons/escalaoriginal.png
new file mode 100644
index 0000000..99ad070
--- /dev/null
+++ b/icons/escalaoriginal.png
Binary files differ
diff --git a/icons/finedges.png b/icons/finedges.png
index a660e7a..e3df5f9 100644
--- a/icons/finedges.png
+++ b/icons/finedges.png
Binary files differ
diff --git a/icons/grey.png b/icons/grey.png
index 7a99288..f1164d9 100644
--- a/icons/grey.png
+++ b/icons/grey.png
Binary files differ
diff --git a/icons/mirror.png b/icons/mirror.png
deleted file mode 100644
index fc616a5..0000000
--- a/icons/mirror.png
+++ /dev/null
Binary files differ
diff --git a/icons/offset.png b/icons/offset.png
deleted file mode 100644
index ab3896a..0000000
--- a/icons/offset.png
+++ /dev/null
Binary files differ
diff --git a/icons/original.png b/icons/original.png
index 546bd90..9a39ea6 100644
--- a/icons/original.png
+++ b/icons/original.png
Binary files differ
diff --git a/icons/rotar.png b/icons/rotar.png
new file mode 100644
index 0000000..9fcda5f
--- /dev/null
+++ b/icons/rotar.png
Binary files differ
diff --git a/icons/rotate_anticlockwise.svg b/icons/rotate_anticlockwise.svg
deleted file mode 100644
index 55a9c61..0000000
--- a/icons/rotate_anticlockwise.svg
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- x="0px"
- y="0px"
- width="55px"
- height="55px"
- viewBox="0 0 55 55"
- enable-background="new 0 0 55 55"
- xml:space="preserve"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docname="rotate_anticlockwise.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
- id="metadata14"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
- id="defs12"><inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 27.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="55 : 27.5 : 1"
- inkscape:persp3d-origin="27.5 : 18.333333 : 1"
- id="perspective16" /></defs><sodipodi:namedview
- inkscape:window-height="976"
- inkscape:window-width="1680"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- guidetolerance="10.0"
- gridtolerance="10.0"
- objecttolerance="10.0"
- borderopacity="1.0"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- showgrid="false"
- inkscape:zoom="8.3636364"
- inkscape:cx="27.5"
- inkscape:cy="27.5"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:current-layer="svg2" />
-
-<g
- id="Undo"
- transform="matrix(0,-1,1,0,0.975043,54.158)">
- <g
- display="inline"
- id="g5"
- style="display:inline">
- <polyline
- points=" 22.903,27.523 15.091,20.935 22.903,14.344 "
- id="polyline7"
- style="fill:none;stroke:#ffffff;stroke-width:2.98670006;stroke-linecap:round;stroke-linejoin:round" />
- <path
- d="M 15.091,20.935 L 32.345,20.935 C 37.038,20.935 40.879,24.776 40.879,29.469 C 40.879,34.162 40.983652,31.904174 40.83413,38.838957"
- id="path9"
- style="fill:none;stroke:#ffffff;stroke-width:2.98670006;stroke-linecap:round"
- sodipodi:nodetypes="ccsc" />
- </g>
-</g>
-</svg> \ No newline at end of file
diff --git a/icons/rotate_clockwise.svg b/icons/rotate_clockwise.svg
deleted file mode 100644
index 474f6f0..0000000
--- a/icons/rotate_clockwise.svg
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- x="0px"
- y="0px"
- width="55px"
- height="55px"
- viewBox="0 0 55 55"
- enable-background="new 0 0 55 55"
- xml:space="preserve"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docname="rotate_clockwise.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
- id="metadata14"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
- id="defs12"><inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 27.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="55 : 27.5 : 1"
- inkscape:persp3d-origin="27.5 : 18.333333 : 1"
- id="perspective16" /></defs><sodipodi:namedview
- inkscape:window-height="976"
- inkscape:window-width="1680"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- guidetolerance="10.0"
- gridtolerance="10.0"
- objecttolerance="10.0"
- borderopacity="1.0"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- showgrid="false"
- inkscape:zoom="8.3636364"
- inkscape:cx="27.5"
- inkscape:cy="27.5"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:current-layer="svg2" />
-
-<g
- id="Undo"
- transform="matrix(0,-1,-1,0,54.158,54.158)">
- <g
- display="inline"
- id="g5"
- style="display:inline">
- <polyline
- points=" 22.903,27.523 15.091,20.935 22.903,14.344 "
- id="polyline7"
- style="fill:none;stroke:#ffffff;stroke-width:2.98670006;stroke-linecap:round;stroke-linejoin:round" />
- <path
- d="M 15.091,20.935 L 32.345,20.935 C 37.038,20.935 40.879,24.776 40.879,29.469 C 40.879,34.162 40.983652,31.904174 40.83413,38.838957"
- id="path9"
- style="fill:none;stroke:#ffffff;stroke-width:2.98670006;stroke-linecap:round"
- sodipodi:nodetypes="ccsc" />
- </g>
-</g>
-</svg> \ No newline at end of file
diff --git a/icons/sharpen.png b/icons/sharpen.png
index 2c4228f..45b1a38 100644
--- a/icons/sharpen.png
+++ b/icons/sharpen.png
Binary files differ
diff --git a/icons/solarize.png b/icons/solarize.png
index 1c67ada..a650efa 100644
--- a/icons/solarize.png
+++ b/icons/solarize.png
Binary files differ
diff --git a/toolbar.py b/toolbar.py
index e23ba0e..018e18b 100644
--- a/toolbar.py
+++ b/toolbar.py
@@ -18,7 +18,6 @@
# toolbar.py por:
# Flavio Danesse <fdanesse@gmail.com>
# CeibalJAM! - Uruguay
-# Basado en código de: Keshav Sharma <keshav7890@gmail.com> & Vaibhav Sharma
import gtk, pygtk, gobject, os
from gettext import gettext as _
@@ -42,89 +41,141 @@ class ViewToolbar(gtk.Toolbar):
def __init__(self):
gtk.Toolbar.__init__(self)
- open_button = IPButtonStock(gtk.STOCK_OPEN)
+ separator = gtk.SeparatorToolItem()
+ separator.props.draw = True
+ separator.set_size_request(0, -1)
+ separator.set_expand(False)
+ self.insert(separator, -1)
+
+ open_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'descargas.png'), 32, 32)
+ pixbuf = pixbuf.rotate_simple(gtk.gdk.PIXBUF_ROTATE_COUNTERCLOCKWISE).rotate_simple(gtk.gdk.PIXBUF_ROTATE_COUNTERCLOCKWISE)
+ imagen.set_from_pixbuf(pixbuf)
+ open_button.set_icon_widget(imagen)
+ imagen.show()
open_button.connect('clicked', self.abrir_archivo)
self.insert(open_button, -1)
open_button.show()
- save_button = IPButtonStock(gtk.STOCK_SAVE)
+ save_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'descargas.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ save_button.set_icon_widget(imagen)
+ imagen.show()
save_button.connect('clicked', self.guardar_archivo)
self.insert(save_button, -1)
save_button.show()
- save_as_button = IPButtonStock(gtk.STOCK_SAVE_AS)
- #self._zoom_out_button.connect('clicked', self.zoom_out_cb)
- self.insert(save_as_button, -1)
- save_as_button.show()
-
separator = gtk.SeparatorToolItem()
- separator.props.draw = False
+ separator.props.draw = True
separator.set_size_request(0, -1)
- separator.set_expand(True)
+ separator.set_expand(False)
self.insert(separator, -1)
- zoom_out_button = IPButtonStock(gtk.STOCK_ZOOM_OUT)
+ zoom_out_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'alejar.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ zoom_out_button.set_icon_widget(imagen)
+ imagen.show()
zoom_out_button.connect('clicked', self.zoom_out_cb)
self.insert(zoom_out_button, -1)
zoom_out_button.show()
- zoom_in_button = IPButtonStock(gtk.STOCK_ZOOM_IN)
+ zoom_in_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'acercar.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ zoom_in_button.set_icon_widget(imagen)
+ imagen.show()
zoom_in_button.connect('clicked', self.zoom_in_cb)
self.insert(zoom_in_button, -1)
zoom_in_button.show()
- zoom_tofit_button = IPButtonStock(gtk.STOCK_ZOOM_FIT)
+ zoom_tofit_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'escalaoriginal.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ zoom_tofit_button.set_icon_widget(imagen)
+ imagen.show()
zoom_tofit_button.connect('clicked', self.zoom_to_fit_cb)
self.insert(zoom_tofit_button, -1)
zoom_tofit_button.show()
separator = gtk.SeparatorToolItem()
- separator.props.draw = False
+ separator.props.draw = True
separator.set_size_request(0, -1)
- separator.set_expand(True)
+ separator.set_expand(False)
self.insert(separator, -1)
- rotate_anticlockwise_button = IPButton('rotate_anticlockwise.svg')
+ rotate_anticlockwise_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'rotar.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ rotate_anticlockwise_button.set_icon_widget(imagen)
+ imagen.show()
rotate_anticlockwise_button.connect('clicked', self.rotate_anticlockwise_cb)
self.insert(rotate_anticlockwise_button, -1)
rotate_anticlockwise_button.show()
- rotate_clockwise_button = IPButton('rotate_clockwise.svg')
+ rotate_clockwise_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'rotar.png'), 32, 32).flip(True)
+ imagen.set_from_pixbuf(pixbuf)
+ rotate_clockwise_button.set_icon_widget(imagen)
+ imagen.show()
rotate_clockwise_button.connect('clicked', self.rotate_clockwise_cb)
self.insert(rotate_clockwise_button, -1)
rotate_clockwise_button.show()
separator = gtk.SeparatorToolItem()
- separator.props.draw = False
+ separator.props.draw = True
separator.set_size_request(0, -1)
- separator.set_expand(True)
+ separator.set_expand(False)
self.insert(separator, -1)
- undo_button = IPButtonStock(gtk.STOCK_UNDO)
+ undo_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'deshacer.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ undo_button.set_icon_widget(imagen)
+ imagen.show()
undo_button.connect('clicked', self.undo_cb)
self.insert(undo_button, -1)
undo_button.show()
- redo_button = IPButtonStock(gtk.STOCK_REDO)
+ redo_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'deshacer.png'), 32, 32).flip(True)
+ imagen.set_from_pixbuf(pixbuf)
+ redo_button.set_icon_widget(imagen)
+ imagen.show()
redo_button.connect('clicked', self.redo_cb)
self.insert(redo_button, -1)
redo_button.show()
separator = gtk.SeparatorToolItem()
- separator.props.draw = False
+ separator.props.draw = True
separator.set_size_request(0, -1)
- separator.set_expand(True)
+ separator.set_expand(False)
self.insert(separator, -1)
- cam_button = IPButton('foto.png')
+ cam_button = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'foto.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ cam_button.set_icon_widget(imagen)
+ imagen.show()
cam_button.connect('clicked', self.cam_cb)
self.insert(cam_button, -1)
cam_button.show()
separator = gtk.SeparatorToolItem()
- separator.props.draw = False
+ separator.props.draw = True
separator.set_size_request(0, -1)
- separator.set_expand(True)
+ separator.set_expand(False)
self.insert(separator, -1)
def abrir_archivo(self, button):
@@ -153,7 +204,6 @@ class EditToolbar(gtk.Toolbar):
__gsignals__ = {'grey': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,([])),
'blur': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
'transpose': (gobject.SIGNAL_RUN_FIRST,gobject.TYPE_NONE, ([])),
- 'offset': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
'contour': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
'text': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,([])),
'finedges': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,([])),
@@ -168,55 +218,108 @@ class EditToolbar(gtk.Toolbar):
def __init__(self):
gtk.Toolbar.__init__(self)
- self.grey = IPButton('grey.png')
- self.grey.connect('clicked', self.grey_cb)
- self.insert(self.grey, -1)
- self.grey.show()
-
- self.blur = IPButton('blur.png')
- self.blur.connect('clicked', self.blur_cb)
- self.insert(self.blur, -1)
- self.blur.show()
-
- self.transpose = IPButton('mirror.png')
- self.transpose.connect('clicked', self.transpose_cb)
- self.insert(self.transpose, -1)
- self.transpose.show()
+
+ separator = gtk.SeparatorToolItem()
+ separator.props.draw = True
+ separator.set_size_request(0, -1)
+ separator.set_expand(False)
+ self.insert(separator, -1)
+
+ grey = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'grey.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ grey.set_icon_widget(imagen)
+ imagen.show()
+ grey.connect('clicked', self.grey_cb)
+ self.insert(grey, -1)
+ grey.show()
- self.offset = IPButton('offset.png')
- self.offset.connect('clicked', self.offset_cb)
- self.insert(self.offset, -1)
- self.offset.show()
+ blur = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'blur.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ blur.set_icon_widget(imagen)
+ imagen.show()
+ blur.connect('clicked', self.blur_cb)
+ self.insert(blur, -1)
+ blur.show()
- self.contour = IPButton('contour.png')
- self.contour.connect('clicked', self.contour_cb)
- self.insert(self.contour, -1)
- self.contour.show()
+ button_espejar = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'original.png'), 32, 32).flip(True)
+ imagen.set_from_pixbuf(pixbuf)
+ button_espejar.set_icon_widget(imagen)
+ imagen.show()
+ button_espejar.connect('clicked', self.transpose_cb)
+ self.insert(button_espejar, -1)
+ button_espejar.show()
+
+ contour = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'contour.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ contour.set_icon_widget(imagen)
+ imagen.show()
+ contour.connect('clicked', self.contour_cb)
+ self.insert(contour, -1)
+ contour.show()
- self.finedges = IPButton('finedges.png')
- self.finedges.connect('clicked', self.finedges_cb)
- self.insert(self.finedges, -1)
- self.finedges.show()
+ finedges = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'finedges.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ finedges.set_icon_widget(imagen)
+ imagen.show()
+ finedges.connect('clicked', self.finedges_cb)
+ self.insert(finedges, -1)
+ finedges.show()
- self.solarize = IPButton('solarize.png')
- self.solarize.connect('clicked', self.solarize_cb)
- self.insert(self.solarize, -1)
- self.solarize.show()
+ solarize = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'solarize.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ solarize.set_icon_widget(imagen)
+ imagen.show()
+ solarize.connect('clicked', self.solarize_cb)
+ self.insert(solarize, -1)
+ solarize.show()
- self.invert = IPButton('invert.png')
- self.invert.connect('clicked', self.invert_cb)
- self.insert(self.invert, -1)
- self.invert.show()
+ invert = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'invert.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ invert.set_icon_widget(imagen)
+ imagen.show()
+ invert.connect('clicked', self.invert_cb)
+ self.insert(invert, -1)
+ invert.show()
- self.ambross = IPButton('embross.png')
- self.ambross.connect('clicked', self.ambross_cb)
- self.insert(self.ambross, -1)
- self.ambross.show()
+ ambross = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'ambross.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ ambross.set_icon_widget(imagen)
+ imagen.show()
+ ambross.connect('clicked', self.ambross_cb)
+ self.insert(ambross, -1)
+ ambross.show()
- self.sharpen = IPButton('sharpen.png')
- self.sharpen.connect('clicked', self.sharpen_cb)
- self.insert(self.sharpen, -1)
- self.sharpen.show()
+ sharpen = gtk.ToolButton()
+ imagen = gtk.Image()
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,'sharpen.png'), 32, 32)
+ imagen.set_from_pixbuf(pixbuf)
+ sharpen.set_icon_widget(imagen)
+ imagen.show()
+ sharpen.connect('clicked', self.sharpen_cb)
+ self.insert(sharpen, -1)
+ sharpen.show()
+
+ separator = gtk.SeparatorToolItem()
+ separator.props.draw = True
+ separator.set_size_request(0, -1)
+ separator.set_expand(False)
+ self.insert(separator, -1)
def grey_cb(self, button):
self.emit('grey')
@@ -224,8 +327,6 @@ class EditToolbar(gtk.Toolbar):
self.emit('blur')
def transpose_cb(self, button):
self.emit('transpose')
- def offset_cb(self, button):
- self.emit('offset')
def contour_cb(self, button):
self.emit('contour')
def finedges_cb(self, button):
@@ -239,9 +340,10 @@ class EditToolbar(gtk.Toolbar):
def sharpen_cb(self, button):
self.emit('sharpen')
-class IPButton(gtk.ToggleToolButton):
+'''
+class IPButton(gtk.ToolButton):
def __init__(self, archivo):
- gtk.ToggleToolButton.__init__(self)
+ gtk.ToolButton.__init__(self)
imagen = gtk.Image()
pixbuf= gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(ICONOS,archivo), 32, 32)
imagen.set_from_pixbuf(pixbuf)
@@ -249,12 +351,12 @@ class IPButton(gtk.ToggleToolButton):
imagen.show()
self.show()
-class IPButtonStock(gtk.ToggleToolButton):
+class IPButtonStock(gtk.ToolButton):
def __init__(self, nombre):
- gtk.ToggleToolButton.__init__(self)
+ gtk.ToolButton.__init__(self)
imagen = gtk.Image()
imagen.set_from_stock(nombre, gtk.ICON_SIZE_BUTTON)
self.set_icon_widget(imagen)
imagen.show()
- self.show()
+ self.show()'''