Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManusheel <manusheel@localhost.localdomain>2007-07-24 15:10:45 (GMT)
committer Manusheel <manusheel@localhost.localdomain>2007-07-24 15:10:45 (GMT)
commit90bf7269de06b9b1398de7eb387d52cffda72694 (patch)
tree77ea1758d6ca176d3c4c97275efdb9a4539c2e59
parent9c0b7121410f4d013d2cc67e5b7490c593abdb74 (diff)
Bugs fixed, new functions added, existing functions changed
-rw-r--r--Area.py653
-rw-r--r--Botao.py105
-rw-r--r--COPYING343
-rw-r--r--Cursores.py29
-rw-r--r--Cursors.py28
-rw-r--r--Desenho.py672
-rw-r--r--Main.py20
-rwxr-xr-xNEWS23
-rw-r--r--Oficina.py254
-rw-r--r--OficinaActivity.py70
-rw-r--r--Rede.py16
-rw-r--r--activity/.svn/entries6
-rw-r--r--activity/activity.info2
-rw-r--r--activity/activity.info~7
-rw-r--r--eggfill.c193
-rw-r--r--eggfill.h63
-rwxr-xr-xfill.sobin0 -> 12128 bytes
-rw-r--r--fill_src/.svn/all-wcprops47
-rw-r--r--fill_src/.svn/entries112
-rw-r--r--fill_src/.svn/format1
-rw-r--r--fill_src/.svn/text-base/Makefile.svn-base55
-rw-r--r--fill_src/.svn/text-base/eggfill.c.svn-base193
-rw-r--r--fill_src/.svn/text-base/eggfill.h.svn-base63
-rw-r--r--fill_src/.svn/text-base/fill.c.svn-base79
-rw-r--r--fill_src/.svn/text-base/fill.defs.svn-base22
-rw-r--r--fill_src/.svn/text-base/fill.override.svn-base15
-rw-r--r--fill_src/.svn/text-base/fillmodule.c.svn-base65
-rw-r--r--fill_src/Makefile55
-rw-r--r--fill_src/eggfill.c193
-rw-r--r--fill_src/eggfill.h63
-rw-r--r--fill_src/fill.c79
-rw-r--r--fill_src/fill.defs22
-rw-r--r--fill_src/fill.override15
-rw-r--r--fill_src/fillmodule.c65
-rw-r--r--icons/.svn/all-wcprops14
-rw-r--r--icons/.svn/entries174
-rw-r--r--icons/.svn/text-base/brush_cursor.svg.svn-base67
-rw-r--r--icons/.svn/text-base/bucket_cursor.svg.svn-base67
-rw-r--r--icons/brush_cursor.svg67
-rw-r--r--icons/bucket_cursor.svg67
-rw-r--r--images/.svn/all-wcprops184
-rw-r--r--images/.svn/entries406
-rw-r--r--images/.svn/prop-base/arrow.png.svn-base (renamed from images/.svn/prop-base/Thumbs.db.svn-base)0
-rw-r--r--images/.svn/prop-base/brush.png.svn-base (renamed from images/.svn/prop-base/abrir.png.svn-base)0
-rw-r--r--images/.svn/prop-base/bucket.png.svn-base (renamed from images/.svn/prop-base/amarelo.png.svn-base)0
-rw-r--r--images/.svn/prop-base/ellipse.png.svn-base (renamed from images/.svn/prop-base/azul.png.svn-base)0
-rw-r--r--images/.svn/prop-base/eraser.png.svn-base (renamed from images/.svn/prop-base/balde.png.svn-base)0
-rw-r--r--images/.svn/prop-base/heart.png.svn-base (renamed from images/.svn/prop-base/borracha.png.svn-base)0
-rw-r--r--images/.svn/prop-base/line.png.svn-base (renamed from images/.svn/prop-base/borracha_cursor.png.svn-base)0
-rw-r--r--images/.svn/prop-base/linha.png.svn-base5
-rw-r--r--images/.svn/prop-base/linha_cursor.png.svn-base5
-rw-r--r--images/.svn/prop-base/marquee-rectangular.png.svn-base (renamed from images/.svn/prop-base/branco.png.svn-base)0
-rw-r--r--images/.svn/prop-base/parallelogram.png.svn-base (renamed from images/.svn/prop-base/circulo.png.svn-base)0
-rw-r--r--images/.svn/prop-base/pencil.png.svn-base (renamed from images/.svn/prop-base/circulo_cursor.png.svn-base)0
-rw-r--r--images/.svn/prop-base/poligono.png.svn-base5
-rw-r--r--images/.svn/prop-base/poligono_cursor.png.svn-base5
-rw-r--r--images/.svn/prop-base/polygon.png.svn-base (renamed from images/.svn/prop-base/corlinha.png.svn-base)0
-rw-r--r--images/.svn/prop-base/preto.png.svn-base5
-rw-r--r--images/.svn/prop-base/quadrado.png.svn-base5
-rw-r--r--images/.svn/prop-base/quadrado_cursor.png.svn-base5
-rw-r--r--images/.svn/prop-base/rectangle.png.svn-base (renamed from images/.svn/prop-base/lapis.png.svn-base)0
-rw-r--r--images/.svn/prop-base/roxo.png.svn-base5
-rw-r--r--images/.svn/prop-base/salvar.png.svn-base5
-rw-r--r--images/.svn/prop-base/selecao.png.svn-base5
-rw-r--r--images/.svn/prop-base/selecao_cursor.png.svn-base5
-rw-r--r--images/.svn/prop-base/star.png.svn-base (renamed from images/.svn/prop-base/lapis_cursor.png.svn-base)0
-rw-r--r--images/.svn/prop-base/text.png.svn-base (renamed from images/.svn/prop-base/laranja.png.svn-base)0
-rw-r--r--images/.svn/prop-base/trapezoid.png.svn-base (renamed from images/.svn/prop-base/letra.png.svn-base)0
-rw-r--r--images/.svn/prop-base/trapezoid_cursor.png.svn-base5
-rw-r--r--images/.svn/prop-base/triangle.png.svn-base (renamed from images/.svn/prop-base/letra_cursor.png.svn-base)0
-rw-r--r--images/.svn/prop-base/triangle_cursor.png.svn-base5
-rw-r--r--images/.svn/prop-base/vassoura.png.svn-base5
-rw-r--r--images/.svn/prop-base/verde.png.svn-base5
-rw-r--r--images/.svn/prop-base/vermelho.png.svn-base5
-rw-r--r--images/.svn/text-base/Thumbs.db.svn-basebin47616 -> 0 bytes
-rw-r--r--images/.svn/text-base/abrir.png.svn-basebin3157 -> 0 bytes
-rw-r--r--images/.svn/text-base/amarelo.png.svn-basebin539 -> 0 bytes
-rw-r--r--images/.svn/text-base/arrow.png.svn-basebin0 -> 541 bytes
-rw-r--r--images/.svn/text-base/azul.png.svn-basebin667 -> 0 bytes
-rw-r--r--images/.svn/text-base/balde.png.svn-basebin1082 -> 0 bytes
-rw-r--r--images/.svn/text-base/borracha.png.svn-basebin1384 -> 0 bytes
-rw-r--r--images/.svn/text-base/branco.png.svn-basebin617 -> 0 bytes
-rw-r--r--images/.svn/text-base/brush.png.svn-basebin0 -> 649 bytes
-rw-r--r--images/.svn/text-base/bucket.png.svn-basebin0 -> 768 bytes
-rw-r--r--images/.svn/text-base/circulo.png.svn-basebin1134 -> 0 bytes
-rw-r--r--images/.svn/text-base/corlinha.png.svn-basebin669 -> 0 bytes
-rw-r--r--images/.svn/text-base/ellipse.png.svn-base (renamed from images/.svn/text-base/circulo_cursor.png.svn-base)bin1289 -> 1289 bytes
-rw-r--r--images/.svn/text-base/eraser.png.svn-base (renamed from images/.svn/text-base/borracha_cursor.png.svn-base)bin1698 -> 1698 bytes
-rw-r--r--images/.svn/text-base/heart.png.svn-basebin0 -> 713 bytes
-rw-r--r--images/.svn/text-base/lapis.png.svn-basebin1994 -> 0 bytes
-rw-r--r--images/.svn/text-base/laranja.png.svn-basebin3089 -> 0 bytes
-rw-r--r--images/.svn/text-base/letra.png.svn-basebin1465 -> 0 bytes
-rw-r--r--images/.svn/text-base/line.png.svn-base (renamed from images/.svn/text-base/linha_cursor.png.svn-base)bin1548 -> 1548 bytes
-rw-r--r--images/.svn/text-base/linha.png.svn-basebin1390 -> 0 bytes
-rw-r--r--images/.svn/text-base/marquee-rectangular.png.svn-base (renamed from images/.svn/text-base/selecao_cursor.png.svn-base)bin3173 -> 3173 bytes
-rw-r--r--images/.svn/text-base/parallelogram.png.svn-basebin0 -> 626 bytes
-rw-r--r--images/.svn/text-base/pencil.png.svn-base (renamed from images/.svn/text-base/lapis_cursor.png.svn-base)bin1549 -> 1549 bytes
-rw-r--r--images/.svn/text-base/poligono.png.svn-basebin4467 -> 0 bytes
-rw-r--r--images/.svn/text-base/polygon.png.svn-base (renamed from images/.svn/text-base/poligono_cursor.png.svn-base)bin4324 -> 4324 bytes
-rw-r--r--images/.svn/text-base/preto.png.svn-basebin649 -> 0 bytes
-rw-r--r--images/.svn/text-base/quadrado.png.svn-basebin1167 -> 0 bytes
-rw-r--r--images/.svn/text-base/rectangle.png.svn-base (renamed from images/.svn/text-base/quadrado_cursor.png.svn-base)bin1276 -> 1276 bytes
-rw-r--r--images/.svn/text-base/roxo.png.svn-basebin3121 -> 0 bytes
-rw-r--r--images/.svn/text-base/salvar.png.svn-basebin722 -> 0 bytes
-rw-r--r--images/.svn/text-base/selecao.png.svn-basebin3098 -> 0 bytes
-rw-r--r--images/.svn/text-base/star.png.svn-basebin0 -> 766 bytes
-rw-r--r--images/.svn/text-base/text.png.svn-base (renamed from images/.svn/text-base/letra_cursor.png.svn-base)bin1264 -> 1264 bytes
-rw-r--r--images/.svn/text-base/trapezoid.png.svn-basebin0 -> 504 bytes
-rw-r--r--images/.svn/text-base/trapezoid_cursor.png.svn-basebin770 -> 0 bytes
-rw-r--r--images/.svn/text-base/triangle.png.svn-basebin0 -> 632 bytes
-rw-r--r--images/.svn/text-base/triangle_cursor.png.svn-basebin879 -> 0 bytes
-rw-r--r--images/.svn/text-base/vassoura.png.svn-basebin2037 -> 0 bytes
-rw-r--r--images/.svn/text-base/verde.png.svn-basebin723 -> 0 bytes
-rw-r--r--images/.svn/text-base/vermelho.png.svn-basebin781 -> 0 bytes
-rw-r--r--images/Thumbs.dbbin47616 -> 0 bytes
-rw-r--r--images/abrir.pngbin3157 -> 0 bytes
-rw-r--r--images/amarelo.pngbin539 -> 0 bytes
-rw-r--r--images/arrow.pngbin0 -> 541 bytes
-rw-r--r--images/azul.pngbin667 -> 0 bytes
-rw-r--r--images/balde.pngbin1082 -> 0 bytes
-rw-r--r--images/borracha.pngbin1384 -> 0 bytes
-rw-r--r--images/branco.pngbin617 -> 0 bytes
-rw-r--r--images/brush.pngbin0 -> 649 bytes
-rw-r--r--images/bucket.pngbin0 -> 768 bytes
-rw-r--r--images/circulo.pngbin1134 -> 0 bytes
-rw-r--r--images/corlinha.pngbin669 -> 0 bytes
-rw-r--r--images/ellipse.png (renamed from images/circulo_cursor.png)bin1289 -> 1289 bytes
-rw-r--r--images/eraser.png (renamed from images/borracha_cursor.png)bin1698 -> 1698 bytes
-rw-r--r--images/heart.pngbin0 -> 713 bytes
-rw-r--r--images/lapis.pngbin1994 -> 0 bytes
-rw-r--r--images/laranja.pngbin3089 -> 0 bytes
-rw-r--r--images/letra.pngbin1465 -> 0 bytes
-rw-r--r--images/line.png (renamed from images/linha_cursor.png)bin1548 -> 1548 bytes
-rw-r--r--images/linha.pngbin1390 -> 0 bytes
-rw-r--r--images/marquee-rectangular.png (renamed from images/selecao_cursor.png)bin3173 -> 3173 bytes
-rw-r--r--images/parallelogram.pngbin0 -> 626 bytes
-rw-r--r--images/pencil.png (renamed from images/lapis_cursor.png)bin1549 -> 1549 bytes
-rw-r--r--images/poligono.pngbin4467 -> 0 bytes
-rw-r--r--images/polygon.png (renamed from images/poligono_cursor.png)bin4324 -> 4324 bytes
-rw-r--r--images/preto.pngbin649 -> 0 bytes
-rw-r--r--images/quadrado.pngbin1167 -> 0 bytes
-rw-r--r--images/rectangle.png (renamed from images/quadrado_cursor.png)bin1276 -> 1276 bytes
-rw-r--r--images/roxo.pngbin3121 -> 0 bytes
-rw-r--r--images/salvar.pngbin722 -> 0 bytes
-rw-r--r--images/selecao.pngbin3098 -> 0 bytes
-rw-r--r--images/star.pngbin0 -> 766 bytes
-rw-r--r--images/text.png (renamed from images/letra_cursor.png)bin1264 -> 1264 bytes
-rw-r--r--images/trapezoid.pngbin0 -> 504 bytes
-rw-r--r--images/trapezoid_cursor.pngbin770 -> 0 bytes
-rw-r--r--images/triangle.pngbin0 -> 632 bytes
-rw-r--r--images/triangle_cursor.pngbin879 -> 0 bytes
-rw-r--r--images/vassoura.pngbin2037 -> 0 bytes
-rw-r--r--images/verde.pngbin723 -> 0 bytes
-rw-r--r--images/vermelho.pngbin781 -> 0 bytes
-rw-r--r--locale/.svn/entries2
-rw-r--r--locale/de/.svn/entries2
-rw-r--r--locale/de/LC_MESSAGES/.svn/entries4
-rw-r--r--locale/de/LC_MESSAGES/Oficina.activity.mobin2036 -> 0 bytes
-rw-r--r--locale/de/LC_MESSAGES/Oficina.mobin2036 -> 0 bytes
-rw-r--r--locale/es/.svn/entries2
-rw-r--r--locale/es/LC_MESSAGES/.svn/entries4
-rw-r--r--locale/es/LC_MESSAGES/Oficina.activity.mobin2057 -> 0 bytes
-rw-r--r--locale/es/LC_MESSAGES/Oficina.mobin2057 -> 0 bytes
-rw-r--r--locale/fr/.svn/entries2
-rw-r--r--locale/fr/LC_MESSAGES/.svn/entries4
-rw-r--r--locale/fr/LC_MESSAGES/Oficina.activity.mobin2039 -> 0 bytes
-rw-r--r--locale/fr/LC_MESSAGES/Oficina.mobin2039 -> 0 bytes
-rw-r--r--locale/ko_KO/.svn/entries2
-rw-r--r--locale/ko_KO/LC_MESSAGES/.svn/entries4
-rw-r--r--locale/ko_KO/LC_MESSAGES/Oficina.activity.mobin1890 -> 0 bytes
-rw-r--r--locale/ko_KO/LC_MESSAGES/Oficina.mobin1890 -> 0 bytes
-rw-r--r--locale/pt_BR/.svn/entries2
-rw-r--r--locale/pt_BR/LC_MESSAGES/.svn/entries4
-rw-r--r--locale/pt_BR/LC_MESSAGES/Oficina.activity.mobin2050 -> 0 bytes
-rw-r--r--locale/pt_BR/LC_MESSAGES/Oficina.mobin2050 -> 0 bytes
-rw-r--r--po/.svn/all-wcprops12
-rw-r--r--po/.svn/entries48
-rw-r--r--po/.svn/text-base/de.po.svn-base35
-rw-r--r--po/.svn/text-base/es.po.svn-base35
-rw-r--r--po/.svn/text-base/fr.po.svn-base35
-rw-r--r--po/.svn/text-base/ko_KO.po.svn-base38
-rw-r--r--po/.svn/text-base/pt_BR.po.svn-base35
-rw-r--r--po/de.po35
-rw-r--r--po/es.po35
-rw-r--r--po/fr.po35
-rw-r--r--po/ko_KO.po38
-rwxr-xr-xpo/pt_BR.po35
-rwxr-xr-xsetup.py2
-rw-r--r--toolbox.py720
189 files changed, 3692 insertions, 2232 deletions
diff --git a/Area.py b/Area.py
index 2d858b3..62be2c1 100644
--- a/Area.py
+++ b/Area.py
@@ -1,18 +1,73 @@
# -*- coding: utf-8 -*-
-import pygtk
-pygtk.require('2.0')
-import gtk
-import sys, gobject, socket
-from gtk import gdk
-import math
-import pango
-
-from Desenho import Desenho
-
-WIDTH = 800
-HEIGHT = 600
-
-class Area(gtk.DrawingArea):
+"""
+Area.py
+
+Tools and events manipulation
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+Colaborators:
+Bruno Gola (brunogola@gmail.com)
+
+Group Manager:
+Irene Karaguilla Ficheman (irene@lsi.usp.br)
+
+Cientific Coordinator:
+Roseli de Deus Lopes (roseli@lsi.usp.br)
+
+"""
+
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+import sys, gobject, socket
+from gtk import gdk
+import math
+import pango
+from fill import *
+
+from Desenho import Desenho
+
+WIDTH = 800
+HEIGHT = 600
+
+class Area(gtk.DrawingArea):
def __init__(self, janela):
""" Initialize the object from class Area which is derived from gtk.DrawingArea.
@@ -20,76 +75,88 @@ class Area(gtk.DrawingArea):
self -- the Area object (GtkDrawingArea)
janela -- the parent window
- """
- gtk.DrawingArea.__init__(self)
- self.set_size_request(WIDTH, HEIGHT)
- self.set_events(gtk.gdk.POINTER_MOTION_MASK |
- gtk.gdk.POINTER_MOTION_HINT_MASK |
- gtk.gdk.BUTTON_PRESS_MASK |
- gtk.gdk.BUTTON_RELEASE_MASK|
- gtk.gdk.EXPOSURE_MASK)
-
- self.connect("expose_event",self.expose)
- self.connect("motion_notify_event", self.mousemove)
- self.connect("button_press_event", self.mousedown)
- self.connect("button_release_event", self.mouseup)
-
- self.set_extension_events(gtk.gdk.EXTENSION_EVENTS_CURSOR)
-
- self.tool = None
- self.desenha = False
- self.move = False
- self.connect("configure_event", self.configure_event)
- self.oldx = 0
- self.oldy = 0
- self.newx = 0
- self.newy = 0
- self.newx_ = 0
+ """
+ gtk.DrawingArea.__init__(self)
+ self.set_size_request(WIDTH, HEIGHT)
+ self.set_events(gtk.gdk.POINTER_MOTION_MASK |
+ gtk.gdk.POINTER_MOTION_HINT_MASK |
+ gtk.gdk.BUTTON_PRESS_MASK |
+ gtk.gdk.BUTTON_RELEASE_MASK|
+ gtk.gdk.EXPOSURE_MASK)
+
+ self.connect("expose_event",self.expose)
+ self.connect("motion_notify_event", self.mousemove)
+ self.connect("button_press_event", self.mousedown)
+ self.connect("button_release_event", self.mouseup)
+
+ self.set_extension_events(gtk.gdk.EXTENSION_EVENTS_CURSOR)
+
+ self.tool = None
+ self.desenha = False
+ self.selmove = False
+ self.sel_get_out = False
+ self.connect("configure_event", self.configure_event)
+ self.oldx = 0
+ self.oldy = 0
+ self.newx = 0
+ self.newy = 0
+ self.newx_ = 0
self.newy_ = 0
- self.color_dec = 0
+ self.color_dec = 0
self.polygon_start = True
- self.busy = False
- self.gc = None
- self.gc_line = None
+ self.gc = None
+ self.gc_line = None
self.gc_eraser = None
- self.gc_brush = None
+ self.gc_brush = None
self.gc_selection = None
- self.pixmap = None
- self.pixmap_temp = None
- self.desenho = []
- self.textos = []
- self.color_ = 0
- self.color_line = 0
- self.estadoTexto = 0
- self.janela = janela
+ self.pixmap = None
+ self.pixmap_temp = None
+ self.pixmap_sel = None
+ self.desenho = []
+ self.textos = []
+ #self.color_ = 0
+ #self.color_line = 0
+ self.estadoTexto = 0
+ self.janela = janela
self.d = Desenho(self)
self.line_size = 2
self.brush_shape = 'circle'
-
- colormap = self.get_colormap()
-
- self.cores = [
- colormap.alloc_color('#000000', True, True), # black
- colormap.alloc_color('#ee33ee', True, True), # purple
- colormap.alloc_color('#f4ee56', True, True), # yellow
- colormap.alloc_color('#45a5dc', True, True), # blue
- colormap.alloc_color('#44aa44', True, True), # green
- colormap.alloc_color('#dd5555', True, True), # red
- colormap.alloc_color('#ffaa11', True, True), # orange
- colormap.alloc_color('#ffffff', True, True), # white
- colormap.alloc_color('#00aa00', True, True) # green - selection
- ]
- self.font = pango.FontDescription('Sans 9')
- #self.mensagem = Mensagens(self)
+ self.eraser_shape = 'circle'
+
+ #This list must not be used. Using gdk.Color objects.
+ '''
+ colormap = self.get_colormap()
+
+ self.cores = [
+ colormap.alloc_color('#ffffff', True, True), # white
+ colormap.alloc_color('#800000', True, True), # maroon
+ colormap.alloc_color('#ff0000', True, True), # red
+ colormap.alloc_color('#808000', True, True), # olive
+ colormap.alloc_color('#ffff00', True, True), # yellow
+ colormap.alloc_color('#008000', True, True), # green
+ colormap.alloc_color('#00ff00', True, True), # lime
+ colormap.alloc_color('#008080', True, True), # teal
+ colormap.alloc_color('#00ffff', True, True), # aqua
+ colormap.alloc_color('#000080', True, True), # navy
+ colormap.alloc_color('#0000ff', True, True), # blue
+ colormap.alloc_color('#800080', True, True), # purple
+ colormap.alloc_color('#ff00ff', True, True), # fuchsia
+ colormap.alloc_color('#000000', True, True) # black - selection
+ ]
+ '''
+
+ self.font = pango.FontDescription('Sans 9')
+ #self.mensagem = Mensagens(self)
#self.mensagem.criaConexao()
#start of UNDO and REDO
self.first_undo = True
+ self.first_redo = True
self.undo_times = 0
self.redo_times = 0
- self.undo_list=[]#pixmaps list to Undo func
-
- # Create a new backing pixmap of the appropriate size
+ self.undo_list=[]#pixmaps list to Undo func
+
+ # Create a new backing pixmap of the appropriate size
def configure_event(self, widget, event):
"""Configure the Area object.
@@ -98,31 +165,38 @@ class Area(gtk.DrawingArea):
widget -- the Area object (GtkDrawingArea)
event -- GdkEvent
- """
- win = widget.window
- width = win.get_geometry()[2]
- height = win.get_geometry()[3]
-
- self.pixmap = gtk.gdk.Pixmap(win, width, height, -1)
- self.pixmap.draw_rectangle(widget.get_style().white_gc, True, 0, 0, width, height)
- self.pixmap_temp = gtk.gdk.Pixmap(win, width, height, -1)
- self.pixmap_temp.draw_rectangle(widget.get_style().white_gc, True, 0, 0, width, height)
-
- self.gc = widget.window.new_gc()
- self.gc_eraser = widget.window.new_gc()
- self.gc_eraser.set_foreground(self.cores[7])
+ """
+ win = widget.window
+ width = win.get_geometry()[2]
+ height = win.get_geometry()[3]
+
+ self.pixmap = gtk.gdk.Pixmap(win, width, height, -1)
+ self.pixmap.draw_rectangle(widget.get_style().white_gc, True, 0, 0, width, height)
+
+ self.pixmap_temp = gtk.gdk.Pixmap(win, width, height, -1)
+ self.pixmap_temp.draw_rectangle(widget.get_style().white_gc, True, 0, 0, width, height)
+
+ self.pixmap_sel = gtk.gdk.Pixmap(win, width, height, -1)
+ self.pixmap_sel.draw_rectangle(widget.get_style().white_gc, True, 0, 0, width, height)
+
+ self.gc = widget.window.new_gc()
+ self.gc_eraser = widget.window.new_gc()
+ colormap = self.get_colormap()
+ white = colormap.alloc_color('#ffffff', True, True) # white
+ self.gc_eraser.set_foreground(white)
- self.gc_brush = widget.window.new_gc()
- self.gc_brush.set_foreground(self.cores[0])
-
+ self.gc_brush = widget.window.new_gc()
+ self.gc_brush.set_foreground(white)
+
self.gc_line = widget.window.new_gc()
- self.gc_selection = widget.window.new_gc()
- self.gc_selection.set_line_attributes(1, gtk.gdk.LINE_ON_OFF_DASH, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
- self.gc_selection.set_foreground(self.cores[8])
+ self.gc_selection = widget.window.new_gc()
+ self.gc_selection.set_line_attributes(1, gtk.gdk.LINE_ON_OFF_DASH, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
+ black = colormap.alloc_color('#000000', True, True) # black
+ self.gc_selection.set_foreground(black)
print 'configure event'
-
+
return True
# set the new line size
@@ -135,8 +209,8 @@ class Area(gtk.DrawingArea):
"""
self.line_size = size
- self.gc_line.set_line_attributes(size, gtk.gdk.LINE_SOLID, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
-
+ self.gc_line.set_line_attributes(size, gtk.gdk.LINE_SOLID, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
+
def expose(self, widget, event):
"""Show up the Area object (GtkDrawingArea).
@@ -145,14 +219,17 @@ class Area(gtk.DrawingArea):
widget -- the Area object (GtkDrawingArea)
event -- GdkEvent
- """
- area = event.area
- if self.desenha:
- widget.window.draw_drawable(self.gc, self.pixmap_temp, area[0], area[1], area[0], area[1], area[2], area[3])
- else:
- widget.window.draw_drawable(self.gc, self.pixmap, area[0], area[1], area[0], area[1], area[2], area[3])
- return False
-
+ """
+ area = event.area
+ if self.desenha:
+ if self.selmove :
+ widget.window.draw_drawable(self.gc, self.pixmap_sel, area[0], area[1], area[0], area[1], area[2], area[3])
+ else:
+ widget.window.draw_drawable(self.gc, self.pixmap_temp, area[0], area[1], area[0], area[1], area[2], area[3])
+ else:
+ widget.window.draw_drawable(self.gc, self.pixmap, area[0], area[1], area[0], area[1], area[2], area[3])
+ return False
+
def mousedown(self,widget,event):
"""Make the Area object (GtkDrawingArea) recognize that the mouse button was pressed.
@@ -161,17 +238,27 @@ class Area(gtk.DrawingArea):
widget -- the Area object (GtkDrawingArea)
event -- GdkEvent
- """
+ """
# text
- if self.busy == False:
- if self.tool == 4:
- self.d.text(widget,event)
- if not self.move or self.tool != 26:
- self.oldx = int(event.x)
- self.oldy = int(event.y)
-
- self.desenha = True
-
+ if self.tool == 'text':
+ self.d.text(widget,event)
+ if not self.selmove or self.tool != 'marquee-rectangular':
+ self.oldx = int(event.x)
+ self.oldy = int(event.y)
+ if self.selmove and self.tool != 'marquee-rectangular': #get out of the func selection
+ self.pixmap.draw_drawable(self.gc, self.pixmap_temp, 0,0,0,0, WIDTH, HEIGHT)
+ self.selmove = False
+ self.enableUndo(widget)
+ x , y, state = event.window.get_pointer()
+ if state & gtk.gdk.BUTTON3_MASK:
+ self.sel_get_out = True
+ self.pixmap_sel.draw_drawable(self.gc, self.pixmap_temp, 0,0,0,0, WIDTH, HEIGHT)
+ if state & gtk.gdk.BUTTON1_MASK:
+ self.pixmap_temp.draw_drawable(self.gc, self.pixmap, 0,0,0,0, WIDTH, HEIGHT)
+ widget.queue_draw()
+ self.desenha = True
+
+
def mousemove(self,widget,event):
"""Make the Area object (GtkDrawingArea) recognize that the mouse is moving.
@@ -181,54 +268,65 @@ class Area(gtk.DrawingArea):
event -- GdkEvent
"""
- if self.busy == False:
- x , y, state = event.window.get_pointer()
- coords = int(x), int(y)
-
- if state & gtk.gdk.BUTTON1_MASK and self.pixmap != None:
- if self.tool == 3:
- self.d.eraser(widget, coords)
- #brush
- elif self.tool == 29:
- self.d.brush(widget, coords, self.line_size, self.brush_shape)
- if self.desenha:
- # line
- if self.tool == 1:
- print self.oldx
- self.configure_line(self.line_size)
- self.d.line(widget, coords)
- # pencil
- elif self.tool == 2:
- self.configure_line(self.line_size)
- self.d.pencil(widget, coords)
- # circle
- elif self.tool == 5:
- self.configure_line(self.line_size)
- self.d.circle(widget,coords)
- # square
- elif self.tool == 6:
- self.configure_line(self.line_size)
- self.d.square(widget,coords)
- # selection
- elif self.tool == 26 and not self.move:
- self.d.selection(widget,coords)
- # selection
- elif self.tool == 26 and self.move:
- self.d.moveSelection(widget, coords)
- #polygon
- elif self.tool == 27:
- self.configure_line(self.line_size)
- self.d.polygon(widget, coords)
- #triangle
- elif self.tool == 30:
- self.configure_line(self.line_size)
- self.d.triangle(widget,coords)
- #trapezoid
- elif self.tool == 31:
- self.configure_line(self.line_size)
- self.d.trapezoid(widget,coords)
-
- def mouseup(self,widget,event):
+ x , y, state = event.window.get_pointer()
+ coords = int(x), int(y)
+
+ if state & gtk.gdk.BUTTON1_MASK and self.pixmap != None:
+ #eraser
+ if self.tool == 'eraser':
+ self.d.eraser(widget, coords, self.line_size, self.eraser_shape)
+ #brush
+ elif self.tool == 'brush':
+ self.d.brush(widget, coords, self.line_size, self.brush_shape)
+ if self.desenha:
+ # line
+ if self.tool == 'line':
+ self.configure_line(self.line_size)
+ self.d.line(widget, coords)
+ # pencil
+ elif self.tool == 'pencil':
+ self.configure_line(self.line_size)
+ self.d.pencil(widget, coords)
+ # ellipse
+ elif self.tool == 'ellipse':
+ self.configure_line(self.line_size)
+ self.d.circle(widget,coords)
+ # rectangle
+ elif self.tool == 'rectangle':
+ self.configure_line(self.line_size)
+ self.d.square(widget,coords)
+ # selection
+ elif self.tool == 'marquee-rectangular' and not self.selmove:
+ self.d.selection(widget,coords)
+ # selection
+ elif self.tool == 'marquee-rectangular' and self.selmove:
+ self.d.moveSelection(widget, coords)
+ #polygon
+ elif self.tool == 'polygon':
+ self.configure_line(self.line_size)
+ self.d.polygon(widget, coords)
+ #triangle
+ elif self.tool == 'triangle':
+ self.configure_line(self.line_size)
+ self.d.triangle(widget,coords)
+ #trapezoid
+ elif self.tool == 'trapezoid':
+ self.configure_line(self.line_size)
+ self.d.trapezoid(widget,coords)
+ #arrow
+ elif self.tool == 'arrow':
+ self.configure_line(self.line_size)
+ self.d.arrow(widget,coords)
+ #parallelogram
+ elif self.tool == 'parallelogram':
+ self.configure_line(self.line_size)
+ self.d.parallelogram(widget,coords)
+ #star
+ elif self.tool == 'star':
+ self.configure_line(self.line_size)
+ self.d.star(widget,coords)
+
+ def mouseup(self,widget,event):
"""Make the Area object (GtkDrawingArea) recognize that the mouse was released.
Keyword arguments:
@@ -237,106 +335,112 @@ class Area(gtk.DrawingArea):
event -- GdkEvent
"""
- if self.busy == False:
- if self.desenha == True:
- # line
- if self.tool == 1:
- self.pixmap.draw_line(self.gc_line,self.oldx,self.oldy, int (event.x), int(event.y))
- widget.queue_draw()
- self.enableUndo(widget)
- # circle
- elif self.tool == 5:
- self.pixmap.draw_arc(self.gc, True, self.newx, self.newy, self.newx_, self.newy_, 0, 360*64)
- self.pixmap.draw_arc(self.gc_line, False, self.newx, self.newy, self.newx_, self.newy_, 0, 360*64)
-
- widget.queue_draw()
- self.enableUndo(widget)
- # square
- elif self.tool == 6:
- self.pixmap.draw_rectangle(self.gc, True, self.newx,self.newy, self.newx_,self.newy_)
- self.pixmap.draw_rectangle(self.gc_line, False, self.newx,self.newy, self.newx_,self.newy_)
-
- widget.queue_draw()
- self.enableUndo(widget)
- # selection
- elif self.tool == 26:
- if self.move == False:
- self.pixmap_temp.draw_drawable(self.gc,self.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.move = True
- self.sx = int (event.x)
- self.sy = int(event.y)
- self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR))
- elif self.move == True:
- self.pixmap.draw_drawable(self.gc, self.pixmap_temp, 0,0,0,0, WIDTH, HEIGHT)
- # FIXME: Adicionar cursor formato selecao
- self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.CROSSHAIR))
- self.move = False
- self.enableUndo(widget)
- # polygon
- elif self.tool == 27:
- if self.polygon_start:
- self.enableUndo(widget)
- self.pixmap.draw_line(self.gc_line,self.oldx,self.oldy, int (event.x), int( event.y ))
- self.lastx = event.x
- self.lasty = event.y
- self.firstx = self.oldx
- self.firsty = self.oldy
- self.polygon_start = False
- else:
- self.dx = math.fabs(event.x - self.firstx)
- self.dy = math.fabs(event.y - self.firsty)
- if (self.dx < 20) & (self.dy < 20):
- self.pixmap.draw_line(self.gc_line,int (self.firstx), int (self.firsty), int (self.lastx), int (self.lasty))
- self.polygon_start = True
- self.undo_times -= 1#destroy the undo screen of polygon start
- self.enableUndo(widget)
- else:
- self.pixmap.draw_line(self.gc_line,int (self.lastx),int (self.lasty), int (event.x), int( event.y ))
- self.lastx = event.x
- self.lasty = event.y
- widget.queue_draw()
-
- elif self.tool == 2:# or 4 check this for desire tool
- widget.queue_draw()
- self.enableUndo(widget)
-
- #bucket
- elif self.tool == 28:
- # New algorithm. See Desenho.py
- width, height = self.window.get_size()
- self.busy = True
- image = self.pixmap.get_image(0,0, width, height)
- fill_image = self.d.fill(image, int(event.x), int(event.y), self.color_dec)
-
- self.pixmap.draw_image(self.gc, fill_image,0,0,0,0, width, height)
- self.pixmap_temp.draw_image(self.gc, fill_image,0,0,0,0, width, height)
-
- del image
- del fill_image
-
- widget.queue_draw()
- self.busy = False
+ if self.desenha == True:
+ # line
+ if self.tool == 'line':
+ self.pixmap.draw_line(self.gc_line,self.oldx,self.oldy, int (event.x), int(event.y))
+ widget.queue_draw()
+ self.enableUndo(widget)
+ # ellipse
+ elif self.tool == 'ellipse':
+ self.pixmap.draw_arc(self.gc, True, self.newx, self.newy, self.newx_, self.newy_, 0, 360*64)
+ self.pixmap.draw_arc(self.gc_line, False, self.newx, self.newy, self.newx_, self.newy_, 0, 360*64)
+ widget.queue_draw()
+ self.enableUndo(widget)
+ # rectangle
+ elif self.tool == 'rectangle':
+ self.pixmap.draw_rectangle(self.gc, True, self.newx,self.newy, self.newx_,self.newy_)
+ self.pixmap.draw_rectangle(self.gc_line, False, self.newx,self.newy, self.newx_,self.newy_)
+ widget.queue_draw()
+ self.enableUndo(widget)
+ # selection
+ elif self.tool == 'marquee-rectangular':
+ # FIXME: Adicionar cursor formato selecao
+ if self.selmove == False:
+ self.pixmap_temp.draw_drawable(self.gc,self.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.sx = int (event.x)
+ self.sy = int(event.y)
+ self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR))
+ self.selmove = True
+ self.sel_get_out = False
+ elif self.selmove and self.sel_get_out: #get out of the func selection
+ self.pixmap.draw_drawable(self.gc, self.pixmap_temp, 0,0,0,0, WIDTH, HEIGHT)
+ self.selmove = False
+ self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.TCROSS))
+ self.oldx = event.x
+ self.oldy = event.y
self.enableUndo(widget)
-
- elif self.tool == 30:
- self.pixmap.draw_polygon(self.gc, True, self.d.points)
- self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
- widget.queue_draw()
+ # polygon
+ elif self.tool == 'polygon':
+ if self.polygon_start:
self.enableUndo(widget)
+ self.pixmap.draw_line(self.gc_line,self.oldx,self.oldy, int (event.x), int( event.y ))
+ self.lastx = event.x
+ self.lasty = event.y
+ self.firstx = self.oldx
+ self.firsty = self.oldy
+ self.polygon_start = False
+ else:
+ self.dx = math.fabs(event.x - self.firstx)
+ self.dy = math.fabs(event.y - self.firsty)
+ if (self.dx < 20) & (self.dy < 20):
+ self.pixmap.draw_line(self.gc_line,int (self.firstx), int (self.firsty), int (self.lastx), int (self.lasty))
+ self.polygon_start = True
+ self.undo_times -= 1#destroy the undo screen of polygon start
+ self.enableUndo(widget)
+ else:
+ self.pixmap.draw_line(self.gc_line,int (self.lastx),int (self.lasty), int (event.x), int( event.y ))
+ self.lastx = event.x
+ self.lasty = event.y
+ widget.queue_draw()
- elif self.tool == 31:
- self.pixmap.draw_polygon(self.gc, True, self.d.points)
- self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
- widget.queue_draw()
- self.enableUndo(widget)
- if self.tool == 29 or self.tool == 3:
+ elif self.tool == 'pencil': #to undo pencil
widget.queue_draw()
self.enableUndo(widget)
- if self.tool == 4:
- widget.queue_draw()
+
+ #bucket
+ elif self.tool == 'bucket':
+ # New algorithm. See Desenho.py
+ width, height = self.window.get_size()
+ fill(self.pixmap, self.gc, int(event.x), int(event.y), width, height, self.color_dec)
+ widget.queue_draw()
+ self.enableUndo(widget)
+
+ elif self.tool == 'triangle':
+ self.pixmap.draw_polygon(self.gc, True, self.d.points)
+ self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
+ widget.queue_draw()
+ self.enableUndo(widget)
+
+ elif self.tool == 'trapezoid':
+ self.pixmap.draw_polygon(self.gc, True, self.d.points)
+ self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
+ widget.queue_draw()
+ self.enableUndo(widget)
+
+ elif self.tool == 'arrow':
+ self.pixmap.draw_polygon(self.gc, True, self.d.points)
+ self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
+ widget.queue_draw()
+ self.enableUndo(widget)
+
+ elif self.tool == 'parallelogram':
+ self.pixmap.draw_polygon(self.gc, True, self.d.points)
+ self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
+ widget.queue_draw()
+ self.enableUndo(widget)
+
+ elif self.tool == 'star':
+ self.pixmap.draw_polygon(self.gc, True, self.d.points)
+ self.pixmap.draw_polygon(self.gc_line, False, self.d.points)
+ widget.queue_draw()
self.enableUndo(widget)
- self.desenha = False
-
+
+ if self.tool == 'brush' or self.tool == 'eraser':
+ widget.queue_draw()
+ self.enableUndo(widget)
+ self.desenha = False
+
#this func make a basic Undo
def undo(self):
@@ -349,7 +453,8 @@ class Area(gtk.DrawingArea):
self.polygon_start = True
if self.first_undo:#if is the first time you click on UNDO
self.undo_times -= 1
- self.redo_times = 1
+ if self.undo_times == 0: #to work when clear screen (bug fixed)
+ self.redo_times = 1
elif (self.first_redo) and (self.undo_times!=0):
self.undo_times += 1
@@ -375,7 +480,7 @@ class Area(gtk.DrawingArea):
#special case of func polygon
- if self.tool == 27:
+ if self.tool == 'polygon':
self.polygon_start = True #start the polygon again
@@ -387,16 +492,15 @@ class Area(gtk.DrawingArea):
"""
#print "REDO no.%d" %(self.redo_times)
+ if self.first_redo:
+ self.undo_times -=1
+ self.redo_times +=1
+ self.first_redo=False
if (self.redo_times>0):
self.redo_times -= 1
self.undo_times += 1
-
- if self.first_redo:
- self.undo_times -=1
- self.redo_times +=1
- self.first_redo=False
try: #to not try paint someting wrong
#print "Drawing undo[%d]" %(self.undo_times)
self.pixmap.draw_drawable(self.gc, self.undo_list[self.undo_times], 0,0,0,0, WIDTH, HEIGHT)
@@ -418,7 +522,7 @@ class Area(gtk.DrawingArea):
self.undo_times += 1
self.undo_list.append(None)#alloc memory
- self.undo_list[self.undo_times] = gtk.gdk.Pixmap(widget.window, WIDTH, HEIGHT, -1) #define type
+ self.undo_list[self.undo_times] = gtk.gdk.Pixmap(widget.window, WIDTH, HEIGHT, -1) #define type
self.undo_list[self.undo_times].draw_drawable(self.gc,self.pixmap,0,0,0,0, WIDTH, HEIGHT) #copy workarea
self.undo_times += 1
self.redo_times = 0
@@ -435,26 +539,35 @@ class Area(gtk.DrawingArea):
Keyword arguments:
self -- the Area object (GtkDrawingArea)
- color -- integer "enum"
+ color -- a gdk.Color object
"""
- self.color_ = color
- self.gc.set_foreground(self.cores[color])
-
-
+ #self.color_ = color
+ #self.gc.set_foreground(self.cores[color])
+ self.gc.set_foreground(color)
+
+
def _set_stroke_color(self, color):
"""Set stroke color.
Keyword arguments:
self -- the Area object (GtkDrawingArea)
- color -- integer "enum"
+ color -- a gdk.Color object
"""
- self.color_line = color
+ '''
+ self.color_line = color
self.gc_line.set_foreground(self.cores[color])
self.gc_line.set_line_attributes(1, gtk.gdk.LINE_ON_OFF_DASH, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
self.gc_brush.set_foreground(self.cores[color])
self.color_dec = self.cores[color].pixel
+ '''
+
+ #self.color_line = color
+ self.gc_line.set_foreground(color)
+ self.gc_line.set_line_attributes(1, gtk.gdk.LINE_ON_OFF_DASH, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
+ self.gc_brush.set_foreground(color)
+ self.color_dec = color.pixel
def _set_grayscale(self,widget):
"""Apply grayscale effect.
@@ -464,10 +577,10 @@ class Area(gtk.DrawingArea):
"""
pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, WIDTH, HEIGHT)
- pix_ = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, WIDTH, HEIGHT)
+ pix_ = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, WIDTH, HEIGHT)
pix.get_from_drawable(self.pixmap, gtk.gdk.colormap_get_system(), 0, 0, 0, 0, WIDTH, HEIGHT)
pix.saturate_and_pixelate(pix_, 0 ,0)
-
+
self.pixmap.draw_pixbuf(self.gc, pix_, 0, 0, 0, 0, WIDTH, HEIGHT, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0)
self.pixmap_temp.draw_pixbuf(self.gc, pix_, 0, 0, 0, 0, WIDTH, HEIGHT, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0)
diff --git a/Botao.py b/Botao.py
deleted file mode 100644
index de4d5c4..0000000
--- a/Botao.py
+++ /dev/null
@@ -1,105 +0,0 @@
-import pygtk
-pygtk.require('2.0')
-import gtk
-from gtk import gdk
-
-
-class Botao:
- def __init__(self, area):
- """Initialize the Botao object.
-
- Keyword arguments:
- self -- Botao.Botao instance
- area -- gtk.Fixed object
-
- """
- self.area = area
- self.botoes = []
- self.id = 0
- self.desenha = False
- self.local = 0,0
- self.tooltip = gtk.Tooltips()
-
- def adicionaBotao(self, archive, tipo, x, y, mousedown, tooltip_):
- """Add button.
-
- Keyword arguments:
- self -- Botao.Botao instance
- archive -- button icon (image file)
- tipo -- integer "enum"
- x -- integer (horizontal position)
- y -- integer (vertical position)
- mousedown -- method Oficina.mousedown of Oficina.Oficina instance
- tooltip_ -- string (name of the button)
-
- """
- img = gtk.Image()
- img.set_from_file("./images/" + archive)
-
- eventbox = gtk.EventBox()
- eventbox.add(img)
- #eventbox.set_visible_window(False)
- eventbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("white"))
-
- eventbox.set_events(gtk.gdk.POINTER_MOTION_MASK |
- gtk.gdk.POINTER_MOTION_HINT_MASK |
- gtk.gdk.BUTTON_PRESS_MASK |
- gtk.gdk.BUTTON_RELEASE_MASK)
-
- eventbox.connect("motion_notify_event", self.mousemove,self.id)
- eventbox.connect("button_release_event", self.mouseup)
- eventbox.connect("button_press_event", self.mousedown, self.id)
- eventbox.connect("button_press_event", mousedown, tipo)
- # Drag'n'drop
- self.area.put(eventbox, x, y)
- self.botoes.append(eventbox)
- self.id += 1
-
- self.tooltip.set_tip(eventbox, tooltip_, None)
- #self.tooltip.enable()
-
- def mousedown(self,widget,event, id):
- """Recognize that the mouse was pressed in one of the buttons.
-
- Keyword arguments:
- self -- Botao.Botao instance
- widget -- gtk.EventBox
- event -- GdkEvent
- id -- integer "enum"
-
- """
- self.desenha = True
- ex = event.x
- ey = event.y
- self.local = ex, ey
-
- def mouseup(self,widget,event):
- """Recognize that the mouse was released in one of the buttons.
-
- Keyword arguments:
- self -- Botao.Botao instance
- widget -- gtk.EventBox
- event -- GdkEvent
-
- """
- self.desenha = False
-
- def mousemove(self,widget,event, id):
- """Recognize that the mouse was moved.
-
- Keyword arguments:
- self -- Botao.Botao instance
- widget -- gtk.EventBox
- event -- GdkEvent
- id -- integer "enum"
-
- """
- x , y, state = self.area.window.get_pointer()
- ex, ey = self.local
- x_ = int(x - ex)
- y_ = int(y - ey)
- if state & gtk.gdk.BUTTON1_MASK and self.desenha:
- self.area.move(self.botoes[id], x_, y_)
-
-
-
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..fa12d2a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,343 @@
+GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software
+ interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Program does not specify a
+version number of this License, you may choose any version ever
+published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Cursores.py b/Cursores.py
deleted file mode 100644
index 82fef79..0000000
--- a/Cursores.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-import pygtk
-pygtk.require('2.0')
-import gtk
-from gtk import gdk
-
-class Cursores:
- def __init__(self, archive):
- """Initialize Cursores object.
-
- Keyword arguments:
- self -- Cursores.Cursores instance
- archive --
-
- """
- color = gtk.gdk.Color()
- pix = gtk.gdk.pixbuf_new_from_file("./images/" + archive)
- self.cursor_ = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- def cursor(self):
- """Return self.cursor_.
-
- Keyword arguments:
- self -- Cursores.Cursores instance
-
- """
- return self.cursor_
-
-
diff --git a/Cursors.py b/Cursors.py
deleted file mode 100644
index d501b1d..0000000
--- a/Cursors.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import pygtk
-pygtk.require('2.0')
-import gtk
-from gtk import gdk
-
-class Cursors:
- def __init__(self, archive):
- """Initialize Cursors object.
-
- Keyword arguments:
- self -- Cursors.Cursors instance
- archive --
-
- """
- color = gtk.gdk.Color()
- pix = gtk.gdk.pixbuf_new_from_file("./images/" + archive)
- self._cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- def cursor(self):
- """Return self._cursor.
-
- Keyword arguments:
- self -- Cursors.Cursors instance
-
- """
- return self._cursor
-
-
diff --git a/Desenho.py b/Desenho.py
index 8e5072f..b564143 100644
--- a/Desenho.py
+++ b/Desenho.py
@@ -1,17 +1,71 @@
# -*- coding: utf-8 -*-
-import pygtk
-pygtk.require('2.0')
-import gtk
-import sys, gobject, socket
-from gtk import gdk
-import math
-import pango
-
-
-WIDTH = 1195
-HEIGHT = 800
-
-class Desenho:
+"""
+Desenho.py
+
+Pixmap manipulation
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+Colaborators:
+Bruno Gola (brunogola@gmail.com)
+
+Group Manager:
+Irene Karaguilla Ficheman (irene@lsi.usp.br)
+
+Cientific Coordinator:
+Roseli de Deus Lopes (roseli@lsi.usp.br)
+
+"""
+
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+import sys, gobject, socket
+from gtk import gdk
+import math
+import pango
+
+
+WIDTH = 1195
+HEIGHT = 800
+
+class Desenho:
def __init__(self, d_):
"""Initialize Desenho object.
@@ -19,9 +73,9 @@ class Desenho:
self -- Desenho.Desenho instance
d_ -- Area object (GtkDrawingArea)
- """
+ """
self.d = d_
-
+
def line(self, widget, coords):
"""Draw line.
@@ -30,13 +84,13 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_line(self.d.gc_line,self.d.oldx,self.d.oldy,coords[0],coords[1])
- self.d.newx = coords[0]
- self.d.newy = coords[1]
- widget.queue_draw()
-
+ """
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_line(self.d.gc_line,self.d.oldx,self.d.oldy,coords[0],coords[1])
+ self.d.newx = coords[0]
+ self.d.newy = coords[1]
+ widget.queue_draw()
+
def eraser(self, widget, coords, size = 30, shape = 'circle'):
"""Erase part of the drawing.
@@ -47,16 +101,16 @@ class Desenho:
size -- integer (default 30)
shape -- string (default 'circle')
- """
+ """
self.d.desenha = False
- if(shape == 'circle'):
- self.d.pixmap.draw_arc(self.d.gc_eraser, True, coords[0], coords[1], size, size, 0, 360*64)
+ if(shape == 'circle'):
+ self.d.pixmap.draw_arc(self.d.gc_eraser, True, coords[0], coords[1], size, size, 0, 360*64)
self.d.pixmap_temp.draw_arc(self.d.gc_eraser, True, coords[0], coords[1], size, size, 0, 360*64)
if(shape == 'square'):
- self.d.pixmap.draw_rectangle(self.d.gc_borracha, True, coords[0], coords[1], size, size)
- self.d.pixmap_temp.draw_rectangle(self.d.gc_borracha, True, coords[0], coords[1], size, size)
- self.d.oldx = coords[0]
- self.d.oldy = coords[1]
+ self.d.pixmap.draw_rectangle(self.d.gc_eraser, True, coords[0], coords[1], size, size)
+ self.d.pixmap_temp.draw_rectangle(self.d.gc_eraser, True, coords[0], coords[1], size, size)
+ self.d.oldx = coords[0]
+ self.d.oldy = coords[1]
widget.queue_draw()
def brush(self, widget, coords, size = 5, shape = 'circle'):
@@ -69,17 +123,17 @@ class Desenho:
size -- integer (default 30)
shape -- string (default 'circle')
- """
+ """
self.d.desenha = False
- if(shape == 'circle'):
- self.d.pixmap.draw_arc(self.d.gc_brush, True, coords[0], coords[1], size, size, 0, 360*64)
+ if(shape == 'circle'):
+ self.d.pixmap.draw_arc(self.d.gc_brush, True, coords[0], coords[1], size, size, 0, 360*64)
self.d.pixmap_temp.draw_arc(self.d.gc_brush, True, coords[0], coords[1], size, size, 0, 360*64)
if(shape == 'square'):
self.d.pixmap.draw_rectangle(self.d.gc_brush, True, coords[0], coords[1], size, size)
- self.d.pixmap_temp.draw_rectangle(self.d.gc_brush, True, coords[0], coords[1], size, size)
- self.d.oldx = coords[0]
- self.d.oldy = coords[1]
- widget.queue_draw()
+ self.d.pixmap_temp.draw_rectangle(self.d.gc_brush, True, coords[0], coords[1], size, size)
+ self.d.oldx = coords[0]
+ self.d.oldy = coords[1]
+ widget.queue_draw()
def square(self, widget, coords):
"""Draw a square.
@@ -89,44 +143,44 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- widget.queue_draw()
-
- if coords[0] > WIDTH:
- coords0 = WIDTH
- else:
- coords0 = coords[0]
-
- if coords [1] > HEIGHT:
- coords1 = HEIGHT
- else:
- coords1 = coords[1]
-
- self.d.newx_ = coords0 - self.d.oldx
- self.d.newy_ = coords1 - self.d.oldy
-
- if self.d.newx_ >= 0:
- self.d.newx = self.d.oldx
- else:
- if coords0 > 0:
- self.d.newx = coords0
- self.d.newx_ = - self.d.newx_
- else:
- self.d.newx = 0
- self.d.newx_ = self.d.oldx
-
- if self.d.newy_ >= 0:
- self.d.newy = self.d.oldy
- else:
- if coords1 > 0:
- self.d.newy_ = - self.d.newy_
- self.d.newy = coords1
- else:
- self.d.newy = 0
- self.d.newy_ = self.d.oldy
-
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_rectangle(self.d.gc, True ,self.d.newx,self.d.newy,self.d.newx_,self.d.newy_)
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords [1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
+ coords1 = coords[1]
+
+ self.d.newx_ = coords0 - self.d.oldx
+ self.d.newy_ = coords1 - self.d.oldy
+
+ if self.d.newx_ >= 0:
+ self.d.newx = self.d.oldx
+ else:
+ if coords0 > 0:
+ self.d.newx = coords0
+ self.d.newx_ = - self.d.newx_
+ else:
+ self.d.newx = 0
+ self.d.newx_ = self.d.oldx
+
+ if self.d.newy_ >= 0:
+ self.d.newy = self.d.oldy
+ else:
+ if coords1 > 0:
+ self.d.newy_ = - self.d.newy_
+ self.d.newy = coords1
+ else:
+ self.d.newy = 0
+ self.d.newy_ = self.d.oldy
+
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_rectangle(self.d.gc, True ,self.d.newx,self.d.newy,self.d.newx_,self.d.newy_)
self.d.pixmap_temp.draw_rectangle(self.d.gc_line, False ,self.d.newx,self.d.newy,self.d.newx_,self.d.newy_)
@@ -138,28 +192,28 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- widget.queue_draw()
-
- if coords[0] > WIDTH:
- coords0 = WIDTH
- else:
- coords0 = coords[0]
-
- if coords [1] > HEIGHT:
- coords1 = HEIGHT
- else:
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords [1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
coords1 = coords[1]
if coords0 < 0:
coords0 = 0
if coords1 < 0:
- coords1 = 0
+ coords1 = 0
- self.points = [(self.d.oldx, self.d.oldy), (self.d.oldx+int((coords0-self.d.oldx)/2), coords1), (coords0,self.d.oldy)]
+ self.points = [(self.d.oldx, self.d.oldy), (self.d.oldx+int((coords0-self.d.oldx)/2), coords1), (coords0,self.d.oldy)]
self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
+ self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
self.d.pixmap_temp.draw_polygon(self.d.gc_line, False, self.points)
def trapezoid(self, widget, coords):
@@ -170,29 +224,137 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- widget.queue_draw()
-
- if coords[0] > WIDTH:
- coords0 = WIDTH
- else:
- coords0 = coords[0]
-
- if coords[1] > HEIGHT:
- coords1 = HEIGHT
- else:
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords[1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
coords1 = coords[1]
if coords0 < 0:
coords0 = 0
if coords1 < 0:
- coords1 = 0
+ coords1 = 0
dif = int((coords0 - self.d.oldx)/4)
- self.points = [(self.d.oldx, self.d.oldy), (self.d.oldx+dif, coords1), (coords0-dif, coords1) , (coords0,self.d.oldy)]
+ self.points = [(self.d.oldx, self.d.oldy), (self.d.oldx+dif, coords1), (coords0-dif, coords1) , (coords0,self.d.oldy)]
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
+ self.d.pixmap_temp.draw_polygon(self.d.gc_line, False, self.points)
+
+ def arrow(self, widget, coords):
+ """Draw a arrow.
+
+ Keyword arguments:
+ self -- Desenho.Desenho instance
+ widget -- Area object (GtkDrawingArea)
+ coords -- Two value tuple
+
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords [1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
+ coords1 = coords[1]
+
+ if coords0 < 0:
+ coords0 = 0
+
+ if coords1 < 0:
+ coords1 = 0
+ self.width = coords0 - self.d.oldx
+ self.height = coords1 - self.d.oldy
+ self.points = [(self.d.oldx,self.d.oldy), (self.d.oldx+int(self.width/6),coords1), (self.d.oldx+int(self.width/6),self.d.oldy+int(self.height/3)), (coords0,self.d.oldy+int(self.height/3)), (coords0,self.d.oldy-int(self.height/3)), (self.d.oldx+int(self.width/6),self.d.oldy-int(self.height/3)), (self.d.oldx+int(self.width/6),self.d.oldy-self.height)]
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
+ self.d.pixmap_temp.draw_polygon(self.d.gc_line, False, self.points)
+
+ def parallelogram(self, widget, coords):
+ """Draw a parallelogram.
+
+ Keyword arguments:
+ self -- Desenho.Desenho instance
+ widget -- Area object (GtkDrawingArea)
+ coords -- Two value tuple
+
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords[1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
+ coords1 = coords[1]
+
+ if coords0 < 0:
+ coords0 = 0
+
+ if coords1 < 0:
+ coords1 = 0
+
+ self.width = int((coords0 - self.d.oldx)/4)
+ self.points = [(self.d.oldx,self.d.oldy), (coords0-self.width, self.d.oldy), (coords0,coords1), (self.d.oldx+self.width,coords1)]
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
+ self.d.pixmap_temp.draw_polygon(self.d.gc_line, False, self.points)
+
+ def star(self, widget, coords):
+ """Draw a arrow.
+
+ Keyword arguments:
+ self -- Desenho.Desenho instance
+ widget -- Area object (GtkDrawingArea)
+ coords -- Two value tuple
+
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords [1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
+ coords1 = coords[1]
+
+ if coords0 < 0:
+ coords0 = 0
+
+ if coords1 < 0:
+ coords1 = 0
+ self.width = coords0 - self.d.oldx
+ self.height = coords1 - self.d.oldy
+ self.points = [(self.d.oldx,self.d.oldy),\
+(self.d.oldx+int(self.width*0.25), self.d.oldy+int(self.height*0.4)),\
+(self.d.oldx+int(self.width),self.d.oldy+int(self.height*0.4)),\
+(self.d.oldx+int(self.width*0.35), self.d.oldy+int(self.height*0.6)),\
+(self.d.oldx+int(self.width*0.6), self.d.oldy+self.height),\
+(self.d.oldx, self.d.oldy+int(self.height*0.75)),\
+(self.d.oldx-int(self.width*0.6), self.d.oldy+self.height),\
+(self.d.oldx-int(self.width*0.35), self.d.oldy+int(self.height*0.6)),\
+(self.d.oldx-int(self.width),self.d.oldy+int(self.height*0.4)),\
+(self.d.oldx-int(self.width*0.25), self.d.oldy+int(self.height*0.4))]
self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
+ self.d.pixmap_temp.draw_polygon(self.d.gc, True, self.points)
self.d.pixmap_temp.draw_polygon(self.d.gc_line, False, self.points)
@@ -204,44 +366,44 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- widget.queue_draw()
-
- if coords[0] > WIDTH:
- coords0 = WIDTH
- else:
- coords0 = coords[0]
-
- if coords [1] > HEIGHT:
- coords1 = HEIGHT
- else:
- coords1 = coords[1]
-
- self.d.newx_ = coords0 - self.d.oldx
- self.d.newy_ = coords1 - self.d.oldy
-
- if self.d.newx_ >= 0:
- self.d.newx = self.d.oldx
- else:
- if coords0 > 0:
- self.d.newx = coords0
- self.d.newx_ = - self.d.newx_
- else:
- self.d.newx = 0
- self.d.newx_ = self.d.oldx
-
- if self.d.newy_ >= 0:
- self.d.newy = self.d.oldy
- else:
- if coords1 > 0:
- self.d.newy_ = - self.d.newy_
- self.d.newy = coords1
- else:
- self.d.newy = 0
- self.d.newy_ = self.d.oldy
-
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_rectangle(self.d.gc_selection, False ,self.d.newx,self.d.newy,self.d.newx_,self.d.newy_)
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords [1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
+ coords1 = coords[1]
+
+ self.d.newx_ = coords0 - self.d.oldx
+ self.d.newy_ = coords1 - self.d.oldy
+
+ if self.d.newx_ >= 0:
+ self.d.newx = self.d.oldx
+ else:
+ if coords0 > 0:
+ self.d.newx = coords0
+ self.d.newx_ = - self.d.newx_
+ else:
+ self.d.newx = 0
+ self.d.newx_ = self.d.oldx
+
+ if self.d.newy_ >= 0:
+ self.d.newy = self.d.oldy
+ else:
+ if coords1 > 0:
+ self.d.newy_ = - self.d.newy_
+ self.d.newy = coords1
+ else:
+ self.d.newy = 0
+ self.d.newy_ = self.d.oldy
+
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_rectangle(self.d.gc_selection, False ,self.d.newx,self.d.newy,self.d.newx_,self.d.newy_)
def circle(self, widget, coords):
@@ -252,48 +414,48 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- widget.queue_draw()
-
- if coords[0] > WIDTH:
- coords0 = WIDTH
- else:
- coords0 = coords[0]
-
- if coords [1] > HEIGHT:
- coords1 = HEIGHT
- else:
- coords1 = coords[1]
-
- self.d.newx_ = coords0 - self.d.oldx
- self.d.newy_ = coords1 - self.d.oldy
- print "coords0", coords0
-
- if self.d.newx_ >= 0:
- self.d.newx = self.d.oldx
- else:
- if coords0 > 0:
- self.d.newx = coords0
- self.d.newx_ = - self.d.newx_
- else:
- self.d.newx = 0
- self.d.newx_ = self.d.oldx
-
- if self.d.newy_ >= 0:
- self.d.newy = self.d.oldy
- else:
- if coords1 > 0:
- self.d.newy = coords1
- self.d.newy_ = - self.d.newy_
- else:
- self.d.newy = 0
- self.d.newy_ = self.d.oldy
-
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_arc(self.d.gc, True, self.d.newx, self.d.newy, self.d.newx_,self.d.newy_, 0, 360*64)
+ """
+ widget.queue_draw()
+
+ if coords[0] > WIDTH:
+ coords0 = WIDTH
+ else:
+ coords0 = coords[0]
+
+ if coords [1] > HEIGHT:
+ coords1 = HEIGHT
+ else:
+ coords1 = coords[1]
+
+ self.d.newx_ = coords0 - self.d.oldx
+ self.d.newy_ = coords1 - self.d.oldy
+ print "coords0", coords0
+
+ if self.d.newx_ >= 0:
+ self.d.newx = self.d.oldx
+ else:
+ if coords0 > 0:
+ self.d.newx = coords0
+ self.d.newx_ = - self.d.newx_
+ else:
+ self.d.newx = 0
+ self.d.newx_ = self.d.oldx
+
+ if self.d.newy_ >= 0:
+ self.d.newy = self.d.oldy
+ else:
+ if coords1 > 0:
+ self.d.newy = coords1
+ self.d.newy_ = - self.d.newy_
+ else:
+ self.d.newy = 0
+ self.d.newy_ = self.d.oldy
+
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_arc(self.d.gc, True, self.d.newx, self.d.newy, self.d.newx_,self.d.newy_, 0, 360*64)
self.d.pixmap_temp.draw_arc(self.d.gc_line, False, self.d.newx, self.d.newy, self.d.newx_, self.d.newy_, 0, 360*64)
-
-
+
+
def pencil(self, widget, coords):
"""Draw a pencil.
@@ -303,11 +465,11 @@ class Desenho:
coords -- Two value tuple
"""
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- self.d.pixmap.draw_line(self.d.gc_line,self.d.oldx,self.d.oldy,coords[0],coords[1])
- self.d.oldx = coords[0]
- self.d.oldy = coords[1]
- widget.queue_draw()
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ self.d.pixmap.draw_line(self.d.gc_line,self.d.oldx,self.d.oldy,coords[0],coords[1])
+ self.d.oldx = coords[0]
+ self.d.oldy = coords[1]
+ widget.queue_draw()
def clear(self):
"""Clear the drawing.
@@ -315,12 +477,12 @@ class Desenho:
Keyword arguments:
self -- Desenho.Desenho instance
- """
- self.d.desenho = []
- self.d.textos = []
- self.d.pixmap.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
- self.d.queue_draw()
+ """
+ self.d.desenho = []
+ self.d.textos = []
+ self.d.pixmap.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
+ self.d.queue_draw()
def text(self,widget,event):
"""Make a selection.
@@ -330,37 +492,42 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
event -- GdkEvent
- """
- if self.d.estadoTexto == 0:
- self.d.estadoTexto = 1
- print event.x
- self.d.janela._fixed.move(self.d.janela._textview, int(event.x)+200, int(event.y)+100)
- self.d.janela._textview.show()
- else:
+ """
+ if self.d.estadoTexto == 0:
+ self.d.estadoTexto = 1
+ print event.x
+ self.d.janela._fixed.move(self.d.janela._textview, int(event.x)+200, int(event.y)+100)
+ self.d.janela._textview.show()
+ else:
self.d.estadoTexto = 0
- texto = self.d.janela._textview.get_text()
- layout = self.d.create_pango_layout(texto)
+ texto = self.d.janela._textview.get_text()
+ layout = self.d.create_pango_layout(texto)
layout.set_font_description(self.d.font)
- self.d.pixmap.draw_layout(self.d.gc, self.d.oldx, self.d.oldy, layout)
- self.d.pixmap_temp.draw_layout(self.d.gc, self.d.oldx, self.d.oldy, layout)
+ self.d.pixmap.draw_layout(self.d.gc, self.d.oldx, self.d.oldy, layout)
+ self.d.pixmap_temp.draw_layout(self.d.gc, self.d.oldx, self.d.oldy, layout)
self.d.janela._textview.hide()
- self.d.janela._textview.set_text('')
-
- widget.queue_draw()
-
- def loadImage(self, name):
+ self.d.janela._textview.set_text('')
+
+ self.d.enableUndo(widget)
+
+ widget.queue_draw()
+
+ def loadImage(self, name, widget):
"""Load an image.
Keyword arguments:
self -- Desenho.Desenho instance
name -- string (image file path)
- """
- pixbuf = gtk.gdk.pixbuf_new_from_file(name)
+ """
+ pixbuf = gtk.gdk.pixbuf_new_from_file(name)
self.d.pixmap.draw_pixbuf(self.d.gc, pixbuf, 0, 0, 0, 0, width=-1, height=-1, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0)
- self.d.pixmap_temp.draw_pixbuf(self.d.gc, pixbuf, 0, 0, 0, 0, width=-1, height=-1, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0)
- self.d.queue_draw()
-
+ self.d.pixmap_temp.draw_pixbuf(self.d.gc, pixbuf, 0, 0, 0, 0, width=-1, height=-1, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0)
+
+ self.d.enableUndo(widget)
+
+ self.d.queue_draw()
+
def moveSelection(self, widget, coords):
"""Move the selection.
@@ -369,31 +536,40 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- self.d.pixmap_temp.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
-
- if self.d.sx > self.d.oldx:
- x0 = self.d.oldx
- else:
- x0 = self.d.sx
-
- if self.d.sy > self.d.oldy:
- x1 = self.d.oldy
- else:
- x1 = self.d.sy
-
- w = self.d.sx - self.d.oldx
- if w < 0:
- w = - w
-
- h = self.d.sy - self.d.oldy
- if h < 0:
- h = - h
-
- self.d.pixmap_temp.draw_rectangle(self.d.get_style().white_gc, True, x0, x1, w, h)
- self.d.pixmap_temp.draw_drawable(self.d.gc, self.d.pixmap, x0, x1, coords[0] - w/2, coords[1]- h/2, w, h)
- widget.queue_draw()
+ """
+ self.d.pixmap_temp.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+
+ self.d.pixmap_sel.draw_rectangle(self.d.get_style().white_gc, True,0, 0, WIDTH, HEIGHT)
+ self.d.pixmap_sel.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+
+ if self.d.sx > self.d.oldx:
+ x0 = self.d.oldx
+ else:
+ x0 = self.d.sx
+
+ if self.d.sy > self.d.oldy:
+ x1 = self.d.oldy
+ else:
+ x1 = self.d.sy
+
+ w = self.d.sx - self.d.oldx
+ if w < 0:
+ w = - w
+
+ h = self.d.sy - self.d.oldy
+ if h < 0:
+ h = - h
+
+ self.d.pixmap_temp.draw_rectangle(self.d.get_style().white_gc, True, x0, x1, w, h)
+ self.d.pixmap_temp.draw_drawable(self.d.gc, self.d.pixmap, x0, x1, coords[0] - w/2, coords[1]- h/2, w, h)
+
+ self.d.pixmap_sel.draw_rectangle(self.d.get_style().white_gc, True, x0, x1, w, h)
+ self.d.pixmap_sel.draw_drawable(self.d.gc, self.d.pixmap, x0, x1, coords[0] - w/2, coords[1]- h/2, w, h)
+ #to draw the selection green line rectangle
+ self.d.pixmap_sel.draw_rectangle(self.d.gc_selection, False ,coords[0] - w/2, coords[1]- h/2, w, h)
+
+ widget.queue_draw()
def polygon(self, widget, coords):
"""Draw polygon.
@@ -403,14 +579,14 @@ class Desenho:
widget -- Area object (GtkDrawingArea)
coords -- Two value tuple
- """
- self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
- if self.d.polygon_start:
- self.d.pixmap_temp.draw_line(self.d.gc_line,self.d.oldx,self.d.oldy,coords[0],coords[1])
- else:
- self.d.pixmap_temp.draw_line(self.d.gc_line,int (self.d.lastx), int (self.d.lasty),coords[0],coords[1])
- self.d.newx = coords[0]
- self.d.newy = coords[1]
+ """
+ self.d.pixmap_temp.draw_drawable(self.d.gc,self.d.pixmap, 0 , 0 ,0,0, WIDTH, HEIGHT)
+ if self.d.polygon_start:
+ self.d.pixmap_temp.draw_line(self.d.gc_line,self.d.oldx,self.d.oldy,coords[0],coords[1])
+ else:
+ self.d.pixmap_temp.draw_line(self.d.gc_line,int (self.d.lastx), int (self.d.lasty),coords[0],coords[1])
+ self.d.newx = coords[0]
+ self.d.newy = coords[1]
widget.queue_draw()
@@ -449,5 +625,5 @@ class Desenho:
newedge.append((s, t))
edge = newedge
- return image
-
+ return image
+
diff --git a/Main.py b/Main.py
deleted file mode 100644
index 5dafb95..0000000
--- a/Main.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/env python
-import pygtk
-pygtk.require('2.0')
-import sys,gtk,gobject,random,socket,select
-import threading
-import math
-import pango
-from gtk import gdk
-
-from Oficina import Oficina
-
-def main():
- """Run the program.
- """
- oficina = Oficina()
- gtk.main()
-
-if __name__ == "__main__":
- main()
-
diff --git a/NEWS b/NEWS
index 1dae861..dcac8d6 100755
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,24 @@
+4
+===
+Fixed bug with pixmap_temp
+New FILL fuction, linked to C module (pekayatt)
+Color list in Area.py is not used anymore. Toolbox.py now passes a gdk.Color (nathalia.sautchuk, alexandre)
+Fixed Cursors errors (nathalia.sautchuk)
+Fixed Image load bug, now enableUndo is working with it (pekayatt)
+Added COPYING (alexandre)
+Fixed bug that corrupted colors in toolbox.py (alexandre)
+Adding file header and cleaning unused files (nathalia.sautchuk)
+Tools assigned by string instead of numbers (nathalia.sautchuk)
+Changing and Adding new colors (nathalia.sautchuk)
+ToolsToolbar now keeps color and size when user chooses different tools (alexandre)
+Adding new cursors (nathalia.sautchuk)
+New selection, the selectionbox remains (pekayatt)
+Fixed line size (nathalia.sautchuk, alexandre)
+Implemented Eraser shapes (nathalia.sautchuk)
+Fixed undo bugs and new selection function (pekayatt)
+Trapezoid and triangle functions added, minor changes on fill function, bug on fuction undo solved (andre)
+Fill function changed (alexandre)
+
3
===
Addition of a new SVG Icon with fixes to some bugs. Project name changed from Oficina to Paint
@@ -8,5 +29,5 @@ Make it work with python setup.py: John Palmeiri and Manusheel Gupta
1
===
-First Sugar Version: joyce, andremossinato, pekayatt, barbolo, nathalia.sautchuk, alexandremartinazzo from LSI Research Group, University of Sau Paulo,Brazil with manusheel gupta(manu@laptop.org) from OLPC, Cambridge
+First Sugar Version: joyce, andremossinato, pekayatt, barbolo, nathalia.sautchuk, alexandremartinazzo from LSI Research Group, University of Sau Paulo,Brazil with manusheel gupta(manu@laptop.org) and Eben Eliason(eben@laptop.org)from OLPC, Cambridge
diff --git a/Oficina.py b/Oficina.py
deleted file mode 100644
index d50ae5d..0000000
--- a/Oficina.py
+++ /dev/null
@@ -1,254 +0,0 @@
-import pygtk
-pygtk.require('2.0')
-import gtk
-from gtk import gdk
-import os
-
-from Cursors import Cursores
-from Botao import Botao
-from Area import Area
-
-DRAW_WIDTH = 1200
-DRAW_HEIGHT = 800
-
-class Oficina:
- def __init__(self):
- """Initialize the Oficina object.
-
- Keyword arguments:
- self -- Oficina.Oficina instance
-
- """
- #self.window = gtk.Window()
-
- #self.areaFixa = gtk.Fixed()
- #self.areaFixa.set_size_request(DRAW_WIDTH, DRAW_HEIGHT)
-
- # cor de fundo da janela
- #color = gtk.gdk.color_parse("white")
- #self.window.modify_bg(gtk.STATE_NORMAL, color)
-
- # imagem de fundo
- #self.fundo = gtk.Image()
- #self.fundo.set_from_file('fundo.png')
- #self.areaFixa.put(self.fundo, 0, 0)
-
- # cursores
- self.cursorLapis = Cursores('lapis_cursor.png')
- self.cursorCirculo = Cursores('circulo_cursor.png')
- self.cursorBorracha = Cursores('borracha_cursor.png')
- self.cursorQuadrado = Cursores('quadrado_cursor.png')
- self.cursorLinha = Cursores('linha_cursor.png')
- self.cursorLetra = Cursores('letra_cursor.png')
- self.cursorSelecao = Cursores('selecao_cursor.png')
- self.cursorPoligono = Cursores('poligono_cursor.png')
- self.cursorMove = Cursores('move_cursor.png')
-
- self.area = Area(self)
- self.area.ferramenta = 2
- #self.areaFixa.put(self.area,0,0)
-
- # botoes de evento
- # ferramentas
-
- botao = Botao(self.areaFixa)
- botao.adicionaBotao('corlinha.png',-1,15,10,self.mousedown, "Cor Linha")
- botao.adicionaBotao('balde.png',-2,15,40,self.mousedown, "Balde")
-
- botao.adicionaBotao('linha.png',1,15,100,self.mousedown, "Linha")
- botao.adicionaBotao('lapis.png',2,130,110,self.mousedown, "Lapis")
- botao.adicionaBotao('borracha.png',3,90,180,self.mousedown, "Borracha")
- botao.adicionaBotao('letra.png',4,50,220,self.mousedown, "Letra")
- botao.adicionaBotao('circulo.png',5,25,270,self.mousedown, "Circulo")
- botao.adicionaBotao('quadrado.png',6,20,320,self.mousedown, "Quadrado")
- botao.adicionaBotao('vassoura.png',7,20,360,self.mousedown, "Vassoura")
- # cor preenchimento
- # deprecated
- botao.adicionaBotao('roxo.png',8,210,42,self.mousedown, "Preenchimento Roxo")
- botao.adicionaBotao('amarelo.png',9,54,40,self.mousedown, "Preenchimento Amarelo")
- botao.adicionaBotao('preto.png',10,90,42,self.mousedown, "Preenchimento Preto")
- botao.adicionaBotao('azul.png',11,120,40,self.mousedown, "Preenchimento Azul")
- botao.adicionaBotao('verde.png',12,150,42,self.mousedown, "Preenchimento Verde")
- botao.adicionaBotao('vermelho.png',13,180,40,self.mousedown, "Preenchimento Vermelho")
- botao.adicionaBotao('laranja.png',14,280,42,self.mousedown, "Preenchimento Laranja")
- botao.adicionaBotao('branco.png',15,240,40,self.mousedown, "Preenchimento Branco")
-
- # cor linha
- # deprecated
- botao.adicionaBotao('roxo.png',16,210,12,self.mousedown, "Linha Roxa")
- botao.adicionaBotao('amarelo.png',17,54,10,self.mousedown, "Linha Amarela")
- botao.adicionaBotao('preto.png',18,90,12,self.mousedown, "Linha Preta")
- botao.adicionaBotao('azul.png',19,120,10,self.mousedown, "Linha Azul")
- botao.adicionaBotao('verde.png',20,150,12,self.mousedown, "Linha Verde")
- botao.adicionaBotao('vermelho.png',21,180,10,self.mousedown, "Linha Vermelha")
- botao.adicionaBotao('laranja.png',22,280,12,self.mousedown, "Linha Laranja")
- botao.adicionaBotao('branco.png',23,240,10,self.mousedown, "Linha Branca")
-
- botao.adicionaBotao('abrir.png',24,660,10,self.mousedown, "Abrir")
- botao.adicionaBotao('salvar.png',25,600,10,self.mousedown, "Salvar")
- botao.adicionaBotao('selecao.png',26,550,10,self.mousedown, "Selecao")
- botao.adicionaBotao('poligono.png',27,70,95,self.mousedown, "Poligono")
-
- self.window.add(self.areaFixa)
- self.window.connect("destroy", gtk.main_quit)
- # desenho de texto
-
- self.entrada = gtk.Entry(max=50)
- self.areaFixa.put(self.entrada,100,100)
-
- self.window.show_all()
- self.entrada.hide()
-
- #self.area.show()
- #
-
- def mousedown(self,widget,event, ferramenta):
- """Verify what event was called when the mouse pressed a button.
-
- Keyword arguments:
- self -- Oficina.Oficina instance
- widget -- gtk.EventBox
- event -- GdkEvent
- ferramenta -- integer "enum"
-
- """
- self.entrada.hide()
- if ferramenta == 7:
- self.area.d.limpatudo() #vassoura
- elif ferramenta == 8:
- self.area.mudacor(0) #roxo
- elif ferramenta == 9:
- self.area.mudacor(1) #amarelo
- elif ferramenta == 10:
- self.area.mudacor(2) #preto
- elif ferramenta == 11:
- self.area.mudacor(3) #azul
- elif ferramenta == 12:
- self.area.mudacor(4) #verde
- elif ferramenta == 13:
- self.area.mudacor(5) #vermelho
- elif ferramenta == 14:
- self.area.mudacor(6) #laranja
- elif ferramenta == 15:
- self.area.mudacor(7) #branco
- elif ferramenta == 16:
- self.area.mudacorlinha(0)
- elif ferramenta == 17:
- self.area.mudacorlinha(1)
- elif ferramenta == 18:
- self.area.mudacorlinha(2)
- elif ferramenta == 19:
- self.area.mudacorlinha(3)
- elif ferramenta == 20:
- self.area.mudacorlinha(4)
- elif ferramenta == 21:
- self.area.mudacorlinha(5)
- elif ferramenta == 22:
- self.area.mudacorlinha(6)
- elif ferramenta == 23:
- self.area.mudacorlinha(7)
- elif ferramenta == 24:
- dialog = gtk.FileChooserDialog(title=('Abrir Arquivo...'),
- action=gtk.FILE_CHOOSER_ACTION_OPEN,
- buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_SAVE, gtk.RESPONSE_OK))
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- gtk28 = False
- file_path = dialog.get_filename()
- file_path = self.decode_path((file_path,))[0]
- self.open(file_path)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
- dialog.destroy()
-
- elif ferramenta == 25:
- dialog = gtk.FileChooserDialog(title=('Salvar Arquivo como...'),
- action=gtk.FILE_CHOOSER_ACTION_SAVE,
- buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_SAVE, gtk.RESPONSE_OK))
-
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- gtk28 = False
- file_path = dialog.get_filename()
- file_path = self.decode_path((file_path,))[0]
- self.save(file_path)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
- dialog.destroy()
-
- else:
- if ferramenta == 1:
- print "linha"
- self.area.window.set_cursor(self.cursorLinha.cursor())
- elif ferramenta == 2:
- print "lapis"
- self.area.window.set_cursor(self.cursorLapis.cursor())
- elif ferramenta == 3:
- print "borracha"
- self.area.window.set_cursor(self.cursorBorracha.cursor())
- elif ferramenta == 4:
- print "letra"
- self.area.window.set_cursor(self.cursorLetra.cursor())
- elif ferramenta == 5:
- print "circulo"
- self.area.window.set_cursor(self.cursorCirculo.cursor())
- elif ferramenta == 6:
- print "quadrado"
- self.area.window.set_cursor(self.cursorQuadrado.cursor())
- elif ferramenta == 26:
- self.area.window.set_cursor(self.cursorSelecao.cursor())
- elif ferramenta == 27:
- self.area.window.set_cursor(self.cursorPoligono.cursor())
- self.area.primeira = 1
-
- self.area.ferramenta = ferramenta
-
- def open(self, name):
- self.area.d.limpatudo()
- self.area.d.loadImage(name)
-
- def save(self, name):
- """Save the drawing.
-
- Keyword arguments:
- self -- Oficina.Oficina instance
- name -- string (path where the file will be saved)
-
- """
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, DRAW_WIDTH, DRAW_HEIGHT)
- pixbuf.get_from_drawable(self.area.pixmap, gtk.gdk.colormap_get_system(), 0, 0, 0, 0, -1, -1)
- pixbuf.save(name + ".png", "png", {})
-
- def decode_path(self, file_paths):
- """
-
- Keyword arguments:
- self -- Oficina.Oficina instance
- file_paths -- tuple with the string of the path
-
- """
- file_paths_list = list()
- if os.name == 'nt': # Windows
- for file_path in file_paths:
- file_path = file_path.decode('utf8')
- file_paths_list.append(file_path)
- print "file_path", file_path
-
- else:
- for file_path in file_paths:
- try:
- file_path = file_path.decode(sys.getfilesystemencoding())
- except:
- try:
- file_path = file_path.decode('utf-8')
- except:
- pass
- file_paths_list.append(file_path)
-
- return file_paths_list
diff --git a/OficinaActivity.py b/OficinaActivity.py
index add4fca..cbb3ce6 100644
--- a/OficinaActivity.py
+++ b/OficinaActivity.py
@@ -1,3 +1,58 @@
+# -*- coding: utf-8 -*-
+"""
+Desenho.py
+
+Create Oficina Activity
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+Colaborators:
+Bruno Gola (brunogola@gmail.com)
+
+Group Manager:
+Irene Karaguilla Ficheman (irene@lsi.usp.br)
+
+Cientific Coordinator:
+Roseli de Deus Lopes (roseli@lsi.usp.br)
+
+"""
+
+
import os
from gettext import gettext as _
@@ -8,7 +63,6 @@ from sugar.activity import activity
#from Oficina import Oficina
from toolbox import Toolbox
from Area import Area
-from Cursors import Cursors
# DRAW_WIDTH = 1195
# DRAW_HEIGHT = 800
@@ -41,8 +95,8 @@ class OficinaActivity(activity.Activity):
color = gtk.gdk.color_parse("white")
self._fixed.modify_bg(gtk.STATE_NORMAL, color)
- self.bg = gtk.Image()
- self.bg.set_from_file('./icons/bg.svg')
+ self.bg = gtk.Image()
+ self.bg.set_from_file('./icons/bg.svg')
self._fixed.put(self.bg, 200, 100)
self.bg.show()
@@ -75,8 +129,10 @@ class OficinaActivity(activity.Activity):
print 'read file...'
print file_path
#self._area.d.limpatudo()
- #self._area.d.clear()
- self._area.d.loadImage(file_path)
+ #self._area.d.clear()
+ self._area.d.loadImage(file_path, self._area)
+ self._area.undo_times = 1
+ self._area.redo_times = 0
def write_file(self, file_path):
@@ -88,7 +144,7 @@ class OficinaActivity(activity.Activity):
'''
print file_path
width, height = self._area.window.get_size()
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, width, height)
- pixbuf.get_from_drawable(self._area.pixmap, gtk.gdk.colormap_get_system(), 0, 0, 0, 0, -1, -1)
+ pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, width, height)
+ pixbuf.get_from_drawable(self._area.pixmap, gtk.gdk.colormap_get_system(), 0, 0, 0, 0, -1, -1)
pixbuf.save(file_path, 'png', {})
diff --git a/Rede.py b/Rede.py
deleted file mode 100644
index 526069b..0000000
--- a/Rede.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import sys
-from gtk import gdk
-
-class Mensagens:
- def __init__(self, areadesenho):
- pass
- def criaConexao(self):
- pass
- def enviaServidor(self, msg):
- pass
- def getMessage(self, source, condition):
- pass
- def handle_data(self, data):
- pass
-
-
diff --git a/activity/.svn/entries b/activity/.svn/entries
index 243708e..8a448fc 100644
--- a/activity/.svn/entries
+++ b/activity/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/activity
https://oficina.googlecode.com/svn
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:21.000000Z
+2007-07-23T19:49:35.000000Z
5ced69d7f93f9c3a0c09a10a4d041748
2007-07-15T19:56:43.170916Z
48
@@ -44,7 +44,7 @@ file
-2007-07-16T13:46:21.000000Z
+2007-07-23T19:49:35.000000Z
d4879eae4813a66794e2c9f286b1f06c
2007-07-15T19:56:43.170916Z
48
diff --git a/activity/activity.info b/activity/activity.info
index d99c8a1..d30d8c6 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,6 +1,6 @@
[Activity]
name = Paint
-activity_version = 3
+activity_version = 1
service_name = org.laptop.Oficina
icon = activity-rgbpaint
class = OficinaActivity.OficinaActivity
diff --git a/activity/activity.info~ b/activity/activity.info~
deleted file mode 100644
index d30d8c6..0000000
--- a/activity/activity.info~
+++ /dev/null
@@ -1,7 +0,0 @@
-[Activity]
-name = Paint
-activity_version = 1
-service_name = org.laptop.Oficina
-icon = activity-rgbpaint
-class = OficinaActivity.OficinaActivity
-
diff --git a/eggfill.c b/eggfill.c
new file mode 100644
index 0000000..5f1010a
--- /dev/null
+++ b/eggfill.c
@@ -0,0 +1,193 @@
+/*
+eggfill.c
+
+Fill function and queue list
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+*/
+#include <gtk/gtk.h>
+#include "eggfill.h"
+
+/*for queue*/
+#define front(Q) ( (Q)->Front )
+#define rear(Q) ( (Q)->Rear )
+
+struct Node {
+ ElementType Element;
+ PtrToNode Next;
+ };
+
+struct QueueL{
+ PtrToNode Front;
+ PtrToNode Rear;
+ } ;
+
+/* this queue has a Header that points to the Front and Rear elements */
+/* empty queue: Q->Front = NULL and Q->Rear = NULL */
+
+/* check if queue Q is empty */
+int IsEmpty( Queue Q ){
+ return ((front(Q)==NULL) && (rear(Q)==NULL));
+}
+
+Queue CreateQueue( void ){
+ Queue Q;
+ Q = malloc ( sizeof (struct Node));
+
+ /* check if there is enough space */
+ if( Q == NULL )
+ printf( "Out of space!!!" );
+
+ front(Q) = NULL;
+ rear(Q) = NULL;
+
+ return Q;
+}
+
+void DisposeQueue( Queue Q ){
+ MakeEmpty(Q);
+ free(Q);
+}
+
+void MakeEmpty( Queue Q ){
+ if( Q == NULL )
+ printf( "Must use CreateQueue first" );
+ else
+ while( !IsEmpty( Q ) )
+ Dequeue( Q );
+}
+
+
+void Enqueue( ElementType X, Queue Q ){
+ PtrToNode TmpCell;
+ TmpCell = malloc( sizeof( struct Node ) );
+ if( TmpCell == NULL )
+ printf( "Out of space!!!" );
+ else {
+ TmpCell->Element = X;
+ TmpCell->Next = NULL;//rear(Q);
+ if (IsEmpty(Q)){
+ //printf("The Queue is empty\n");
+ front(Q)=TmpCell;
+ } else rear(Q)->Next = TmpCell;
+ rear(Q) = TmpCell;
+ }
+}
+
+
+//Mostra o Elemento e 1o da Fila
+ElementType Front( Queue Q ){
+ if (IsEmpty(Q)){
+ printf( "Empty queue" );
+ return 0; /* Return value used to avoid warning */
+ } else {
+ return front(Q)->Element;
+ }
+}
+
+void Dequeue( Queue Q ){
+ PtrToNode tmpCell;
+ tmpCell = malloc( sizeof( struct Node ) );
+ if( IsEmpty( Q ) )
+ printf( "Empty queue" );
+ else {
+ tmpCell=front(Q);
+ front(Q)=front(Q)->Next;
+ if (front(Q)==NULL)
+ rear(Q)=NULL;
+ free(tmpCell);
+ }
+} /* end of queue*/
+
+void fill(GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height, int color){
+
+ int color_start;
+
+ Queue lista_xy;
+
+ lista_xy = CreateQueue();
+
+ GdkImage *image;
+ image = gdk_drawable_get_image(drawable,0,0,width,height);
+
+ color_start = gdk_image_get_pixel(image, x, y);
+
+ if (color!=color_start) {
+ Enqueue(x, lista_xy);
+ Enqueue(y, lista_xy);
+ gdk_image_put_pixel(image, x, y, color);
+ while (!IsEmpty(lista_xy)) {
+ if (x+1 < width){
+ if (gdk_image_get_pixel(image, x+1, y) == color_start){
+ gdk_image_put_pixel(image, x+1, y, color);
+ Enqueue(x+1, lista_xy);
+ Enqueue(y, lista_xy);
+ }
+ }
+ if (x-1 >= 0){
+ if (gdk_image_get_pixel(image, x-1, y) == color_start){
+ gdk_image_put_pixel(image, x-1, y, color);
+ Enqueue(x-1, lista_xy);
+ Enqueue(y, lista_xy);
+ }
+ }
+ if (y+1 < height){
+ if (gdk_image_get_pixel(image, x, y+1) == color_start){
+ gdk_image_put_pixel(image, x, y+1, color);
+ Enqueue(x, lista_xy);
+ Enqueue(y+1, lista_xy);
+ }
+ }
+ if (y-1 >= 0){
+ if (gdk_image_get_pixel(image, x, y-1) == color_start){
+ gdk_image_put_pixel(image, x, y-1, color);
+ Enqueue(x, lista_xy);
+ Enqueue(y-1, lista_xy);
+ }
+ }
+ x = Front(lista_xy);
+ Dequeue(lista_xy);
+ y = Front(lista_xy);
+ Dequeue(lista_xy);
+ }
+ }
+
+ gdk_draw_image(drawable, gc, image, 0,0,0,0,width,height);
+
+}
diff --git a/eggfill.h b/eggfill.h
new file mode 100644
index 0000000..2d1d90a
--- /dev/null
+++ b/eggfill.h
@@ -0,0 +1,63 @@
+/*
+eggfill.h
+
+Fill function and queue list
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+/*to implement a queue */
+typedef int ElementType;
+struct Node;
+typedef struct Node *PtrToNode;
+typedef PtrToNode List;
+typedef PtrToNode Position;
+typedef struct QueueL *Queue;
+int IsEmpty( Queue Q );
+Queue CreateQueue( void );
+void DisposeQueue( Queue Q );
+void MakeEmpty( Queue Q );
+void Enqueue( ElementType X, Queue Q );
+ElementType Front( Queue Q );
+void Dequeue( Queue Q );
+/*end of queue*/
+void fill(GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height, int color);
diff --git a/fill.so b/fill.so
new file mode 100755
index 0000000..9668cb5
--- /dev/null
+++ b/fill.so
Binary files differ
diff --git a/fill_src/.svn/all-wcprops b/fill_src/.svn/all-wcprops
new file mode 100644
index 0000000..b2713ff
--- /dev/null
+++ b/fill_src/.svn/all-wcprops
@@ -0,0 +1,47 @@
+K 25
+svn:wc:ra_dav:version-url
+V 31
+/svn/!svn/ver/73/trunk/fill_src
+END
+eggfill.h
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/73/trunk/fill_src/eggfill.h
+END
+fill.override
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/73/trunk/fill_src/fill.override
+END
+fill.defs
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/73/trunk/fill_src/fill.defs
+END
+fill.c
+K 25
+svn:wc:ra_dav:version-url
+V 38
+/svn/!svn/ver/73/trunk/fill_src/fill.c
+END
+eggfill.c
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/73/trunk/fill_src/eggfill.c
+END
+Makefile
+K 25
+svn:wc:ra_dav:version-url
+V 40
+/svn/!svn/ver/73/trunk/fill_src/Makefile
+END
+fillmodule.c
+K 25
+svn:wc:ra_dav:version-url
+V 44
+/svn/!svn/ver/73/trunk/fill_src/fillmodule.c
+END
diff --git a/fill_src/.svn/entries b/fill_src/.svn/entries
new file mode 100644
index 0000000..c8a6985
--- /dev/null
+++ b/fill_src/.svn/entries
@@ -0,0 +1,112 @@
+8
+
+dir
+76
+https://oficina.googlecode.com/svn/trunk/fill_src
+https://oficina.googlecode.com/svn
+
+
+
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+e2fb0b9f-bc32-0410-ab74-19e9d00b4e58
+
+eggfill.h
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+5caebde9b82e0aed2dfc7a9e78e7ba37
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+fill.override
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+8a88924614be96f7743360b57972c735
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+fill.defs
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+73392e9b1d2f00ff7560fafd2f63afe6
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+fill.c
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+29e282d52adc6113fb9deade1c0874fe
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+eggfill.c
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+a97a14d9c934b42346748a925d532185
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+Makefile
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+c09aa8e741fa2d9fb4aa477c6331c86d
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
+fillmodule.c
+file
+
+
+
+
+2007-07-23T19:49:36.000000Z
+882baa193e1332c948ba7b6972180ca6
+2007-07-23T17:47:19.360150Z
+73
+pekayatt
+
diff --git a/fill_src/.svn/format b/fill_src/.svn/format
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/fill_src/.svn/format
@@ -0,0 +1 @@
+8
diff --git a/fill_src/.svn/text-base/Makefile.svn-base b/fill_src/.svn/text-base/Makefile.svn-base
new file mode 100644
index 0000000..dc1f3ec
--- /dev/null
+++ b/fill_src/.svn/text-base/Makefile.svn-base
@@ -0,0 +1,55 @@
+#Copyright 2007, NATE-LSI-EPUSP
+
+#Oficina is developed in Brazil at Escola Politécnica of
+#Universidade de São Paulo. NATE is part of LSI (Integrable
+#Systems Laboratory) and stands for Learning, Work and Entertainment
+#Research Group. Visit our web page:
+#www.nate.lsi.usp.br
+#Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+#Oficina 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 version 2 of
+#the License.
+
+#Oficina 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 Oficina; if not, write to the
+#Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+#Boston, MA 02110-1301 USA.
+#The copy of the GNU General Public License is found in the
+#COPYING file included in the source distribution.
+
+
+#Authors:
+
+#Joyce Alessandra Saul (joycealess@gmail.com)
+#Andre Mossinato (andremossinato@gmail.com)
+#Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+#Pedro Kayatt (pekayatt@gmail.com)
+#Rafael Barbolo Lopes (barbolo@gmail.com)
+#Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -I/usr/include/python2.5/ -I. -I/usr/include/pygtk-2.0/
+LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0`
+
+fill.so: fill.o eggfill.o fillmodule.o
+ $(CC) $(LDFLAGS) -shared $^ -o $@
+
+DEFS=`pkg-config --variable=defsdir pygtk-2.0`
+# Generate the C wrapper
+fill.c: fill.defs fill.override
+ pygtk-codegen-2.0 --prefix fill \
+ --register $(DEFS)/gdk-types.defs \
+ --register $(DEFS)/gdk-base.defs \
+ --register $(DEFS)/gtk-types.defs \
+ --override fill.override \
+ fill.defs > $@
+
+clean:
+ rm -f fill.so *.o fill.c *~
+
diff --git a/fill_src/.svn/text-base/eggfill.c.svn-base b/fill_src/.svn/text-base/eggfill.c.svn-base
new file mode 100644
index 0000000..5f1010a
--- /dev/null
+++ b/fill_src/.svn/text-base/eggfill.c.svn-base
@@ -0,0 +1,193 @@
+/*
+eggfill.c
+
+Fill function and queue list
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+*/
+#include <gtk/gtk.h>
+#include "eggfill.h"
+
+/*for queue*/
+#define front(Q) ( (Q)->Front )
+#define rear(Q) ( (Q)->Rear )
+
+struct Node {
+ ElementType Element;
+ PtrToNode Next;
+ };
+
+struct QueueL{
+ PtrToNode Front;
+ PtrToNode Rear;
+ } ;
+
+/* this queue has a Header that points to the Front and Rear elements */
+/* empty queue: Q->Front = NULL and Q->Rear = NULL */
+
+/* check if queue Q is empty */
+int IsEmpty( Queue Q ){
+ return ((front(Q)==NULL) && (rear(Q)==NULL));
+}
+
+Queue CreateQueue( void ){
+ Queue Q;
+ Q = malloc ( sizeof (struct Node));
+
+ /* check if there is enough space */
+ if( Q == NULL )
+ printf( "Out of space!!!" );
+
+ front(Q) = NULL;
+ rear(Q) = NULL;
+
+ return Q;
+}
+
+void DisposeQueue( Queue Q ){
+ MakeEmpty(Q);
+ free(Q);
+}
+
+void MakeEmpty( Queue Q ){
+ if( Q == NULL )
+ printf( "Must use CreateQueue first" );
+ else
+ while( !IsEmpty( Q ) )
+ Dequeue( Q );
+}
+
+
+void Enqueue( ElementType X, Queue Q ){
+ PtrToNode TmpCell;
+ TmpCell = malloc( sizeof( struct Node ) );
+ if( TmpCell == NULL )
+ printf( "Out of space!!!" );
+ else {
+ TmpCell->Element = X;
+ TmpCell->Next = NULL;//rear(Q);
+ if (IsEmpty(Q)){
+ //printf("The Queue is empty\n");
+ front(Q)=TmpCell;
+ } else rear(Q)->Next = TmpCell;
+ rear(Q) = TmpCell;
+ }
+}
+
+
+//Mostra o Elemento e 1o da Fila
+ElementType Front( Queue Q ){
+ if (IsEmpty(Q)){
+ printf( "Empty queue" );
+ return 0; /* Return value used to avoid warning */
+ } else {
+ return front(Q)->Element;
+ }
+}
+
+void Dequeue( Queue Q ){
+ PtrToNode tmpCell;
+ tmpCell = malloc( sizeof( struct Node ) );
+ if( IsEmpty( Q ) )
+ printf( "Empty queue" );
+ else {
+ tmpCell=front(Q);
+ front(Q)=front(Q)->Next;
+ if (front(Q)==NULL)
+ rear(Q)=NULL;
+ free(tmpCell);
+ }
+} /* end of queue*/
+
+void fill(GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height, int color){
+
+ int color_start;
+
+ Queue lista_xy;
+
+ lista_xy = CreateQueue();
+
+ GdkImage *image;
+ image = gdk_drawable_get_image(drawable,0,0,width,height);
+
+ color_start = gdk_image_get_pixel(image, x, y);
+
+ if (color!=color_start) {
+ Enqueue(x, lista_xy);
+ Enqueue(y, lista_xy);
+ gdk_image_put_pixel(image, x, y, color);
+ while (!IsEmpty(lista_xy)) {
+ if (x+1 < width){
+ if (gdk_image_get_pixel(image, x+1, y) == color_start){
+ gdk_image_put_pixel(image, x+1, y, color);
+ Enqueue(x+1, lista_xy);
+ Enqueue(y, lista_xy);
+ }
+ }
+ if (x-1 >= 0){
+ if (gdk_image_get_pixel(image, x-1, y) == color_start){
+ gdk_image_put_pixel(image, x-1, y, color);
+ Enqueue(x-1, lista_xy);
+ Enqueue(y, lista_xy);
+ }
+ }
+ if (y+1 < height){
+ if (gdk_image_get_pixel(image, x, y+1) == color_start){
+ gdk_image_put_pixel(image, x, y+1, color);
+ Enqueue(x, lista_xy);
+ Enqueue(y+1, lista_xy);
+ }
+ }
+ if (y-1 >= 0){
+ if (gdk_image_get_pixel(image, x, y-1) == color_start){
+ gdk_image_put_pixel(image, x, y-1, color);
+ Enqueue(x, lista_xy);
+ Enqueue(y-1, lista_xy);
+ }
+ }
+ x = Front(lista_xy);
+ Dequeue(lista_xy);
+ y = Front(lista_xy);
+ Dequeue(lista_xy);
+ }
+ }
+
+ gdk_draw_image(drawable, gc, image, 0,0,0,0,width,height);
+
+}
diff --git a/fill_src/.svn/text-base/eggfill.h.svn-base b/fill_src/.svn/text-base/eggfill.h.svn-base
new file mode 100644
index 0000000..2d1d90a
--- /dev/null
+++ b/fill_src/.svn/text-base/eggfill.h.svn-base
@@ -0,0 +1,63 @@
+/*
+eggfill.h
+
+Fill function and queue list
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+/*to implement a queue */
+typedef int ElementType;
+struct Node;
+typedef struct Node *PtrToNode;
+typedef PtrToNode List;
+typedef PtrToNode Position;
+typedef struct QueueL *Queue;
+int IsEmpty( Queue Q );
+Queue CreateQueue( void );
+void DisposeQueue( Queue Q );
+void MakeEmpty( Queue Q );
+void Enqueue( ElementType X, Queue Q );
+ElementType Front( Queue Q );
+void Dequeue( Queue Q );
+/*end of queue*/
+void fill(GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height, int color);
diff --git a/fill_src/.svn/text-base/fill.c.svn-base b/fill_src/.svn/text-base/fill.c.svn-base
new file mode 100644
index 0000000..39c4e34
--- /dev/null
+++ b/fill_src/.svn/text-base/fill.c.svn-base
@@ -0,0 +1,79 @@
+/* -- THIS FILE IS GENERATED - DO NOT EDIT *//* -*- Mode: C; c-basic-offset: 4 -*- */
+
+#include <Python.h>
+
+
+
+#line 3 "fill.override"
+#include <Python.h>
+#include <gtk/gtk.h>
+#include "pygobject.h"
+#include "eggfill.h"
+#line 13 "fill.c"
+
+
+/* ---------- types from other modules ---------- */
+static PyTypeObject *_PyGdkDrawable_Type;
+#define PyGdkDrawable_Type (*_PyGdkDrawable_Type)
+static PyTypeObject *_PyGdkGC_Type;
+#define PyGdkGC_Type (*_PyGdkGC_Type)
+
+
+/* ---------- forward type declarations ---------- */
+
+#line 25 "fill.c"
+
+
+
+/* ----------- functions ----------- */
+
+static PyObject *
+_wrap_fill(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = { "drawable", "gc", "x", "y", "width", "height", "color", NULL };
+ PyGObject *drawable, *gc;
+ int x, y, width, height, color;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!iiiii:fill", kwlist, &PyGdkDrawable_Type, &drawable, &PyGdkGC_Type, &gc, &x, &y, &width, &height, &color))
+ return NULL;
+
+ fill(GDK_DRAWABLE(drawable->obj), GDK_GC(gc->obj), x, y, width, height, color);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+const PyMethodDef fill_functions[] = {
+ { "fill", (PyCFunction)_wrap_fill, METH_VARARGS|METH_KEYWORDS,
+ NULL },
+ { NULL, NULL, 0, NULL }
+};
+
+/* initialise stuff extension classes */
+void
+fill_register_classes(PyObject *d)
+{
+ PyObject *module;
+
+ if ((module = PyImport_ImportModule("gtk.gdk")) != NULL) {
+ _PyGdkDrawable_Type = (PyTypeObject *)PyObject_GetAttrString(module, "Drawable");
+ if (_PyGdkDrawable_Type == NULL) {
+ PyErr_SetString(PyExc_ImportError,
+ "cannot import name Drawable from gtk.gdk");
+ return ;
+ }
+ _PyGdkGC_Type = (PyTypeObject *)PyObject_GetAttrString(module, "GC");
+ if (_PyGdkGC_Type == NULL) {
+ PyErr_SetString(PyExc_ImportError,
+ "cannot import name GC from gtk.gdk");
+ return ;
+ }
+ } else {
+ PyErr_SetString(PyExc_ImportError,
+ "could not import gtk.gdk");
+ return ;
+ }
+
+
+#line 79 "fill.c"
+}
diff --git a/fill_src/.svn/text-base/fill.defs.svn-base b/fill_src/.svn/text-base/fill.defs.svn-base
new file mode 100644
index 0000000..d2ebadf
--- /dev/null
+++ b/fill_src/.svn/text-base/fill.defs.svn-base
@@ -0,0 +1,22 @@
+;; -*- scheme -*-
+; object definitions ...
+;; Enumerations and flags ...
+
+
+;; From eggfill.h
+
+(define-function fill
+ (c-name "fill")
+ (return-type "none")
+ (parameters
+ '("GdkDrawable*" "drawable")
+ '("GdkGC*" "gc")
+ '("int" "x")
+ '("int" "y")
+ '("int" "width")
+ '("int" "height")
+ '("int" "color")
+ )
+)
+
+
diff --git a/fill_src/.svn/text-base/fill.override.svn-base b/fill_src/.svn/text-base/fill.override.svn-base
new file mode 100644
index 0000000..85a2f70
--- /dev/null
+++ b/fill_src/.svn/text-base/fill.override.svn-base
@@ -0,0 +1,15 @@
+%%
+headers
+#include <Python.h>
+#include <gtk/gtk.h>
+#include "pygobject.h"
+#include "eggfill.h"
+%%
+modulename fill
+%%
+import gtk.gdk.Drawable as PyGdkDrawable_Type
+import gtk.gdk.GC as PyGdkGC_Type
+%%
+ignore-glob
+ *_get_type
+%%
diff --git a/fill_src/.svn/text-base/fillmodule.c.svn-base b/fill_src/.svn/text-base/fillmodule.c.svn-base
new file mode 100644
index 0000000..37f380c
--- /dev/null
+++ b/fill_src/.svn/text-base/fillmodule.c.svn-base
@@ -0,0 +1,65 @@
+/*
+Fill wrapper
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+Bruno Gola (brunogola@gmail.com)
+
+*/
+#include <pygobject.h>
+
+void fill_register_classes (PyObject *d);
+
+extern PyMethodDef fill_functions[];
+
+DL_EXPORT(void)
+initfill(void)
+{
+ PyObject *m, *d;
+
+ init_pygobject ();
+
+ m = Py_InitModule ("fill", fill_functions);
+ d = PyModule_GetDict (m);
+
+ fill_register_classes (d);
+
+ if (PyErr_Occurred ()) {
+ Py_FatalError ("can't initialise module fill");
+ }
+
+}
diff --git a/fill_src/Makefile b/fill_src/Makefile
new file mode 100644
index 0000000..dc1f3ec
--- /dev/null
+++ b/fill_src/Makefile
@@ -0,0 +1,55 @@
+#Copyright 2007, NATE-LSI-EPUSP
+
+#Oficina is developed in Brazil at Escola Politécnica of
+#Universidade de São Paulo. NATE is part of LSI (Integrable
+#Systems Laboratory) and stands for Learning, Work and Entertainment
+#Research Group. Visit our web page:
+#www.nate.lsi.usp.br
+#Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+#Oficina 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 version 2 of
+#the License.
+
+#Oficina 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 Oficina; if not, write to the
+#Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+#Boston, MA 02110-1301 USA.
+#The copy of the GNU General Public License is found in the
+#COPYING file included in the source distribution.
+
+
+#Authors:
+
+#Joyce Alessandra Saul (joycealess@gmail.com)
+#Andre Mossinato (andremossinato@gmail.com)
+#Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+#Pedro Kayatt (pekayatt@gmail.com)
+#Rafael Barbolo Lopes (barbolo@gmail.com)
+#Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -I/usr/include/python2.5/ -I. -I/usr/include/pygtk-2.0/
+LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0`
+
+fill.so: fill.o eggfill.o fillmodule.o
+ $(CC) $(LDFLAGS) -shared $^ -o $@
+
+DEFS=`pkg-config --variable=defsdir pygtk-2.0`
+# Generate the C wrapper
+fill.c: fill.defs fill.override
+ pygtk-codegen-2.0 --prefix fill \
+ --register $(DEFS)/gdk-types.defs \
+ --register $(DEFS)/gdk-base.defs \
+ --register $(DEFS)/gtk-types.defs \
+ --override fill.override \
+ fill.defs > $@
+
+clean:
+ rm -f fill.so *.o fill.c *~
+
diff --git a/fill_src/eggfill.c b/fill_src/eggfill.c
new file mode 100644
index 0000000..5f1010a
--- /dev/null
+++ b/fill_src/eggfill.c
@@ -0,0 +1,193 @@
+/*
+eggfill.c
+
+Fill function and queue list
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+*/
+#include <gtk/gtk.h>
+#include "eggfill.h"
+
+/*for queue*/
+#define front(Q) ( (Q)->Front )
+#define rear(Q) ( (Q)->Rear )
+
+struct Node {
+ ElementType Element;
+ PtrToNode Next;
+ };
+
+struct QueueL{
+ PtrToNode Front;
+ PtrToNode Rear;
+ } ;
+
+/* this queue has a Header that points to the Front and Rear elements */
+/* empty queue: Q->Front = NULL and Q->Rear = NULL */
+
+/* check if queue Q is empty */
+int IsEmpty( Queue Q ){
+ return ((front(Q)==NULL) && (rear(Q)==NULL));
+}
+
+Queue CreateQueue( void ){
+ Queue Q;
+ Q = malloc ( sizeof (struct Node));
+
+ /* check if there is enough space */
+ if( Q == NULL )
+ printf( "Out of space!!!" );
+
+ front(Q) = NULL;
+ rear(Q) = NULL;
+
+ return Q;
+}
+
+void DisposeQueue( Queue Q ){
+ MakeEmpty(Q);
+ free(Q);
+}
+
+void MakeEmpty( Queue Q ){
+ if( Q == NULL )
+ printf( "Must use CreateQueue first" );
+ else
+ while( !IsEmpty( Q ) )
+ Dequeue( Q );
+}
+
+
+void Enqueue( ElementType X, Queue Q ){
+ PtrToNode TmpCell;
+ TmpCell = malloc( sizeof( struct Node ) );
+ if( TmpCell == NULL )
+ printf( "Out of space!!!" );
+ else {
+ TmpCell->Element = X;
+ TmpCell->Next = NULL;//rear(Q);
+ if (IsEmpty(Q)){
+ //printf("The Queue is empty\n");
+ front(Q)=TmpCell;
+ } else rear(Q)->Next = TmpCell;
+ rear(Q) = TmpCell;
+ }
+}
+
+
+//Mostra o Elemento e 1o da Fila
+ElementType Front( Queue Q ){
+ if (IsEmpty(Q)){
+ printf( "Empty queue" );
+ return 0; /* Return value used to avoid warning */
+ } else {
+ return front(Q)->Element;
+ }
+}
+
+void Dequeue( Queue Q ){
+ PtrToNode tmpCell;
+ tmpCell = malloc( sizeof( struct Node ) );
+ if( IsEmpty( Q ) )
+ printf( "Empty queue" );
+ else {
+ tmpCell=front(Q);
+ front(Q)=front(Q)->Next;
+ if (front(Q)==NULL)
+ rear(Q)=NULL;
+ free(tmpCell);
+ }
+} /* end of queue*/
+
+void fill(GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height, int color){
+
+ int color_start;
+
+ Queue lista_xy;
+
+ lista_xy = CreateQueue();
+
+ GdkImage *image;
+ image = gdk_drawable_get_image(drawable,0,0,width,height);
+
+ color_start = gdk_image_get_pixel(image, x, y);
+
+ if (color!=color_start) {
+ Enqueue(x, lista_xy);
+ Enqueue(y, lista_xy);
+ gdk_image_put_pixel(image, x, y, color);
+ while (!IsEmpty(lista_xy)) {
+ if (x+1 < width){
+ if (gdk_image_get_pixel(image, x+1, y) == color_start){
+ gdk_image_put_pixel(image, x+1, y, color);
+ Enqueue(x+1, lista_xy);
+ Enqueue(y, lista_xy);
+ }
+ }
+ if (x-1 >= 0){
+ if (gdk_image_get_pixel(image, x-1, y) == color_start){
+ gdk_image_put_pixel(image, x-1, y, color);
+ Enqueue(x-1, lista_xy);
+ Enqueue(y, lista_xy);
+ }
+ }
+ if (y+1 < height){
+ if (gdk_image_get_pixel(image, x, y+1) == color_start){
+ gdk_image_put_pixel(image, x, y+1, color);
+ Enqueue(x, lista_xy);
+ Enqueue(y+1, lista_xy);
+ }
+ }
+ if (y-1 >= 0){
+ if (gdk_image_get_pixel(image, x, y-1) == color_start){
+ gdk_image_put_pixel(image, x, y-1, color);
+ Enqueue(x, lista_xy);
+ Enqueue(y-1, lista_xy);
+ }
+ }
+ x = Front(lista_xy);
+ Dequeue(lista_xy);
+ y = Front(lista_xy);
+ Dequeue(lista_xy);
+ }
+ }
+
+ gdk_draw_image(drawable, gc, image, 0,0,0,0,width,height);
+
+}
diff --git a/fill_src/eggfill.h b/fill_src/eggfill.h
new file mode 100644
index 0000000..2d1d90a
--- /dev/null
+++ b/fill_src/eggfill.h
@@ -0,0 +1,63 @@
+/*
+eggfill.h
+
+Fill function and queue list
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+/*to implement a queue */
+typedef int ElementType;
+struct Node;
+typedef struct Node *PtrToNode;
+typedef PtrToNode List;
+typedef PtrToNode Position;
+typedef struct QueueL *Queue;
+int IsEmpty( Queue Q );
+Queue CreateQueue( void );
+void DisposeQueue( Queue Q );
+void MakeEmpty( Queue Q );
+void Enqueue( ElementType X, Queue Q );
+ElementType Front( Queue Q );
+void Dequeue( Queue Q );
+/*end of queue*/
+void fill(GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height, int color);
diff --git a/fill_src/fill.c b/fill_src/fill.c
new file mode 100644
index 0000000..39c4e34
--- /dev/null
+++ b/fill_src/fill.c
@@ -0,0 +1,79 @@
+/* -- THIS FILE IS GENERATED - DO NOT EDIT *//* -*- Mode: C; c-basic-offset: 4 -*- */
+
+#include <Python.h>
+
+
+
+#line 3 "fill.override"
+#include <Python.h>
+#include <gtk/gtk.h>
+#include "pygobject.h"
+#include "eggfill.h"
+#line 13 "fill.c"
+
+
+/* ---------- types from other modules ---------- */
+static PyTypeObject *_PyGdkDrawable_Type;
+#define PyGdkDrawable_Type (*_PyGdkDrawable_Type)
+static PyTypeObject *_PyGdkGC_Type;
+#define PyGdkGC_Type (*_PyGdkGC_Type)
+
+
+/* ---------- forward type declarations ---------- */
+
+#line 25 "fill.c"
+
+
+
+/* ----------- functions ----------- */
+
+static PyObject *
+_wrap_fill(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = { "drawable", "gc", "x", "y", "width", "height", "color", NULL };
+ PyGObject *drawable, *gc;
+ int x, y, width, height, color;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!iiiii:fill", kwlist, &PyGdkDrawable_Type, &drawable, &PyGdkGC_Type, &gc, &x, &y, &width, &height, &color))
+ return NULL;
+
+ fill(GDK_DRAWABLE(drawable->obj), GDK_GC(gc->obj), x, y, width, height, color);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+const PyMethodDef fill_functions[] = {
+ { "fill", (PyCFunction)_wrap_fill, METH_VARARGS|METH_KEYWORDS,
+ NULL },
+ { NULL, NULL, 0, NULL }
+};
+
+/* initialise stuff extension classes */
+void
+fill_register_classes(PyObject *d)
+{
+ PyObject *module;
+
+ if ((module = PyImport_ImportModule("gtk.gdk")) != NULL) {
+ _PyGdkDrawable_Type = (PyTypeObject *)PyObject_GetAttrString(module, "Drawable");
+ if (_PyGdkDrawable_Type == NULL) {
+ PyErr_SetString(PyExc_ImportError,
+ "cannot import name Drawable from gtk.gdk");
+ return ;
+ }
+ _PyGdkGC_Type = (PyTypeObject *)PyObject_GetAttrString(module, "GC");
+ if (_PyGdkGC_Type == NULL) {
+ PyErr_SetString(PyExc_ImportError,
+ "cannot import name GC from gtk.gdk");
+ return ;
+ }
+ } else {
+ PyErr_SetString(PyExc_ImportError,
+ "could not import gtk.gdk");
+ return ;
+ }
+
+
+#line 79 "fill.c"
+}
diff --git a/fill_src/fill.defs b/fill_src/fill.defs
new file mode 100644
index 0000000..d2ebadf
--- /dev/null
+++ b/fill_src/fill.defs
@@ -0,0 +1,22 @@
+;; -*- scheme -*-
+; object definitions ...
+;; Enumerations and flags ...
+
+
+;; From eggfill.h
+
+(define-function fill
+ (c-name "fill")
+ (return-type "none")
+ (parameters
+ '("GdkDrawable*" "drawable")
+ '("GdkGC*" "gc")
+ '("int" "x")
+ '("int" "y")
+ '("int" "width")
+ '("int" "height")
+ '("int" "color")
+ )
+)
+
+
diff --git a/fill_src/fill.override b/fill_src/fill.override
new file mode 100644
index 0000000..85a2f70
--- /dev/null
+++ b/fill_src/fill.override
@@ -0,0 +1,15 @@
+%%
+headers
+#include <Python.h>
+#include <gtk/gtk.h>
+#include "pygobject.h"
+#include "eggfill.h"
+%%
+modulename fill
+%%
+import gtk.gdk.Drawable as PyGdkDrawable_Type
+import gtk.gdk.GC as PyGdkGC_Type
+%%
+ignore-glob
+ *_get_type
+%%
diff --git a/fill_src/fillmodule.c b/fill_src/fillmodule.c
new file mode 100644
index 0000000..37f380c
--- /dev/null
+++ b/fill_src/fillmodule.c
@@ -0,0 +1,65 @@
+/*
+Fill wrapper
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+Bruno Gola (brunogola@gmail.com)
+
+*/
+#include <pygobject.h>
+
+void fill_register_classes (PyObject *d);
+
+extern PyMethodDef fill_functions[];
+
+DL_EXPORT(void)
+initfill(void)
+{
+ PyObject *m, *d;
+
+ init_pygobject ();
+
+ m = Py_InitModule ("fill", fill_functions);
+ d = PyModule_GetDict (m);
+
+ fill_register_classes (d);
+
+ if (PyErr_Occurred ()) {
+ Py_FatalError ("can't initialise module fill");
+ }
+
+}
diff --git a/icons/.svn/all-wcprops b/icons/.svn/all-wcprops
index 0ecb0b9..3820ada 100644
--- a/icons/.svn/all-wcprops
+++ b/icons/.svn/all-wcprops
@@ -1,7 +1,7 @@
K 25
svn:wc:ra_dav:version-url
V 28
-/svn/!svn/ver/38/trunk/icons
+/svn/!svn/ver/59/trunk/icons
END
object-width.svg
K 25
@@ -225,12 +225,6 @@ svn:wc:ra_dav:version-url
V 53
/svn/!svn/ver/16/trunk/icons/tool-shape-trapezoid.svg
END
-bucket_cursor.svg
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/34/trunk/icons/bucket_cursor.svg
-END
format-justify-left.svg
K 25
svn:wc:ra_dav:version-url
@@ -261,9 +255,3 @@ svn:wc:ra_dav:version-url
V 57
/svn/!svn/ver/16/trunk/icons/tool-marquee-rectangular.svg
END
-brush_cursor.svg
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/34/trunk/icons/brush_cursor.svg
-END
diff --git a/icons/.svn/entries b/icons/.svn/entries
index ce8f13d..ec58d65 100644
--- a/icons/.svn/entries
+++ b/icons/.svn/entries
@@ -1,15 +1,15 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/icons
https://oficina.googlecode.com/svn
-2007-07-11T22:04:55.816866Z
-38
-joycealess
+2007-07-18T20:35:24.502757Z
+59
+nathalia.sautchuk
svn:special svn:externals svn:needs-lock
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
1b30b4261b33892ddc24a88687236934
2007-07-09T17:30:08.359449Z
16
@@ -44,7 +44,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
3d66b428030358ffb8dcd4671c6a2bd5
2007-07-11T00:53:52.860928Z
25
@@ -56,7 +56,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
5b10db3a9d3174a815b927930d3fab9e
2007-07-09T17:30:08.359449Z
16
@@ -68,7 +68,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
655e740e804bddad854220e22d19ab56
2007-07-11T22:04:55.816866Z
38
@@ -80,7 +80,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
ac201e3c8064d2d68bb08aa3576a46c9
2007-07-09T17:30:08.359449Z
16
@@ -92,7 +92,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
7569c5cbded502384ad4fa275608caca
2007-07-09T17:30:08.359449Z
16
@@ -104,7 +104,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
b7358e0fc6411671d79d17981fc38b19
2007-07-09T17:30:08.359449Z
16
@@ -116,7 +116,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
ea5b569b0607fffcc4ca7dbfff0bb3ca
2007-07-10T00:59:32.307893Z
19
@@ -128,7 +128,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
a2c3d288a7143a3b6d3730ac6514c6f6
2007-07-09T17:30:08.359449Z
16
@@ -140,7 +140,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
6349d68cb94da2538dbd5bf6510ba8b9
2007-07-09T17:30:08.359449Z
16
@@ -152,7 +152,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
53e5cc4e49257abecf42be80e89ae2cb
2007-07-09T17:30:08.359449Z
16
@@ -164,7 +164,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
1c6745cad816b8c06442532d753b4c69
2007-07-11T21:11:51.124065Z
35
@@ -176,7 +176,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
563d404cd9eb5564dc8755d6a9d89229
2007-07-09T17:30:08.359449Z
16
@@ -188,80 +188,68 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
e49e130a054dd297c3dd83a65d725f61
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-object-height.svg
-file
-
-
-
-
-2007-07-16T13:46:28.000000Z
-5136d4efa9aa305dfee18e7058e92b96
-2007-07-09T17:30:08.359449Z
-16
-alexandremartinazzo
-
icon-fill.svg
file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
e8feaa6e7c01a58d023230c5271a2e68
2007-07-10T00:59:32.307893Z
19
joycealess
-object-rotate-right.svg
+object-height.svg
file
-2007-07-16T13:46:28.000000Z
-5da560d2dfa6feda4c8607dd69ff6cb3
+2007-07-23T19:49:40.000000Z
+5136d4efa9aa305dfee18e7058e92b96
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-tool-shape-rectangle.svg
+format-text-italic.svg
file
-2007-07-16T13:46:28.000000Z
-393c1815080f6c32e7b46d768d50bbe3
+2007-07-23T19:49:40.000000Z
+a850db558c3ee9e4c48c858b8d6b5882
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-format-text-italic.svg
+tool-shape-rectangle.svg
file
-2007-07-16T13:46:28.000000Z
-a850db558c3ee9e4c48c858b8d6b5882
+2007-07-23T19:49:40.000000Z
+393c1815080f6c32e7b46d768d50bbe3
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-tool-shape-triangle.svg
+object-rotate-right.svg
file
-2007-07-16T13:46:28.000000Z
-63c237a53add3ee92f78dcf19b025b06
+2007-07-23T19:49:40.000000Z
+5da560d2dfa6feda4c8607dd69ff6cb3
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
@@ -272,20 +260,20 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
cf0ab1e88a64f839cdd141c7043e7da2
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-tool-shape-star.svg
+tool-shape-triangle.svg
file
-2007-07-16T13:46:28.000000Z
-a55eed656b2ae223c85e027195a17ac0
+2007-07-23T19:49:40.000000Z
+63c237a53add3ee92f78dcf19b025b06
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
@@ -296,32 +284,32 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
153156a7ef9c178ed1545afe2191af18
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-tool-pencil.svg
+tool-shape-star.svg
file
-2007-07-16T13:46:28.000000Z
-2d2d1720c53aed8ad422ad9cb0706665
+2007-07-23T19:49:40.000000Z
+a55eed656b2ae223c85e027195a17ac0
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-edit-undo.svg
+tool-pencil.svg
file
-2007-07-16T13:46:28.000000Z
-f5469f3e20e7d35f397abbc53d9bb44e
+2007-07-23T19:49:40.000000Z
+2d2d1720c53aed8ad422ad9cb0706665
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
@@ -332,19 +320,31 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
7dd2a79d716c5e58d2397acf7034846c
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
+edit-undo.svg
+file
+
+
+
+
+2007-07-23T19:49:40.000000Z
+f5469f3e20e7d35f397abbc53d9bb44e
+2007-07-09T17:30:08.359449Z
+16
+alexandremartinazzo
+
tool-shape-parallelogram.svg
file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
a3ba7afdf43083bf211d00a148151171
2007-07-09T17:30:08.359449Z
16
@@ -356,32 +356,32 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
63d491adb8dea6c891054344f6bc200b
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-format-text-underline.svg
+edit-copy.svg
file
-2007-07-16T13:46:28.000000Z
-6cf8ba5c06ffa7bc4a13af4ea92791d2
+2007-07-23T19:49:40.000000Z
+5ae430fc4a3faaf20ca3f6f3ce233c8e
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-edit-copy.svg
+format-text-underline.svg
file
-2007-07-16T13:46:28.000000Z
-5ae430fc4a3faaf20ca3f6f3ce233c8e
+2007-07-23T19:49:40.000000Z
+6cf8ba5c06ffa7bc4a13af4ea92791d2
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
@@ -392,7 +392,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
623820ab0b2c320651afdf2ccb3aed27
2007-07-09T17:30:08.359449Z
16
@@ -404,7 +404,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
76a7d3f503150836c214e09a12d42658
2007-07-09T17:30:08.359449Z
16
@@ -416,7 +416,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
340267d9bec6af601eabb0b16f616592
2007-07-09T17:30:08.359449Z
16
@@ -428,7 +428,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
f2c12f70fdccb7b5473032c08c497eb4
2007-07-09T17:30:08.359449Z
16
@@ -440,7 +440,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
ce09016ce6f5be5c946273a5c032eff2
2007-07-11T21:11:51.124065Z
35
@@ -452,7 +452,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
adcd21782f71b6b339d4bd37d187d9d3
2007-07-09T17:30:08.359449Z
16
@@ -464,31 +464,19 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
e6d5ba414520fad5ddff0a83a7f4bab8
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-bucket_cursor.svg
-file
-
-
-
-
-2007-07-16T13:46:28.000000Z
-a2f66538482fc192d6d6b6dcd8799249
-2007-07-11T20:50:12.464219Z
-34
-joycealess
-
format-justify-left.svg
file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
ac45c7bfc3bc00ef03a084259f71be83
2007-07-09T17:30:08.359449Z
16
@@ -500,7 +488,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
539b0034eeddb6fe05c5bab1bc9979ed
2007-07-09T17:30:08.359449Z
16
@@ -512,7 +500,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
489dc74808baf5aa59b310f0ca3f1176
2007-07-09T17:30:08.359449Z
16
@@ -524,7 +512,7 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
497e724825b35b4f9071839ac7f3e54f
2007-07-09T17:30:08.359449Z
16
@@ -536,21 +524,9 @@ file
-2007-07-16T13:46:28.000000Z
+2007-07-23T19:49:40.000000Z
c3dc83404092717bfa58e586fc901c90
2007-07-09T17:30:08.359449Z
16
alexandremartinazzo
-brush_cursor.svg
-file
-
-
-
-
-2007-07-16T13:46:28.000000Z
-59598ad92152a64b8105bc7336ebc47e
-2007-07-11T20:50:12.464219Z
-34
-joycealess
-
diff --git a/icons/.svn/text-base/brush_cursor.svg.svn-base b/icons/.svn/text-base/brush_cursor.svg.svn-base
deleted file mode 100644
index 27d8d46..0000000
--- a/icons/.svn/text-base/brush_cursor.svg.svn-base
+++ /dev/null
@@ -1,67 +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://web.resource.org/cc/"
- 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.45"
- sodipodi:docname="brush_cursor.svg"
- sodipodi:docbase="/home/joy/sugar-jhbuild/build/share/activities/Oficina.activity/icons"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true"><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" /><sodipodi:namedview
- inkscape:window-height="594"
- inkscape:window-width="833"
- 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"
- inkscape:zoom="6.8909091"
- inkscape:cx="27.5"
- inkscape:cy="27.690396"
- inkscape:window-x="31"
- inkscape:window-y="254"
- inkscape:current-layer="svg2" />
-
-<g
- id="Brush"
- style="fill:#000080"
- transform="matrix(0.7018174,0,0,0.674948,-7.2764242,-3.608275)">
- <g
- display="inline"
- id="g5"
- style="fill:#000080;display:inline">
- <path
- d="M 26.939,32.777 C 26.939,32.777 36.485,22.737 39.001,19.056 C 42.698,13.65 44.989,8.227 42.995,7.281 C 41.527,6.584 36.526,10.715 33.524,15.177 C 31.491,18.205 24,30.635 24,30.635 L 26.939,32.777 z "
- id="path7"
- style="fill:#000080" />
- <path
- d="M 25.613,34.668 L 22.642,32.502 C 22.642,32.502 19.588,34.094 18.04,36.364 C 16.494,38.648 15.73,43.025 13.288,45.374 C 11.823,46.783 13.102,46.459 13.102,46.459 C 13.102,46.459 21.009,43.474 22.888,40.982 C 24.75,38.512 25.613,34.668 25.613,34.668 z "
- id="path9"
- style="fill:#000080" />
- </g>
-</g>
-
-</svg> \ No newline at end of file
diff --git a/icons/.svn/text-base/bucket_cursor.svg.svn-base b/icons/.svn/text-base/bucket_cursor.svg.svn-base
deleted file mode 100644
index bf4ea4d..0000000
--- a/icons/.svn/text-base/bucket_cursor.svg.svn-base
+++ /dev/null
@@ -1,67 +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://web.resource.org/cc/"
- 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.45"
- sodipodi:docname="bucket_cursor.svg"
- sodipodi:docbase="/home/joy/sugar-jhbuild/build/share/activities/Oficina.activity/icons"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true"><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" /><sodipodi:namedview
- inkscape:window-height="941"
- inkscape:window-width="1269"
- 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"
- inkscape:zoom="6.8909091"
- inkscape:cx="27.5"
- inkscape:cy="27.5"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:current-layer="svg2" />
-
-<g
- id="Bucket"
- style="fill:#000080"
- transform="matrix(0.6773519,0,0,0.6464781,-8.1788234,-2.7266402)">
- <g
- display="inline"
- id="g5"
- style="fill:#000080;display:inline">
- <path
- d="M 42.359,23.85 C 42.359,23.85 43.687,28.244 39.629,34.222 C 35.57,40.201 31.358,40.057 31.358,40.057 L 16.915,29.857 C 16.915,29.857 21.005,27.782 24.307,22.919 C 27.607,18.056 27.919,13.65 27.919,13.65 L 42.359,23.85 z "
- id="path7"
- style="fill:#000080" />
- <path
- d="M 21.749,21.79 C 25.611,16.127 25.708,13.379 25.153,12.825 C 24.599,12.271 21.516,13.925 18.192,18.633 C 14.87,23.341 13.895,27.938 14.795,31.538 C 14.917,32.025 15.539,33.276 14.38,36.122 C 12.857,39.86 12.972,44.286 14.864,44.706 C 17.356,45.259 17.737,39.133 16.352,34.147 C 15.389,30.678 15.616,31.124 15.832,29.336 C 16.027,27.732 15.864,27.417 17.217,26.566 C 18.76,25.598 21.749,21.79 21.749,21.79 z "
- id="path9"
- style="fill:#000080" />
- </g>
-</g>
-
-</svg> \ No newline at end of file
diff --git a/icons/brush_cursor.svg b/icons/brush_cursor.svg
deleted file mode 100644
index 27d8d46..0000000
--- a/icons/brush_cursor.svg
+++ /dev/null
@@ -1,67 +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://web.resource.org/cc/"
- 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.45"
- sodipodi:docname="brush_cursor.svg"
- sodipodi:docbase="/home/joy/sugar-jhbuild/build/share/activities/Oficina.activity/icons"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true"><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" /><sodipodi:namedview
- inkscape:window-height="594"
- inkscape:window-width="833"
- 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"
- inkscape:zoom="6.8909091"
- inkscape:cx="27.5"
- inkscape:cy="27.690396"
- inkscape:window-x="31"
- inkscape:window-y="254"
- inkscape:current-layer="svg2" />
-
-<g
- id="Brush"
- style="fill:#000080"
- transform="matrix(0.7018174,0,0,0.674948,-7.2764242,-3.608275)">
- <g
- display="inline"
- id="g5"
- style="fill:#000080;display:inline">
- <path
- d="M 26.939,32.777 C 26.939,32.777 36.485,22.737 39.001,19.056 C 42.698,13.65 44.989,8.227 42.995,7.281 C 41.527,6.584 36.526,10.715 33.524,15.177 C 31.491,18.205 24,30.635 24,30.635 L 26.939,32.777 z "
- id="path7"
- style="fill:#000080" />
- <path
- d="M 25.613,34.668 L 22.642,32.502 C 22.642,32.502 19.588,34.094 18.04,36.364 C 16.494,38.648 15.73,43.025 13.288,45.374 C 11.823,46.783 13.102,46.459 13.102,46.459 C 13.102,46.459 21.009,43.474 22.888,40.982 C 24.75,38.512 25.613,34.668 25.613,34.668 z "
- id="path9"
- style="fill:#000080" />
- </g>
-</g>
-
-</svg> \ No newline at end of file
diff --git a/icons/bucket_cursor.svg b/icons/bucket_cursor.svg
deleted file mode 100644
index bf4ea4d..0000000
--- a/icons/bucket_cursor.svg
+++ /dev/null
@@ -1,67 +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://web.resource.org/cc/"
- 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.45"
- sodipodi:docname="bucket_cursor.svg"
- sodipodi:docbase="/home/joy/sugar-jhbuild/build/share/activities/Oficina.activity/icons"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true"><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" /><sodipodi:namedview
- inkscape:window-height="941"
- inkscape:window-width="1269"
- 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"
- inkscape:zoom="6.8909091"
- inkscape:cx="27.5"
- inkscape:cy="27.5"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:current-layer="svg2" />
-
-<g
- id="Bucket"
- style="fill:#000080"
- transform="matrix(0.6773519,0,0,0.6464781,-8.1788234,-2.7266402)">
- <g
- display="inline"
- id="g5"
- style="fill:#000080;display:inline">
- <path
- d="M 42.359,23.85 C 42.359,23.85 43.687,28.244 39.629,34.222 C 35.57,40.201 31.358,40.057 31.358,40.057 L 16.915,29.857 C 16.915,29.857 21.005,27.782 24.307,22.919 C 27.607,18.056 27.919,13.65 27.919,13.65 L 42.359,23.85 z "
- id="path7"
- style="fill:#000080" />
- <path
- d="M 21.749,21.79 C 25.611,16.127 25.708,13.379 25.153,12.825 C 24.599,12.271 21.516,13.925 18.192,18.633 C 14.87,23.341 13.895,27.938 14.795,31.538 C 14.917,32.025 15.539,33.276 14.38,36.122 C 12.857,39.86 12.972,44.286 14.864,44.706 C 17.356,45.259 17.737,39.133 16.352,34.147 C 15.389,30.678 15.616,31.124 15.832,29.336 C 16.027,27.732 15.864,27.417 17.217,26.566 C 18.76,25.598 21.749,21.79 21.749,21.79 z "
- id="path9"
- style="fill:#000080" />
- </g>
-</g>
-
-</svg> \ No newline at end of file
diff --git a/images/.svn/all-wcprops b/images/.svn/all-wcprops
index 033edaf..d27ff6c 100644
--- a/images/.svn/all-wcprops
+++ b/images/.svn/all-wcprops
@@ -1,203 +1,107 @@
K 25
svn:wc:ra_dav:version-url
V 29
-/svn/!svn/ver/49/trunk/images
+/svn/!svn/ver/66/trunk/images
END
-circulo_cursor.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/2/trunk/images/circulo_cursor.png
-END
-corlinha.png
-K 25
-svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/2/trunk/images/corlinha.png
-END
-quadrado.png
-K 25
-svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/2/trunk/images/quadrado.png
-END
-balde.png
-K 25
-svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/2/trunk/images/balde.png
-END
-lapis.png
-K 25
-svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/2/trunk/images/lapis.png
-END
-laranja.png
-K 25
-svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/2/trunk/images/laranja.png
-END
-borracha_cursor.png
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/2/trunk/images/borracha_cursor.png
-END
-borracha.png
+ellipse.png
K 25
svn:wc:ra_dav:version-url
V 41
-/svn/!svn/ver/2/trunk/images/borracha.png
+/svn/!svn/ver/66/trunk/images/ellipse.png
END
-poligono_cursor.png
+trapezoid.png
K 25
svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/7/trunk/images/poligono_cursor.png
+V 43
+/svn/!svn/ver/66/trunk/images/trapezoid.png
END
-linha_cursor.png
+heart.png
K 25
svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/2/trunk/images/linha_cursor.png
+V 39
+/svn/!svn/ver/66/trunk/images/heart.png
END
-preto.png
+move_cursor.png
K 25
svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/2/trunk/images/preto.png
+V 44
+/svn/!svn/ver/7/trunk/images/move_cursor.png
END
-linha.png
+marquee-rectangular.png
K 25
svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/2/trunk/images/linha.png
+V 53
+/svn/!svn/ver/66/trunk/images/marquee-rectangular.png
END
-quadrado_cursor.png
+rectangle.png
K 25
svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/2/trunk/images/quadrado_cursor.png
+V 43
+/svn/!svn/ver/66/trunk/images/rectangle.png
END
-trapezoid_cursor.png
+triangle.png
K 25
svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/49/trunk/images/trapezoid_cursor.png
+V 42
+/svn/!svn/ver/66/trunk/images/triangle.png
END
-abrir.png
+star.png
K 25
svn:wc:ra_dav:version-url
V 38
-/svn/!svn/ver/6/trunk/images/abrir.png
+/svn/!svn/ver/66/trunk/images/star.png
END
-circulo.png
+pencil.png
K 25
svn:wc:ra_dav:version-url
V 40
-/svn/!svn/ver/2/trunk/images/circulo.png
-END
-triangle_cursor.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/49/trunk/images/triangle_cursor.png
+/svn/!svn/ver/66/trunk/images/pencil.png
END
-Thumbs.db
+bucket.png
K 25
svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/5/trunk/images/Thumbs.db
+V 40
+/svn/!svn/ver/66/trunk/images/bucket.png
END
-vassoura.png
+eraser.png
K 25
svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/2/trunk/images/vassoura.png
+V 40
+/svn/!svn/ver/66/trunk/images/eraser.png
END
-move_cursor.png
+parallelogram.png
K 25
svn:wc:ra_dav:version-url
-V 44
-/svn/!svn/ver/7/trunk/images/move_cursor.png
+V 47
+/svn/!svn/ver/66/trunk/images/parallelogram.png
END
-branco.png
+brush.png
K 25
svn:wc:ra_dav:version-url
V 39
-/svn/!svn/ver/2/trunk/images/branco.png
-END
-letra_cursor.png
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/2/trunk/images/letra_cursor.png
+/svn/!svn/ver/66/trunk/images/brush.png
END
-verde.png
+text.png
K 25
svn:wc:ra_dav:version-url
V 38
-/svn/!svn/ver/2/trunk/images/verde.png
-END
-lapis_cursor.png
-K 25
-svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/2/trunk/images/lapis_cursor.png
+/svn/!svn/ver/66/trunk/images/text.png
END
-letra.png
+line.png
K 25
svn:wc:ra_dav:version-url
V 38
-/svn/!svn/ver/2/trunk/images/letra.png
-END
-selecao_cursor.png
-K 25
-svn:wc:ra_dav:version-url
-V 47
-/svn/!svn/ver/5/trunk/images/selecao_cursor.png
+/svn/!svn/ver/66/trunk/images/line.png
END
-selecao.png
-K 25
-svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/5/trunk/images/selecao.png
-END
-azul.png
-K 25
-svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/2/trunk/images/azul.png
-END
-amarelo.png
-K 25
-svn:wc:ra_dav:version-url
-V 40
-/svn/!svn/ver/2/trunk/images/amarelo.png
-END
-vermelho.png
+polygon.png
K 25
svn:wc:ra_dav:version-url
V 41
-/svn/!svn/ver/2/trunk/images/vermelho.png
-END
-poligono.png
-K 25
-svn:wc:ra_dav:version-url
-V 41
-/svn/!svn/ver/7/trunk/images/poligono.png
-END
-roxo.png
-K 25
-svn:wc:ra_dav:version-url
-V 37
-/svn/!svn/ver/2/trunk/images/roxo.png
+/svn/!svn/ver/66/trunk/images/polygon.png
END
-salvar.png
+arrow.png
K 25
svn:wc:ra_dav:version-url
V 39
-/svn/!svn/ver/2/trunk/images/salvar.png
+/svn/!svn/ver/66/trunk/images/arrow.png
END
diff --git a/images/.svn/entries b/images/.svn/entries
index ab77042..51836a0 100644
--- a/images/.svn/entries
+++ b/images/.svn/entries
@@ -1,15 +1,15 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/images
https://oficina.googlecode.com/svn
-2007-07-15T20:13:19.082257Z
-49
-andremossinato
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
svn:special svn:externals svn:needs-lock
@@ -26,225 +26,43 @@ svn:special svn:externals svn:needs-lock
e2fb0b9f-bc32-0410-ab74-19e9d00b4e58
-circulo_cursor.png
+ellipse.png
file
-2007-07-16T13:46:26.000000Z
+2007-07-23T19:49:38.000000Z
18b86bde4f5514139d6d4fd48cac8abe
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-corlinha.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-7c822d25f3d45a28a3c04d668cd07680
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-quadrado.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-7d523ce25cb8329aa9bce899a5787ddb
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-balde.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-1b044e719146991527f6d9aecd0e03db
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-lapis.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-19f856922962f428ea9f858a6ec1fc09
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-laranja.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-7f9dbd8c61602c36156fc45c068f55b9
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-borracha_cursor.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-7f81bc6307b60f51f0b850f3e83f83ad
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-borracha.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-920aae3ef1be38d542d7525b0a5ed4da
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-poligono_cursor.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-6cd059ced988051c235b277e55ed206d
-2007-06-18T18:20:42.711072Z
-7
-joycealess
-has-props
-
-linha_cursor.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-21d012ee14fcece687a999b7fbb8b24b
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-preto.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-37ed9cc07e4cdb3c0a3d9d02bec6d792
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-linha.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-28d26688e09d1b1dbddd802429d62f24
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-quadrado_cursor.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-86cacdc27b09e5b36355298428f2c417
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-trapezoid_cursor.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-2de1730e8a5920b78a21ae4383350ae1
-2007-07-15T20:13:19.082257Z
-49
-andremossinato
-has-props
-
-abrir.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-2c2865eb138c23c0ff97683c94c6e992
-2007-06-15T16:46:33.642423Z
-6
-joycealess
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-circulo.png
+trapezoid.png
file
-2007-07-16T13:46:26.000000Z
-f9502c7f984408e5116b97f5aa801e08
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+61c7f8671c90a798c9f0e951758914f2
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-triangle_cursor.png
+heart.png
file
-2007-07-16T13:46:26.000000Z
-74a4c11380216305ae5cac9c3f7f477f
-2007-07-15T20:13:19.082257Z
-49
-andremossinato
+2007-07-23T19:49:38.000000Z
+2e3c7dbcb289680b47c954494d09820b
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
move_cursor.png
@@ -253,205 +71,179 @@ file
-2007-07-16T13:46:26.000000Z
+2007-07-23T19:49:38.000000Z
b42a867cb51d5094fadce36c2d31591d
2007-06-18T18:20:42.711072Z
7
joycealess
has-props
-vassoura.png
+marquee-rectangular.png
file
-2007-07-16T13:46:26.000000Z
-af55c62b1573860d601cd584b37e0a3b
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+03e58edf2c431a6995d7a80bb7615ce4
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-Thumbs.db
+rectangle.png
file
-2007-07-16T13:46:26.000000Z
-69cb3c1cb1c065985f8a8f85336a3d28
-2007-06-15T16:46:03.611045Z
-5
-joycealess
+2007-07-23T19:49:38.000000Z
+86cacdc27b09e5b36355298428f2c417
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-letra_cursor.png
+triangle.png
file
-2007-07-16T13:46:26.000000Z
-8b4363cd52feb57b200db0228d2af612
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+ac69b1dcadb698af2d898698f0079faa
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-branco.png
+star.png
file
-2007-07-16T13:46:26.000000Z
-720bd5a28d127b0003e2dda0f38179c0
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+838a5280fb54697e529c94e3a2f2378d
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-lapis_cursor.png
+pencil.png
file
-2007-07-16T13:46:26.000000Z
+2007-07-23T19:49:38.000000Z
4de0e8f1d1f5d05bc2b73e1bbea35e38
-2007-06-12T22:07:17.555544Z
-2
-joycealess
-has-props
-
-verde.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-2322a60eb2c3562a36511f7a14238f3c
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-letra.png
+bucket.png
file
-2007-07-16T13:46:26.000000Z
-581c5b63d3e43b461fdbaffc5e74ffcc
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+a59bb36b5d18aae78efe4328992a0f74
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-selecao_cursor.png
+eraser.png
file
-2007-07-16T13:46:26.000000Z
-03e58edf2c431a6995d7a80bb7615ce4
-2007-06-15T16:46:03.611045Z
-5
-joycealess
-has-props
-
-azul.png
-file
-
-
-
-
-2007-07-16T13:46:26.000000Z
-5905a16a0cb083a48d95c1ed797beaf8
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+7f81bc6307b60f51f0b850f3e83f83ad
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-selecao.png
+parallelogram.png
file
-2007-07-16T13:46:26.000000Z
-a71fb6b71b1a6af906f4519956b2c88f
-2007-06-15T16:46:03.611045Z
-5
-joycealess
+2007-07-23T19:49:38.000000Z
+54a53e6aaf1ec1dad96e82f73b317b2e
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-amarelo.png
+brush.png
file
-2007-07-16T13:46:26.000000Z
-4bc1cac4a2e46557c59e785c43960c70
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+e045df95b9c4b29e7eac0f518332b5cc
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-vermelho.png
+text.png
file
-2007-07-16T13:46:26.000000Z
-95da835747614c5799fab28814ac5a01
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+8b4363cd52feb57b200db0228d2af612
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-poligono.png
+polygon.png
file
-2007-07-16T13:46:26.000000Z
-ea7ee8abf944b7952f780c5099745adc
-2007-06-18T18:20:42.711072Z
-7
-joycealess
+2007-07-23T19:49:38.000000Z
+6cd059ced988051c235b277e55ed206d
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-roxo.png
+line.png
file
-2007-07-16T13:46:26.000000Z
-c406b58097cf5e96a287ec6727d9594a
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+21d012ee14fcece687a999b7fbb8b24b
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
-salvar.png
+arrow.png
file
-2007-07-16T13:46:26.000000Z
-22def5499bc2c7d469ce898102d59660
-2007-06-12T22:07:17.555544Z
-2
-joycealess
+2007-07-23T19:49:38.000000Z
+99e5f8733e0ebebb31d543a94301aca0
+2007-07-19T21:06:05.822182Z
+66
+nathalia.sautchuk
has-props
diff --git a/images/.svn/prop-base/Thumbs.db.svn-base b/images/.svn/prop-base/arrow.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/Thumbs.db.svn-base
+++ b/images/.svn/prop-base/arrow.png.svn-base
diff --git a/images/.svn/prop-base/abrir.png.svn-base b/images/.svn/prop-base/brush.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/abrir.png.svn-base
+++ b/images/.svn/prop-base/brush.png.svn-base
diff --git a/images/.svn/prop-base/amarelo.png.svn-base b/images/.svn/prop-base/bucket.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/amarelo.png.svn-base
+++ b/images/.svn/prop-base/bucket.png.svn-base
diff --git a/images/.svn/prop-base/azul.png.svn-base b/images/.svn/prop-base/ellipse.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/azul.png.svn-base
+++ b/images/.svn/prop-base/ellipse.png.svn-base
diff --git a/images/.svn/prop-base/balde.png.svn-base b/images/.svn/prop-base/eraser.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/balde.png.svn-base
+++ b/images/.svn/prop-base/eraser.png.svn-base
diff --git a/images/.svn/prop-base/borracha.png.svn-base b/images/.svn/prop-base/heart.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/borracha.png.svn-base
+++ b/images/.svn/prop-base/heart.png.svn-base
diff --git a/images/.svn/prop-base/borracha_cursor.png.svn-base b/images/.svn/prop-base/line.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/borracha_cursor.png.svn-base
+++ b/images/.svn/prop-base/line.png.svn-base
diff --git a/images/.svn/prop-base/linha.png.svn-base b/images/.svn/prop-base/linha.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/linha.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/linha_cursor.png.svn-base b/images/.svn/prop-base/linha_cursor.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/linha_cursor.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/branco.png.svn-base b/images/.svn/prop-base/marquee-rectangular.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/branco.png.svn-base
+++ b/images/.svn/prop-base/marquee-rectangular.png.svn-base
diff --git a/images/.svn/prop-base/circulo.png.svn-base b/images/.svn/prop-base/parallelogram.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/circulo.png.svn-base
+++ b/images/.svn/prop-base/parallelogram.png.svn-base
diff --git a/images/.svn/prop-base/circulo_cursor.png.svn-base b/images/.svn/prop-base/pencil.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/circulo_cursor.png.svn-base
+++ b/images/.svn/prop-base/pencil.png.svn-base
diff --git a/images/.svn/prop-base/poligono.png.svn-base b/images/.svn/prop-base/poligono.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/poligono.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/poligono_cursor.png.svn-base b/images/.svn/prop-base/poligono_cursor.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/poligono_cursor.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/corlinha.png.svn-base b/images/.svn/prop-base/polygon.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/corlinha.png.svn-base
+++ b/images/.svn/prop-base/polygon.png.svn-base
diff --git a/images/.svn/prop-base/preto.png.svn-base b/images/.svn/prop-base/preto.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/preto.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/quadrado.png.svn-base b/images/.svn/prop-base/quadrado.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/quadrado.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/quadrado_cursor.png.svn-base b/images/.svn/prop-base/quadrado_cursor.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/quadrado_cursor.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/lapis.png.svn-base b/images/.svn/prop-base/rectangle.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/lapis.png.svn-base
+++ b/images/.svn/prop-base/rectangle.png.svn-base
diff --git a/images/.svn/prop-base/roxo.png.svn-base b/images/.svn/prop-base/roxo.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/roxo.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/salvar.png.svn-base b/images/.svn/prop-base/salvar.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/salvar.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/selecao.png.svn-base b/images/.svn/prop-base/selecao.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/selecao.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/selecao_cursor.png.svn-base b/images/.svn/prop-base/selecao_cursor.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/selecao_cursor.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/lapis_cursor.png.svn-base b/images/.svn/prop-base/star.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/lapis_cursor.png.svn-base
+++ b/images/.svn/prop-base/star.png.svn-base
diff --git a/images/.svn/prop-base/laranja.png.svn-base b/images/.svn/prop-base/text.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/laranja.png.svn-base
+++ b/images/.svn/prop-base/text.png.svn-base
diff --git a/images/.svn/prop-base/letra.png.svn-base b/images/.svn/prop-base/trapezoid.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/letra.png.svn-base
+++ b/images/.svn/prop-base/trapezoid.png.svn-base
diff --git a/images/.svn/prop-base/trapezoid_cursor.png.svn-base b/images/.svn/prop-base/trapezoid_cursor.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/trapezoid_cursor.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/letra_cursor.png.svn-base b/images/.svn/prop-base/triangle.png.svn-base
index 5e9587e..5e9587e 100644
--- a/images/.svn/prop-base/letra_cursor.png.svn-base
+++ b/images/.svn/prop-base/triangle.png.svn-base
diff --git a/images/.svn/prop-base/triangle_cursor.png.svn-base b/images/.svn/prop-base/triangle_cursor.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/triangle_cursor.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/vassoura.png.svn-base b/images/.svn/prop-base/vassoura.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/vassoura.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/verde.png.svn-base b/images/.svn/prop-base/verde.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/verde.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/prop-base/vermelho.png.svn-base b/images/.svn/prop-base/vermelho.png.svn-base
deleted file mode 100644
index 5e9587e..0000000
--- a/images/.svn/prop-base/vermelho.png.svn-base
+++ /dev/null
@@ -1,5 +0,0 @@
-K 13
-svn:mime-type
-V 24
-application/octet-stream
-END
diff --git a/images/.svn/text-base/Thumbs.db.svn-base b/images/.svn/text-base/Thumbs.db.svn-base
deleted file mode 100644
index 56a82a2..0000000
--- a/images/.svn/text-base/Thumbs.db.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/abrir.png.svn-base b/images/.svn/text-base/abrir.png.svn-base
deleted file mode 100644
index 04e99c3..0000000
--- a/images/.svn/text-base/abrir.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/amarelo.png.svn-base b/images/.svn/text-base/amarelo.png.svn-base
deleted file mode 100644
index 6f9cde4..0000000
--- a/images/.svn/text-base/amarelo.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/arrow.png.svn-base b/images/.svn/text-base/arrow.png.svn-base
new file mode 100644
index 0000000..7da3ec7
--- /dev/null
+++ b/images/.svn/text-base/arrow.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/azul.png.svn-base b/images/.svn/text-base/azul.png.svn-base
deleted file mode 100644
index 33643b1..0000000
--- a/images/.svn/text-base/azul.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/balde.png.svn-base b/images/.svn/text-base/balde.png.svn-base
deleted file mode 100644
index 5edd1a3..0000000
--- a/images/.svn/text-base/balde.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/borracha.png.svn-base b/images/.svn/text-base/borracha.png.svn-base
deleted file mode 100644
index 3b0cede..0000000
--- a/images/.svn/text-base/borracha.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/branco.png.svn-base b/images/.svn/text-base/branco.png.svn-base
deleted file mode 100644
index d6b92eb..0000000
--- a/images/.svn/text-base/branco.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/brush.png.svn-base b/images/.svn/text-base/brush.png.svn-base
new file mode 100644
index 0000000..c47e1ab
--- /dev/null
+++ b/images/.svn/text-base/brush.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/bucket.png.svn-base b/images/.svn/text-base/bucket.png.svn-base
new file mode 100644
index 0000000..d3960a8
--- /dev/null
+++ b/images/.svn/text-base/bucket.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/circulo.png.svn-base b/images/.svn/text-base/circulo.png.svn-base
deleted file mode 100644
index 513f0af..0000000
--- a/images/.svn/text-base/circulo.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/corlinha.png.svn-base b/images/.svn/text-base/corlinha.png.svn-base
deleted file mode 100644
index 40022ed..0000000
--- a/images/.svn/text-base/corlinha.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/circulo_cursor.png.svn-base b/images/.svn/text-base/ellipse.png.svn-base
index 5b60f38..5b60f38 100644
--- a/images/.svn/text-base/circulo_cursor.png.svn-base
+++ b/images/.svn/text-base/ellipse.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/borracha_cursor.png.svn-base b/images/.svn/text-base/eraser.png.svn-base
index 1b75507..1b75507 100644
--- a/images/.svn/text-base/borracha_cursor.png.svn-base
+++ b/images/.svn/text-base/eraser.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/heart.png.svn-base b/images/.svn/text-base/heart.png.svn-base
new file mode 100644
index 0000000..5e5029c
--- /dev/null
+++ b/images/.svn/text-base/heart.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/lapis.png.svn-base b/images/.svn/text-base/lapis.png.svn-base
deleted file mode 100644
index 5b697e8..0000000
--- a/images/.svn/text-base/lapis.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/laranja.png.svn-base b/images/.svn/text-base/laranja.png.svn-base
deleted file mode 100644
index 4321393..0000000
--- a/images/.svn/text-base/laranja.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/letra.png.svn-base b/images/.svn/text-base/letra.png.svn-base
deleted file mode 100644
index cf4eab1..0000000
--- a/images/.svn/text-base/letra.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/linha_cursor.png.svn-base b/images/.svn/text-base/line.png.svn-base
index b9ee7eb..b9ee7eb 100644
--- a/images/.svn/text-base/linha_cursor.png.svn-base
+++ b/images/.svn/text-base/line.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/linha.png.svn-base b/images/.svn/text-base/linha.png.svn-base
deleted file mode 100644
index 958332c..0000000
--- a/images/.svn/text-base/linha.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/selecao_cursor.png.svn-base b/images/.svn/text-base/marquee-rectangular.png.svn-base
index 5f34d60..5f34d60 100644
--- a/images/.svn/text-base/selecao_cursor.png.svn-base
+++ b/images/.svn/text-base/marquee-rectangular.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/parallelogram.png.svn-base b/images/.svn/text-base/parallelogram.png.svn-base
new file mode 100644
index 0000000..1927a78
--- /dev/null
+++ b/images/.svn/text-base/parallelogram.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/lapis_cursor.png.svn-base b/images/.svn/text-base/pencil.png.svn-base
index 9b12986..9b12986 100644
--- a/images/.svn/text-base/lapis_cursor.png.svn-base
+++ b/images/.svn/text-base/pencil.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/poligono.png.svn-base b/images/.svn/text-base/poligono.png.svn-base
deleted file mode 100644
index 9d74ca6..0000000
--- a/images/.svn/text-base/poligono.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/poligono_cursor.png.svn-base b/images/.svn/text-base/polygon.png.svn-base
index 8e2b505..8e2b505 100644
--- a/images/.svn/text-base/poligono_cursor.png.svn-base
+++ b/images/.svn/text-base/polygon.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/preto.png.svn-base b/images/.svn/text-base/preto.png.svn-base
deleted file mode 100644
index 247077c..0000000
--- a/images/.svn/text-base/preto.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/quadrado.png.svn-base b/images/.svn/text-base/quadrado.png.svn-base
deleted file mode 100644
index 76aa304..0000000
--- a/images/.svn/text-base/quadrado.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/quadrado_cursor.png.svn-base b/images/.svn/text-base/rectangle.png.svn-base
index cdb4923..cdb4923 100644
--- a/images/.svn/text-base/quadrado_cursor.png.svn-base
+++ b/images/.svn/text-base/rectangle.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/roxo.png.svn-base b/images/.svn/text-base/roxo.png.svn-base
deleted file mode 100644
index 517d950..0000000
--- a/images/.svn/text-base/roxo.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/salvar.png.svn-base b/images/.svn/text-base/salvar.png.svn-base
deleted file mode 100644
index a71acb1..0000000
--- a/images/.svn/text-base/salvar.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/selecao.png.svn-base b/images/.svn/text-base/selecao.png.svn-base
deleted file mode 100644
index af23183..0000000
--- a/images/.svn/text-base/selecao.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/star.png.svn-base b/images/.svn/text-base/star.png.svn-base
new file mode 100644
index 0000000..0917569
--- /dev/null
+++ b/images/.svn/text-base/star.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/letra_cursor.png.svn-base b/images/.svn/text-base/text.png.svn-base
index 45c123f..45c123f 100644
--- a/images/.svn/text-base/letra_cursor.png.svn-base
+++ b/images/.svn/text-base/text.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/trapezoid.png.svn-base b/images/.svn/text-base/trapezoid.png.svn-base
new file mode 100644
index 0000000..304be9b
--- /dev/null
+++ b/images/.svn/text-base/trapezoid.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/trapezoid_cursor.png.svn-base b/images/.svn/text-base/trapezoid_cursor.png.svn-base
deleted file mode 100644
index 5b82cb3..0000000
--- a/images/.svn/text-base/trapezoid_cursor.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/triangle.png.svn-base b/images/.svn/text-base/triangle.png.svn-base
new file mode 100644
index 0000000..f01cf96
--- /dev/null
+++ b/images/.svn/text-base/triangle.png.svn-base
Binary files differ
diff --git a/images/.svn/text-base/triangle_cursor.png.svn-base b/images/.svn/text-base/triangle_cursor.png.svn-base
deleted file mode 100644
index 2a5e748..0000000
--- a/images/.svn/text-base/triangle_cursor.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/vassoura.png.svn-base b/images/.svn/text-base/vassoura.png.svn-base
deleted file mode 100644
index cdc08f3..0000000
--- a/images/.svn/text-base/vassoura.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/verde.png.svn-base b/images/.svn/text-base/verde.png.svn-base
deleted file mode 100644
index dcd55a3..0000000
--- a/images/.svn/text-base/verde.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/.svn/text-base/vermelho.png.svn-base b/images/.svn/text-base/vermelho.png.svn-base
deleted file mode 100644
index a9a6d2c..0000000
--- a/images/.svn/text-base/vermelho.png.svn-base
+++ /dev/null
Binary files differ
diff --git a/images/Thumbs.db b/images/Thumbs.db
deleted file mode 100644
index 56a82a2..0000000
--- a/images/Thumbs.db
+++ /dev/null
Binary files differ
diff --git a/images/abrir.png b/images/abrir.png
deleted file mode 100644
index 04e99c3..0000000
--- a/images/abrir.png
+++ /dev/null
Binary files differ
diff --git a/images/amarelo.png b/images/amarelo.png
deleted file mode 100644
index 6f9cde4..0000000
--- a/images/amarelo.png
+++ /dev/null
Binary files differ
diff --git a/images/arrow.png b/images/arrow.png
new file mode 100644
index 0000000..7da3ec7
--- /dev/null
+++ b/images/arrow.png
Binary files differ
diff --git a/images/azul.png b/images/azul.png
deleted file mode 100644
index 33643b1..0000000
--- a/images/azul.png
+++ /dev/null
Binary files differ
diff --git a/images/balde.png b/images/balde.png
deleted file mode 100644
index 5edd1a3..0000000
--- a/images/balde.png
+++ /dev/null
Binary files differ
diff --git a/images/borracha.png b/images/borracha.png
deleted file mode 100644
index 3b0cede..0000000
--- a/images/borracha.png
+++ /dev/null
Binary files differ
diff --git a/images/branco.png b/images/branco.png
deleted file mode 100644
index d6b92eb..0000000
--- a/images/branco.png
+++ /dev/null
Binary files differ
diff --git a/images/brush.png b/images/brush.png
new file mode 100644
index 0000000..c47e1ab
--- /dev/null
+++ b/images/brush.png
Binary files differ
diff --git a/images/bucket.png b/images/bucket.png
new file mode 100644
index 0000000..d3960a8
--- /dev/null
+++ b/images/bucket.png
Binary files differ
diff --git a/images/circulo.png b/images/circulo.png
deleted file mode 100644
index 513f0af..0000000
--- a/images/circulo.png
+++ /dev/null
Binary files differ
diff --git a/images/corlinha.png b/images/corlinha.png
deleted file mode 100644
index 40022ed..0000000
--- a/images/corlinha.png
+++ /dev/null
Binary files differ
diff --git a/images/circulo_cursor.png b/images/ellipse.png
index 5b60f38..5b60f38 100644
--- a/images/circulo_cursor.png
+++ b/images/ellipse.png
Binary files differ
diff --git a/images/borracha_cursor.png b/images/eraser.png
index 1b75507..1b75507 100644
--- a/images/borracha_cursor.png
+++ b/images/eraser.png
Binary files differ
diff --git a/images/heart.png b/images/heart.png
new file mode 100644
index 0000000..5e5029c
--- /dev/null
+++ b/images/heart.png
Binary files differ
diff --git a/images/lapis.png b/images/lapis.png
deleted file mode 100644
index 5b697e8..0000000
--- a/images/lapis.png
+++ /dev/null
Binary files differ
diff --git a/images/laranja.png b/images/laranja.png
deleted file mode 100644
index 4321393..0000000
--- a/images/laranja.png
+++ /dev/null
Binary files differ
diff --git a/images/letra.png b/images/letra.png
deleted file mode 100644
index cf4eab1..0000000
--- a/images/letra.png
+++ /dev/null
Binary files differ
diff --git a/images/linha_cursor.png b/images/line.png
index b9ee7eb..b9ee7eb 100644
--- a/images/linha_cursor.png
+++ b/images/line.png
Binary files differ
diff --git a/images/linha.png b/images/linha.png
deleted file mode 100644
index 958332c..0000000
--- a/images/linha.png
+++ /dev/null
Binary files differ
diff --git a/images/selecao_cursor.png b/images/marquee-rectangular.png
index 5f34d60..5f34d60 100644
--- a/images/selecao_cursor.png
+++ b/images/marquee-rectangular.png
Binary files differ
diff --git a/images/parallelogram.png b/images/parallelogram.png
new file mode 100644
index 0000000..1927a78
--- /dev/null
+++ b/images/parallelogram.png
Binary files differ
diff --git a/images/lapis_cursor.png b/images/pencil.png
index 9b12986..9b12986 100644
--- a/images/lapis_cursor.png
+++ b/images/pencil.png
Binary files differ
diff --git a/images/poligono.png b/images/poligono.png
deleted file mode 100644
index 9d74ca6..0000000
--- a/images/poligono.png
+++ /dev/null
Binary files differ
diff --git a/images/poligono_cursor.png b/images/polygon.png
index 8e2b505..8e2b505 100644
--- a/images/poligono_cursor.png
+++ b/images/polygon.png
Binary files differ
diff --git a/images/preto.png b/images/preto.png
deleted file mode 100644
index 247077c..0000000
--- a/images/preto.png
+++ /dev/null
Binary files differ
diff --git a/images/quadrado.png b/images/quadrado.png
deleted file mode 100644
index 76aa304..0000000
--- a/images/quadrado.png
+++ /dev/null
Binary files differ
diff --git a/images/quadrado_cursor.png b/images/rectangle.png
index cdb4923..cdb4923 100644
--- a/images/quadrado_cursor.png
+++ b/images/rectangle.png
Binary files differ
diff --git a/images/roxo.png b/images/roxo.png
deleted file mode 100644
index 517d950..0000000
--- a/images/roxo.png
+++ /dev/null
Binary files differ
diff --git a/images/salvar.png b/images/salvar.png
deleted file mode 100644
index a71acb1..0000000
--- a/images/salvar.png
+++ /dev/null
Binary files differ
diff --git a/images/selecao.png b/images/selecao.png
deleted file mode 100644
index af23183..0000000
--- a/images/selecao.png
+++ /dev/null
Binary files differ
diff --git a/images/star.png b/images/star.png
new file mode 100644
index 0000000..0917569
--- /dev/null
+++ b/images/star.png
Binary files differ
diff --git a/images/letra_cursor.png b/images/text.png
index 45c123f..45c123f 100644
--- a/images/letra_cursor.png
+++ b/images/text.png
Binary files differ
diff --git a/images/trapezoid.png b/images/trapezoid.png
new file mode 100644
index 0000000..304be9b
--- /dev/null
+++ b/images/trapezoid.png
Binary files differ
diff --git a/images/trapezoid_cursor.png b/images/trapezoid_cursor.png
deleted file mode 100644
index 5b82cb3..0000000
--- a/images/trapezoid_cursor.png
+++ /dev/null
Binary files differ
diff --git a/images/triangle.png b/images/triangle.png
new file mode 100644
index 0000000..f01cf96
--- /dev/null
+++ b/images/triangle.png
Binary files differ
diff --git a/images/triangle_cursor.png b/images/triangle_cursor.png
deleted file mode 100644
index 2a5e748..0000000
--- a/images/triangle_cursor.png
+++ /dev/null
Binary files differ
diff --git a/images/vassoura.png b/images/vassoura.png
deleted file mode 100644
index cdc08f3..0000000
--- a/images/vassoura.png
+++ /dev/null
Binary files differ
diff --git a/images/verde.png b/images/verde.png
deleted file mode 100644
index dcd55a3..0000000
--- a/images/verde.png
+++ /dev/null
Binary files differ
diff --git a/images/vermelho.png b/images/vermelho.png
deleted file mode 100644
index a9a6d2c..0000000
--- a/images/vermelho.png
+++ /dev/null
Binary files differ
diff --git a/locale/.svn/entries b/locale/.svn/entries
index bbf46a5..4004c30 100644
--- a/locale/.svn/entries
+++ b/locale/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale
https://oficina.googlecode.com/svn
diff --git a/locale/de/.svn/entries b/locale/de/.svn/entries
index 7bd0004..524d671 100644
--- a/locale/de/.svn/entries
+++ b/locale/de/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/de
https://oficina.googlecode.com/svn
diff --git a/locale/de/LC_MESSAGES/.svn/entries b/locale/de/LC_MESSAGES/.svn/entries
index 9efd5da..22de81d 100644
--- a/locale/de/LC_MESSAGES/.svn/entries
+++ b/locale/de/LC_MESSAGES/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/de/LC_MESSAGES
https://oficina.googlecode.com/svn
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:23.000000Z
+2007-07-23T19:49:37.000000Z
1a5fae8a713c4f48db248ead156d205a
2007-07-13T22:56:50.473948Z
41
diff --git a/locale/de/LC_MESSAGES/Oficina.activity.mo b/locale/de/LC_MESSAGES/Oficina.activity.mo
deleted file mode 100644
index c57437d..0000000
--- a/locale/de/LC_MESSAGES/Oficina.activity.mo
+++ /dev/null
Binary files differ
diff --git a/locale/de/LC_MESSAGES/Oficina.mo b/locale/de/LC_MESSAGES/Oficina.mo
deleted file mode 100644
index c57437d..0000000
--- a/locale/de/LC_MESSAGES/Oficina.mo
+++ /dev/null
Binary files differ
diff --git a/locale/es/.svn/entries b/locale/es/.svn/entries
index 6b01e58..65bd63d 100644
--- a/locale/es/.svn/entries
+++ b/locale/es/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/es
https://oficina.googlecode.com/svn
diff --git a/locale/es/LC_MESSAGES/.svn/entries b/locale/es/LC_MESSAGES/.svn/entries
index 6a400d5..d8b6264 100644
--- a/locale/es/LC_MESSAGES/.svn/entries
+++ b/locale/es/LC_MESSAGES/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/es/LC_MESSAGES
https://oficina.googlecode.com/svn
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:22.000000Z
+2007-07-23T19:49:36.000000Z
10d7b66c12a5044cc830af0b5842875e
2007-07-13T22:56:50.473948Z
41
diff --git a/locale/es/LC_MESSAGES/Oficina.activity.mo b/locale/es/LC_MESSAGES/Oficina.activity.mo
deleted file mode 100644
index 9c6a1d7..0000000
--- a/locale/es/LC_MESSAGES/Oficina.activity.mo
+++ /dev/null
Binary files differ
diff --git a/locale/es/LC_MESSAGES/Oficina.mo b/locale/es/LC_MESSAGES/Oficina.mo
deleted file mode 100644
index 9c6a1d7..0000000
--- a/locale/es/LC_MESSAGES/Oficina.mo
+++ /dev/null
Binary files differ
diff --git a/locale/fr/.svn/entries b/locale/fr/.svn/entries
index 87c364e..5e4d293 100644
--- a/locale/fr/.svn/entries
+++ b/locale/fr/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/fr
https://oficina.googlecode.com/svn
diff --git a/locale/fr/LC_MESSAGES/.svn/entries b/locale/fr/LC_MESSAGES/.svn/entries
index 755635c..850d4f0 100644
--- a/locale/fr/LC_MESSAGES/.svn/entries
+++ b/locale/fr/LC_MESSAGES/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/fr/LC_MESSAGES
https://oficina.googlecode.com/svn
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:22.000000Z
+2007-07-23T19:49:37.000000Z
9e4ab40a3829a759492a4bbca2f000fd
2007-07-13T22:56:50.473948Z
41
diff --git a/locale/fr/LC_MESSAGES/Oficina.activity.mo b/locale/fr/LC_MESSAGES/Oficina.activity.mo
deleted file mode 100644
index cb51301..0000000
--- a/locale/fr/LC_MESSAGES/Oficina.activity.mo
+++ /dev/null
Binary files differ
diff --git a/locale/fr/LC_MESSAGES/Oficina.mo b/locale/fr/LC_MESSAGES/Oficina.mo
deleted file mode 100644
index cb51301..0000000
--- a/locale/fr/LC_MESSAGES/Oficina.mo
+++ /dev/null
Binary files differ
diff --git a/locale/ko_KO/.svn/entries b/locale/ko_KO/.svn/entries
index b9b0e84..44ab2f9 100644
--- a/locale/ko_KO/.svn/entries
+++ b/locale/ko_KO/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/ko_KO
https://oficina.googlecode.com/svn
diff --git a/locale/ko_KO/LC_MESSAGES/.svn/entries b/locale/ko_KO/LC_MESSAGES/.svn/entries
index 5622547..356307d 100644
--- a/locale/ko_KO/LC_MESSAGES/.svn/entries
+++ b/locale/ko_KO/LC_MESSAGES/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/ko_KO/LC_MESSAGES
https://oficina.googlecode.com/svn
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:21.000000Z
+2007-07-23T19:49:36.000000Z
fbd4c5e033eaf250ab184dcfa0b75c56
2007-07-13T22:56:50.473948Z
41
diff --git a/locale/ko_KO/LC_MESSAGES/Oficina.activity.mo b/locale/ko_KO/LC_MESSAGES/Oficina.activity.mo
deleted file mode 100644
index 0a433fd..0000000
--- a/locale/ko_KO/LC_MESSAGES/Oficina.activity.mo
+++ /dev/null
Binary files differ
diff --git a/locale/ko_KO/LC_MESSAGES/Oficina.mo b/locale/ko_KO/LC_MESSAGES/Oficina.mo
deleted file mode 100644
index 0a433fd..0000000
--- a/locale/ko_KO/LC_MESSAGES/Oficina.mo
+++ /dev/null
Binary files differ
diff --git a/locale/pt_BR/.svn/entries b/locale/pt_BR/.svn/entries
index c5c5afa..6999124 100644
--- a/locale/pt_BR/.svn/entries
+++ b/locale/pt_BR/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/pt_BR
https://oficina.googlecode.com/svn
diff --git a/locale/pt_BR/LC_MESSAGES/.svn/entries b/locale/pt_BR/LC_MESSAGES/.svn/entries
index cdd442e..ca6eb27 100644
--- a/locale/pt_BR/LC_MESSAGES/.svn/entries
+++ b/locale/pt_BR/LC_MESSAGES/.svn/entries
@@ -1,7 +1,7 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/locale/pt_BR/LC_MESSAGES
https://oficina.googlecode.com/svn
@@ -32,7 +32,7 @@ file
-2007-07-16T13:46:22.000000Z
+2007-07-23T19:49:36.000000Z
563ecd9666f4e0b4663ea56ffcca0542
2007-07-13T22:56:50.473948Z
41
diff --git a/locale/pt_BR/LC_MESSAGES/Oficina.activity.mo b/locale/pt_BR/LC_MESSAGES/Oficina.activity.mo
deleted file mode 100644
index 251bcbc..0000000
--- a/locale/pt_BR/LC_MESSAGES/Oficina.activity.mo
+++ /dev/null
Binary files differ
diff --git a/locale/pt_BR/LC_MESSAGES/Oficina.mo b/locale/pt_BR/LC_MESSAGES/Oficina.mo
deleted file mode 100644
index 251bcbc..0000000
--- a/locale/pt_BR/LC_MESSAGES/Oficina.mo
+++ /dev/null
Binary files differ
diff --git a/po/.svn/all-wcprops b/po/.svn/all-wcprops
index fcf818f..a36d377 100644
--- a/po/.svn/all-wcprops
+++ b/po/.svn/all-wcprops
@@ -1,37 +1,37 @@
K 25
svn:wc:ra_dav:version-url
V 25
-/svn/!svn/ver/41/trunk/po
+/svn/!svn/ver/65/trunk/po
END
ko_KO.po
K 25
svn:wc:ra_dav:version-url
V 34
-/svn/!svn/ver/41/trunk/po/ko_KO.po
+/svn/!svn/ver/65/trunk/po/ko_KO.po
END
pt_BR.po
K 25
svn:wc:ra_dav:version-url
V 34
-/svn/!svn/ver/41/trunk/po/pt_BR.po
+/svn/!svn/ver/65/trunk/po/pt_BR.po
END
es.po
K 25
svn:wc:ra_dav:version-url
V 31
-/svn/!svn/ver/41/trunk/po/es.po
+/svn/!svn/ver/65/trunk/po/es.po
END
fr.po
K 25
svn:wc:ra_dav:version-url
V 31
-/svn/!svn/ver/41/trunk/po/fr.po
+/svn/!svn/ver/65/trunk/po/fr.po
END
de.po
K 25
svn:wc:ra_dav:version-url
V 31
-/svn/!svn/ver/41/trunk/po/de.po
+/svn/!svn/ver/65/trunk/po/de.po
END
drawing.pot
K 25
diff --git a/po/.svn/entries b/po/.svn/entries
index b532295..a3a57c9 100644
--- a/po/.svn/entries
+++ b/po/.svn/entries
@@ -1,14 +1,14 @@
8
dir
-52
+76
https://oficina.googlecode.com/svn/trunk/po
https://oficina.googlecode.com/svn
-2007-07-13T22:56:50.473948Z
-41
+2007-07-19T17:35:08.902664Z
+65
nathalia.sautchuk
@@ -32,10 +32,10 @@ file
-2007-07-16T13:46:29.000000Z
-8c644fadb9660b2fb07a11846c6b7900
-2007-07-13T22:56:50.473948Z
-41
+2007-07-23T19:49:41.000000Z
+4a3745f24134b94d3c55db2d7026ba22
+2007-07-19T17:35:08.902664Z
+65
nathalia.sautchuk
pt_BR.po
@@ -44,10 +44,10 @@ file
-2007-07-16T13:46:29.000000Z
-b2e05a0fd5530d3772c28453d1b106a1
-2007-07-13T22:56:50.473948Z
-41
+2007-07-23T19:49:41.000000Z
+96280528c3e9da1a97d7477b8f75b14a
+2007-07-19T17:35:08.902664Z
+65
nathalia.sautchuk
has-props
@@ -57,10 +57,10 @@ file
-2007-07-16T13:46:29.000000Z
-e88459a19ba80e8b59acbcd8f67834ca
-2007-07-13T22:56:50.473948Z
-41
+2007-07-23T19:49:41.000000Z
+f505bdee1059265202d352259e838aac
+2007-07-19T17:35:08.902664Z
+65
nathalia.sautchuk
fr.po
@@ -69,10 +69,10 @@ file
-2007-07-16T13:46:29.000000Z
-d6972e311ed59507c476e30f4565d360
-2007-07-13T22:56:50.473948Z
-41
+2007-07-23T19:49:41.000000Z
+f8c40fc8939fe3f15301d5af4200b195
+2007-07-19T17:35:08.902664Z
+65
nathalia.sautchuk
de.po
@@ -81,10 +81,10 @@ file
-2007-07-16T13:46:29.000000Z
-ae0a63654c59c81748249cb02736b290
-2007-07-13T22:56:50.473948Z
-41
+2007-07-23T19:49:41.000000Z
+87393b60ac4d564b4019de00f56a5170
+2007-07-19T17:35:08.902664Z
+65
nathalia.sautchuk
drawing.pot
@@ -93,7 +93,7 @@ file
-2007-07-16T13:46:29.000000Z
+2007-07-23T19:49:41.000000Z
e9e60f2af2022cddcf4d58e18a6491b8
2007-07-13T22:56:50.473948Z
41
diff --git a/po/.svn/text-base/de.po.svn-base b/po/.svn/text-base/de.po.svn-base
index 20a9afa..60872b8 100644
--- a/po/.svn/text-base/de.po.svn-base
+++ b/po/.svn/text-base/de.po.svn-base
@@ -1,12 +1,35 @@
-# German translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+""" German translations for Oficina
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <Oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:18-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/.svn/text-base/es.po.svn-base b/po/.svn/text-base/es.po.svn-base
index 4916f8f..29bd379 100644
--- a/po/.svn/text-base/es.po.svn-base
+++ b/po/.svn/text-base/es.po.svn-base
@@ -1,12 +1,35 @@
-# Spanish translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+"""Spanish translations for Oficina
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <Oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:17-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/.svn/text-base/fr.po.svn-base b/po/.svn/text-base/fr.po.svn-base
index 4ff2d09..ebcf522 100644
--- a/po/.svn/text-base/fr.po.svn-base
+++ b/po/.svn/text-base/fr.po.svn-base
@@ -1,12 +1,35 @@
-# French translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+"""French translations for Oficina
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:15-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/.svn/text-base/ko_KO.po.svn-base b/po/.svn/text-base/ko_KO.po.svn-base
index b4929a0..d3c5210 100644
--- a/po/.svn/text-base/ko_KO.po.svn-base
+++ b/po/.svn/text-base/ko_KO.po.svn-base
@@ -1,15 +1,39 @@
-# Korean translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Do Young-Min <jeju123@gmail.com>, 2007.
-#
+"""Korean translations for Oficina package.
+Description file
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:19-0300\n"
-"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
+"Last-Translator: Do Young-Min <jeju123@gmail.com>\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
diff --git a/po/.svn/text-base/pt_BR.po.svn-base b/po/.svn/text-base/pt_BR.po.svn-base
index 62d63ef..f9abb1d 100644
--- a/po/.svn/text-base/pt_BR.po.svn-base
+++ b/po/.svn/text-base/pt_BR.po.svn-base
@@ -1,12 +1,35 @@
-# Portuguese translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+"""Portuguese translations for Oficina package.
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br>\n"
+"Report-Msgid-Bugs-To: Oficina <oficina@lsi.usp.br>\n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:00-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/de.po b/po/de.po
index 20a9afa..60872b8 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,12 +1,35 @@
-# German translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+""" German translations for Oficina
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <Oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:18-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/es.po b/po/es.po
index 4916f8f..29bd379 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,12 +1,35 @@
-# Spanish translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+"""Spanish translations for Oficina
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <Oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:17-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/fr.po b/po/fr.po
index 4ff2d09..ebcf522 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,12 +1,35 @@
-# French translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+"""French translations for Oficina
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:15-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/po/ko_KO.po b/po/ko_KO.po
index b4929a0..d3c5210 100644
--- a/po/ko_KO.po
+++ b/po/ko_KO.po
@@ -1,15 +1,39 @@
-# Korean translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Do Young-Min <jeju123@gmail.com>, 2007.
-#
+"""Korean translations for Oficina package.
+Description file
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br> \n"
+"Report-Msgid-Bugs-To: Oficina <oficina@lsi.usp.br> \n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:19-0300\n"
-"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
+"Last-Translator: Do Young-Min <jeju123@gmail.com>\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 62d63ef..f9abb1d 100755
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,12 +1,35 @@
-# Portuguese translations for Oficina package.
-# Copyright (C) 2007 GNU General Public License
-# This file is distributed under the same license as the Oficina package.
-# Nathalia <nathalia.sautchuk@gmail.com>, 2007.
-#
+"""Portuguese translations for Oficina package.
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politecnica of
+Universidade de Sao Paulo. NATE is part of LSI (Integrated
+Systems Laboratory) and stands for Learning, Work and
+Entertainment Center. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+"""
+
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
-"Report-Msgid-Bugs-To: Irene <irene@lsi.usp.br>\n"
+"Report-Msgid-Bugs-To: Oficina <oficina@lsi.usp.br>\n"
"POT-Creation-Date: 2007-07-13 17:56-0300\n"
"PO-Revision-Date: 2007-07-13 18:00-0300\n"
"Last-Translator: Nathalia <nathalia.sautchuk@gmail.com>\n"
diff --git a/setup.py b/setup.py
index ea4fdfa..876cd3f 100755
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,4 @@
-#!/bin/env python
+#!/usr/bin/python
# Copyright (C) 2006, Red Hat, Inc.
#
diff --git a/toolbox.py b/toolbox.py
index 89e7871..4e84257 100644
--- a/toolbox.py
+++ b/toolbox.py
@@ -1,3 +1,57 @@
+# -*- coding: utf-8 -*-
+"""
+toolbox.py
+
+Create Oficina Toolbar in Sugar
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+Colaborators:
+Bruno Gola (brunogola@gmail.com)
+
+Group Manager:
+Irene Karaguilla Ficheman (irene@lsi.usp.br)
+
+Cientific Coordinator:
+Roseli de Deus Lopes (roseli@lsi.usp.br)
+
+"""
+
from gettext import gettext as _
import gtk
@@ -10,8 +64,6 @@ from sugar.graphics.toggletoolbutton import ToggleToolButton
from sugar.graphics.combobox import ComboBox
from sugar.graphics.palette import Palette
-from Cursors import Cursors
-
class Toolbox(ActivityToolbox):
def __init__(self, activity):
ActivityToolbox.__init__(self, activity)
@@ -50,29 +102,48 @@ class Toolbox(ActivityToolbox):
class DrawEditToolbar(EditToolbar):
def __init__(self, activity):
EditToolbar.__init__(self)
+
+ self._activity = activity
- self.undo.connect('clicked', undo, activity)
- self.redo.connect('clicked', redo, activity)
+# self.undo.connect('clicked', undo, activity)
+# self.redo.connect('clicked', redo, activity)
+ self.undo.connect('clicked', self._undo_cb)
+ self.redo.connect('clicked', self._redo_cb)
- #FIXME: buttons are not connected to the right callback
- self.copy.connect('clicked', test_connect, activity, 'copy')
- self.paste.connect('clicked', test_connect, activity, 'paste')
+# self.copy.connect('clicked', test_connect, activity, 'copy')
+# self.paste.connect('clicked', test_connect, activity, 'paste')
+ self.copy.connect('clicked', self._copy_cb)
+ self.paste.connect('clicked', self._paste_cb)
self.copy.hide()
self.paste.hide()
+
+ def _undo_cb(self, widget, data=None):
+ self._activity._area.undo()
+
+ def _redo_cb(self, widget, data=None):
+ self._activity._area.redo()
+
+ def _copy_cb(self, widget, data=None):
+ #FIXME: connect to the correct function
+ pass
+
+ def _paste_cb(self, widget, data=None):
+ #FIXME: connect to the correct function
+ pass
class ToolsToolbar(gtk.Toolbar):
- _TOOL_PENCIL = 2
- _TOOL_BRUSH = 29
- _TOOL_ERASER = 3
- _TOOL_POLYGON = 27
- _TOOL_BUCKET = 28
- _TOOL_MARQUEE_ELLIPTICAL = 5
- _TOOL_MARQUEE_FREEFORM = 2
- _TOOL_MARQUEE_RECTANGULAR = 26
- _TOOL_MARQUEE_SMART = 2
+ _TOOL_PENCIL = 'pencil'
+ _TOOL_BRUSH = 'brush'
+ _TOOL_ERASER = 'eraser'
+ _TOOL_POLYGON = 'polygon'
+ _TOOL_BUCKET = 'bucket'
+ _TOOL_MARQUEE_ELLIPTICAL = 'marquee-elliptical'
+ _TOOL_MARQUEE_FREEFORM = 'marquee-freeform'
+ _TOOL_MARQUEE_RECTANGULAR = 'marquee-rectangular'
+ _TOOL_MARQUEE_SMART = 'marquee-smart'
def __init__(self, activity):
@@ -96,15 +167,16 @@ class ToolsToolbar(gtk.Toolbar):
self.insert(self._icon_stroke, -1)
self._icon_stroke.show()
- tool_item = ComboStrokeColors(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_color = ComboStrokeColors(activity)
+ self.insert(self._stroke_color, -1)
+ self._stroke_color.show()
- tool_item = ComboStrokeSize(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_size = ComboStrokeSize(activity)
+ self.insert(self._stroke_size, -1)
+ self._stroke_size.show()
separator = gtk.SeparatorToolItem()
+ separator.set_draw(True)
self.insert(separator, -1)
separator.show()
@@ -116,14 +188,16 @@ class ToolsToolbar(gtk.Toolbar):
self._tool_brush = ToolButton('tool-brush')
self.insert(self._tool_brush, -1)
self._tool_brush.show()
- self._tool_brush.set_tooltip(_('Brush'))
+ #self._tool_brush.set_tooltip(_('Brush'))
self._brush_palette = self.create_palette('Brush')
self._tool_brush.set_palette(self._brush_palette)
self._tool_eraser = ToolButton('tool-eraser')
self.insert(self._tool_eraser, -1)
self._tool_eraser.show()
- self._tool_eraser.set_tooltip(_('Eraser'))
+ #self._tool_eraser.set_tooltip(_('Eraser'))
+ self._eraser_palette = self.create_palette('Eraser')
+ self._tool_eraser.set_palette(self._eraser_palette)
self._tool_polygon = ToolButton('tool-polygon')
self.insert(self._tool_polygon, -1)
@@ -137,7 +211,6 @@ class ToolsToolbar(gtk.Toolbar):
"""
-
self._tool_marquee_elliptical = ToolButton('tool-marquee-elliptical')
self.insert(self._tool_marquee_elliptical, -1)
self._tool_marquee_elliptical.show()
@@ -152,12 +225,15 @@ class ToolsToolbar(gtk.Toolbar):
self.insert(self._tool_marquee_smart, -1)
self._tool_marquee_smart.show()
self._tool_marquee_smart.set_tooltip(_('Smart Marquee'))
+
"""
+
self._tool_marquee_rectangular = ToolButton('tool-marquee-rectangular')
self.insert(self._tool_marquee_rectangular, -1)
self._tool_marquee_rectangular.show()
self._tool_marquee_rectangular.set_tooltip(_('Rectangular Marquee'))
-
+
+ '''
self._tool_polygon.connect('clicked', set_tool, activity, 'tool-polygon', self._TOOL_POLYGON)
self._tool_pencil.connect('clicked', set_tool, activity, 'tool-pencil', self._TOOL_PENCIL)
self._tool_brush.connect('clicked', set_tool, activity, 'tool-brush', self._TOOL_BRUSH)
@@ -167,12 +243,26 @@ class ToolsToolbar(gtk.Toolbar):
#self._tool_marquee_freeform.connect('clicked', set_tool, activity, 'tool-marquee-freeform', self._TOOL_MARQUEE_FREEFORM)
self._tool_marquee_rectangular.connect('clicked', set_tool, activity, 'tool-marquee-rectangular', self._TOOL_MARQUEE_RECTANGULAR)
#self._tool_marquee_smart.connect('clicked', set_tool, activity, 'tool-marquee-smart', self._TOOL_MARQUEE_SMART)
-
- def create_palette(self, data=None):
- if data == None:
+ '''
+
+ # New connect method
+ self._tool_polygon.connect('clicked', self.set_tool, self._TOOL_POLYGON)
+ self._tool_pencil.connect('clicked', self.set_tool, self._TOOL_PENCIL)
+ self._tool_brush.connect('clicked', self.set_tool, self._TOOL_BRUSH)
+ self._tool_eraser.connect('clicked', self.set_tool, self._TOOL_ERASER)
+ self._tool_bucket.connect('clicked', self.set_tool, self._TOOL_BUCKET)
+ #self._tool_marquee_elliptical.connect('clicked', self.set_tool, self._TOOL_MARQUEE_ELLIPTICAL)
+ #self._tool_marquee_freeform.connect('clicked', self.set_tool, self._TOOL_MARQUEE_FREEFORM)
+ self._tool_marquee_rectangular.connect('clicked', self.set_tool, self._TOOL_MARQUEE_RECTANGULAR)
+ #self._tool_marquee_smart.connect('clicked', self.set_tool, self._TOOL_MARQUEE_SMART)
+
+ def create_palette(self, tool=None):
+
+ #TODO: create palettes for other tools.
+ if tool == None:
return None
- elif data == 'Brush':
- palette = Palette(_(data))
+ elif (tool == 'Brush') or (tool == 'Eraser'):
+ palette = Palette(_(tool))
item_1 = gtk.MenuItem(_('Square'))
item_2 = gtk.MenuItem(_('Circle'))
@@ -180,85 +270,184 @@ class ToolsToolbar(gtk.Toolbar):
palette.append_menu_item(item_2)
item_1.show()
item_2.show()
- item_1.connect('activate', self.test, 'square')
- item_2.connect('activate', self.test, 'circle')
+ item_1.connect('activate', self.set_shape, tool, 'square')
+ item_2.connect('activate', self.set_shape, tool,'circle')
return palette
- def test(self, button, data=None):
- print button, data
- self._activity._area.brush_shape = data
+ def set_shape(self, button, tool, shape):
+ '''
+ Set a tool shape according to user choice at Tool Palette
+ '''
+
+ if tool == 'Brush':
+ self._activity._area.brush_shape = shape
+ elif tool == 'Eraser':
+ self._activity._area.eraser_shape = shape
+
+ def set_tool(self, widget, tool):
+ '''
+ Set tool to the Area object. Configures tool's color and size.
+ '''
+
+ # setting tool
+ self._activity._area.tool = tool
+
+ # setting size and color
+ size = self._stroke_size.get_size()
+ self._stroke_size.set_stroke_size(size)
+
+ color = self._stroke_color.get_color()
+ self._stroke_color.set_stroke_color(color)
+
+ #setting cursor
+ try:
+ pixbuf = gtk.gdk.pixbuf_new_from_file('./images/' + tool + '.png')
+ cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pixbuf, 6, 21)
+ except:
+ cursor = None
+
+ self._activity._area.window.set_cursor(cursor)
class ComboFillColors(ToolComboBox):
-
- _ACTION_BLACK = 0
- _ACTION_PURPLE = 1
- _ACTION_YELLOW = 2
- _ACTION_BLUE = 3
- _ACTION_GREEN = 4
- _ACTION_RED = 5
- _ACTION_ORANGE = 6
- _ACTION_WHITE = 7
-
+ """Class to manage Fill colors """
+
def __init__(self, activity):
+ """Initialize the object
+
+ Keyword arguments:
+ activity -- the OficinaActivity object
+ """
+
ToolComboBox.__init__(self)
self._activity = activity
self._fill_color = self.combo
- self._fill_color.append_item(self._ACTION_BLACK, _('Black'))
- self._fill_color.append_item(self._ACTION_PURPLE, _('Purple'))
- self._fill_color.append_item(self._ACTION_YELLOW, _('Yellow'))
- self._fill_color.append_item(self._ACTION_BLUE, _('Blue'))
- self._fill_color.append_item(self._ACTION_GREEN, _('Green'))
- self._fill_color.append_item(self._ACTION_RED, _('Red'))
- self._fill_color.append_item(self._ACTION_ORANGE, _('Orange'))
- self._fill_color.append_item(self._ACTION_WHITE, _('White'))
+ self._fill_color.append_item(self.alloc_color('#000000'), _('Black'))
+ self._fill_color.append_item(self.alloc_color('#ffffff'), _('White'))
+ self._fill_color.append_item(self.alloc_color('#800000'), _('Maroon'))
+ self._fill_color.append_item(self.alloc_color('#ff0000'), _('Red'))
+ self._fill_color.append_item(self.alloc_color('#808000'), _('Olive'))
+ self._fill_color.append_item(self.alloc_color('#ffff00'), _('Yellow'))
+ self._fill_color.append_item(self.alloc_color('#008000'), _('Green'))
+ self._fill_color.append_item(self.alloc_color('#00ff00'), _('Lime'))
+ self._fill_color.append_item(self.alloc_color('#008080'), _('Teal'))
+ self._fill_color.append_item(self.alloc_color('#00ffff'), _('Aqua'))
+ self._fill_color.append_item(self.alloc_color('#000080'), _('Navy'))
+ self._fill_color.append_item(self.alloc_color('#0000ff'), _('Blue'))
+ self._fill_color.append_item(self.alloc_color('#800080'), _('Purple'))
+ self._fill_color.append_item(self.alloc_color('#ff00ff'), _('Fuchsia'))
self._fill_color.set_active(0)
- self._fill_color.connect('changed', self.set_fill_color)
+ self._fill_color.connect('changed', self._combo_changed_cb)
+ def alloc_color(self, color):
+ """Alloc new color.
- def set_fill_color(self, combo):
- color = combo.get_active()
- self._activity._area._set_fill_color(color)
+ Keyword arguments:
+ color -- hexadecimal number
+
+ Return:
+ a gdk.Color object
+ """
+ colormap = self.get_colormap()
+ _COLOR_ = colormap.alloc_color(color, True, True)
+ return _COLOR_
+ def _combo_changed_cb(self, combo):
+ color = self.get_color()
+ self.set_fill_color(color)
-class ComboStrokeColors(ToolComboBox):
+ def set_fill_color(self, color):
+ """Set the fill color in Area
+
+ Keyword arguments:
+ color -- a gdk.Color object
- _ACTION_BLACK = 0
- _ACTION_PURPLE = 1
- _ACTION_YELLOW = 2
- _ACTION_BLUE = 3
- _ACTION_GREEN = 4
- _ACTION_RED = 5
- _ACTION_ORANGE = 6
- _ACTION_WHITE = 7
+ """
+ self._activity._area._set_fill_color(color)
+
+ def get_color(self):
+ """Get the fill color from combobox
+ Return:
+ a gdk.Color object
+
+ """
+ model = self.combo.get_model()
+ active = self.combo.get_active()
+ return model[active][0]
+
+
+class ComboStrokeColors(ToolComboBox):
+ """Class to manage Stroke colors """
+
def __init__(self, activity):
+ """Initialize the object
+
+ Keyword arguments:
+ activity -- the OficinaActivity object
+ """
+
ToolComboBox.__init__(self)
- self._stroke_color = self.combo
self._activity = activity
- self._stroke_color.append_item(self._ACTION_BLACK, _('Black'))
- self._stroke_color.append_item(self._ACTION_PURPLE, _('Purple'))
- self._stroke_color.append_item(self._ACTION_YELLOW, _('Yellow'))
- self._stroke_color.append_item(self._ACTION_BLUE, _('Blue'))
- self._stroke_color.append_item(self._ACTION_GREEN, _('Green'))
- self._stroke_color.append_item(self._ACTION_RED, _('Red'))
- self._stroke_color.append_item(self._ACTION_ORANGE, _('Orange'))
- self._stroke_color.append_item(self._ACTION_WHITE, _('White'))
+ self._stroke_color = self.combo
+ self._stroke_color.append_item(self.alloc_color('#000000'), _('Black'))
+ self._stroke_color.append_item(self.alloc_color('#ffffff'), _('White'))
+ self._stroke_color.append_item(self.alloc_color('#800000'), _('Maroon'))
+ self._stroke_color.append_item(self.alloc_color('#ff0000'), _('Red'))
+ self._stroke_color.append_item(self.alloc_color('#808000'), _('Olive'))
+ self._stroke_color.append_item(self.alloc_color('#ffff00'), _('Yellow'))
+ self._stroke_color.append_item(self.alloc_color('#008000'), _('Green'))
+ self._stroke_color.append_item(self.alloc_color('#00ff00'), _('Lime'))
+ self._stroke_color.append_item(self.alloc_color('#008080'), _('Teal'))
+ self._stroke_color.append_item(self.alloc_color('#00ffff'), _('Aqua'))
+ self._stroke_color.append_item(self.alloc_color('#000080'), _('Navy'))
+ self._stroke_color.append_item(self.alloc_color('#0000ff'), _('Blue'))
+ self._stroke_color.append_item(self.alloc_color('#800080'), _('Purple'))
+ self._stroke_color.append_item(self.alloc_color('#ff00ff'), _('Fuchsia'))
self._stroke_color.set_active(0)
- #self._stroke_color.connect('changed', self._combo_changed_cb)
- self._stroke_color.connect('changed', self.set_stroke_color)
- self.connect("focus", self.event_focus)
-
- def event_focus(self, combo):
- print 'combostroke gained focus'
-
- def set_stroke_color(self, combo):
- color = combo.get_active()
+ self._stroke_color.connect('changed', self._combo_changed_cb)
+
+ def alloc_color(self, color):
+ """Alloc new color.
+
+ Keyword arguments:
+ color -- hexadecimal number
+
+ Return:
+ a gdk.Color object
+
+ """
+ colormap = self.get_colormap()
+ _COLOR_ = colormap.alloc_color(color, True, True)
+ return _COLOR_
+
+ def _combo_changed_cb(self, combo):
+ color = self.get_color()
+ self.set_stroke_color(color)
+
+ def get_color(self):
+ """Get the fill color from combobox
+
+ Return:
+ a gdk.Color object
+
+ """
+ model = self.combo.get_model()
+ active = self.combo.get_active()
+ return model[active][0]
+
+ def set_stroke_color(self, color):
+ """Set the fill color in Area
+
+ Keyword arguments:
+ color -- a gdk.Color object
+
+ """
self._activity._area._set_stroke_color(color)
@@ -272,11 +461,13 @@ class ComboStrokeSize(ToolComboBox):
_ACTION_20 = 20
_ACTION_50 = 50
_ACTION_100 = 100
+ """
_ACTION_500 = 500
_ACTION_1000 = 1000
_ACTION_5000 = 5000
_ACTION_10000 = 10000
_ACTION_100000 = 100000
+ """
def __init__(self, activity):
ToolComboBox.__init__(self)
@@ -284,65 +475,78 @@ class ComboStrokeSize(ToolComboBox):
self._stroke_size = self.combo
self._stroke_size.append_item(self._ACTION_1, _('1'))
- self._stroke_size.append_item(self._ACTION_2, _('2'))
+ self._stroke_size.append_item(self._ACTION_2, _('2'))
self._stroke_size.append_item(self._ACTION_3, _('3'))
self._stroke_size.append_item(self._ACTION_5, _('5'))
self._stroke_size.append_item(self._ACTION_10, _('10'))
self._stroke_size.append_item(self._ACTION_20, _('20'))
self._stroke_size.append_item(self._ACTION_50, _('50'))
self._stroke_size.append_item(self._ACTION_100, _('100'))
+ """
self._stroke_size.append_item(self._ACTION_500, _('500'))
self._stroke_size.append_item(self._ACTION_1000, _('1000'))
self._stroke_size.append_item(self._ACTION_5000, _('5000'))
self._stroke_size.append_item(self._ACTION_10000, _('10000'))
self._stroke_size.append_item(self._ACTION_100000, _('100000'))
+ """
- self._stroke_size.set_active(0)
+ self._stroke_size.set_active(1)
self._stroke_size.connect('changed', self._combo_changed_cb)
def _combo_changed_cb(self, combo):
- set_stroke_size(self._activity, combo.get_active())
-
+# model = combo.get_model()
+# active = combo.get_active()
+# self.set_stroke_size(model[active][0])
+ size = self.get_size()
+ self.set_stroke_size(size)
+
+ def set_stroke_size(self, size):
+ self._activity._area.configure_line(size)
+
+ def get_size(self):
+ model = self.combo.get_model()
+ active = self.combo.get_active()
+ return model[active][0]
class ShapesToolbar(gtk.Toolbar):
- _TOOL_SHAPE_ARROW = 0
- _TOOL_SHAPE_CURVE = 0
- _TOOL_SHAPE_ELLIPSE = 5
- _TOOL_SHAPE_FREEFORM = 0
- _TOOL_SHAPE_HEART = 0
- _TOOL_SHAPE_LINE = 1
- _TOOL_SHAPE_PARALLELOGRAM = 0
- _TOOL_SHAPE_POLYGON = 27
- _TOOL_SHAPE_RECTANGLE = 6
- _TOOL_SHAPE_STAR = 0
- _TOOL_SHAPE_TRAPEZOID = 31
- _TOOL_SHAPE_TRIANGLE = 30
+ _TOOL_SHAPE_ARROW = 'arrow'
+ _TOOL_SHAPE_CURVE = 'curve'
+ _TOOL_SHAPE_ELLIPSE = 'ellipse'
+ _TOOL_SHAPE_FREEFORM = 'freeform'
+ _TOOL_SHAPE_HEART = 'heart'
+ _TOOL_SHAPE_LINE = 'line'
+ _TOOL_SHAPE_PARALLELOGRAM = 'parallelogram'
+ _TOOL_SHAPE_POLYGON = 'polygon'
+ _TOOL_SHAPE_RECTANGLE = 'rectangle'
+ _TOOL_SHAPE_STAR = 'star'
+ _TOOL_SHAPE_TRAPEZOID = 'trapezoid'
+ _TOOL_SHAPE_TRIANGLE = 'triangle'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
+ self._activity = activity
+
self._icon_fill = ToolButton('icon-fill')
self.insert(self._icon_fill, -1)
self._icon_fill.show()
-
- # FIXME: This should be a file picker instead of a combobox
-
- tool_item = ComboFillColors(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+
+ self._fill_color = ComboFillColors(activity)
+ self.insert(self._fill_color, -1)
+ self._fill_color.show()
self._icon_stroke = ToolButton('icon-stroke')
self.insert(self._icon_stroke, -1)
self._icon_stroke.show()
- tool_item = ComboStrokeColors(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_color = ComboStrokeColors(activity)
+ self.insert(self._stroke_color, -1)
+ self._stroke_color.show()
- tool_item = ComboStrokeSize(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_size = ComboStrokeSize(activity)
+ self.insert(self._stroke_size, -1)
+ self._stroke_size.show()
separator = gtk.SeparatorToolItem()
self.insert(separator, -1)
@@ -378,6 +582,8 @@ class ShapesToolbar(gtk.Toolbar):
self._tool_shape_heart.show()
self._tool_shape_heart.set_tooltip(_('Heart'))
+ """
+
self._tool_shape_parallelogram = ToolButton('tool-shape-parallelogram')
self.insert(self._tool_shape_parallelogram, -1)
self._tool_shape_parallelogram.show()
@@ -393,8 +599,6 @@ class ShapesToolbar(gtk.Toolbar):
self._tool_shape_star.show()
self._tool_shape_star.set_tooltip(_('Star'))
- """
-
self._tool_shape_trapezoid = ToolButton('tool-shape-trapezoid')
self.insert(self._tool_shape_trapezoid, -1)
self._tool_shape_trapezoid.show()
@@ -405,32 +609,72 @@ class ShapesToolbar(gtk.Toolbar):
self._tool_shape_triangle.show()
self._tool_shape_triangle.set_tooltip(_('Triangle'))
- #self._tool_shape_arrow.connect('clicked', set_tool, activity, 'tool-shape-arrow', self._TOOL_SHAPE_ARROW)
+ '''
+ self._tool_shape_arrow.connect('clicked', set_tool, activity, 'tool-shape-arrow', self._TOOL_SHAPE_ARROW)
self._tool_shape_ellipse.connect('clicked', set_tool, activity, 'tool-shape-ellipse', self._TOOL_SHAPE_ELLIPSE)
#self._tool_shape_freeform.connect('clicked', set_tool, activity, 'tool-shape-freeform', self._TOOL_SHAPE_FREEFORM)
#self._tool_shape_heart.connect('clicked', set_tool, activity, 'tool-shape-heart', self._TOOL_SHAPE_HEART)
self._tool_shape_line.connect('clicked', set_tool, activity, 'tool-shape-line', self._TOOL_SHAPE_LINE)
- #self._tool_shape_parallelogram.connect('clicked', set_tool, activity, 'tool-shape-parallelogram', self._TOOL_SHAPE_PARALLELOGRAM)
+ self._tool_shape_parallelogram.connect('clicked', set_tool, activity, 'tool-shape-parallelogram', self._TOOL_SHAPE_PARALLELOGRAM)
#self._tool_shape_polygon.connect('clicked', set_tool, activity, 'tool-shape-polygon', self._TOOL_SHAPE_POLYGON)
self._tool_shape_rectangle.connect('clicked', set_tool, activity, 'tool-shape-rectangle', self._TOOL_SHAPE_RECTANGLE)
- #self._tool_shape_star.connect('clicked', set_tool, activity, 'tool-shape-star', self._TOOL_SHAPE_STAR)
+ self._tool_shape_star.connect('clicked', set_tool, activity, 'tool-shape-star', self._TOOL_SHAPE_STAR)
self._tool_shape_trapezoid.connect('clicked', set_tool, activity, 'tool-shape-trapezoid', self._TOOL_SHAPE_TRAPEZOID)
self._tool_shape_triangle.connect('clicked', set_tool, activity, 'tool-shape-triangle', self._TOOL_SHAPE_TRIANGLE)
-
+ '''
+
+ self._tool_shape_arrow.connect('clicked', self.set_tool, self._TOOL_SHAPE_ARROW)
+ self._tool_shape_ellipse.connect('clicked', self.set_tool, self._TOOL_SHAPE_ELLIPSE)
+ #self._tool_shape_freeform.connect('clicked', self.set_tool, self._TOOL_SHAPE_FREEFORM)
+ #self._tool_shape_heart.connect('clicked', self.set_tool, self._TOOL_SHAPE_HEART)
+ self._tool_shape_line.connect('clicked', self.set_tool, self._TOOL_SHAPE_LINE)
+ self._tool_shape_parallelogram.connect('clicked', self.set_tool, self._TOOL_SHAPE_PARALLELOGRAM)
+ #self._tool_shape_polygon.connect('clicked', self.set_tool, self._TOOL_SHAPE_POLYGON)
+ self._tool_shape_rectangle.connect('clicked', self.set_tool, self._TOOL_SHAPE_RECTANGLE)
+ self._tool_shape_star.connect('clicked', self.set_tool, self._TOOL_SHAPE_STAR)
+ self._tool_shape_trapezoid.connect('clicked', self.set_tool, self._TOOL_SHAPE_TRAPEZOID)
+ self._tool_shape_triangle.connect('clicked', self.set_tool, self._TOOL_SHAPE_TRIANGLE)
+
+ def set_tool(self, widget, tool):
+
+ # setting tool
+ self._activity._area.tool = tool
+
+ # setting size and color
+ size = self._stroke_size.get_size()
+ self._stroke_size.set_stroke_size(size)
+
+ stroke_color = self._stroke_color.get_color()
+ self._stroke_color.set_stroke_color(stroke_color)
+
+ fill_color = self._fill_color.get_color()
+ self._fill_color.set_fill_color(fill_color)
+
+ #setting cursor
+ try:
+ pixbuf = gtk.gdk.pixbuf_new_from_file('./images/' + tool + '.png')
+ cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pixbuf, 6, 21)
+ except:
+ cursor = None
+
+ self._activity._area.window.set_cursor(cursor)
+
class TextToolbar(gtk.Toolbar):
- _ACTION_TEXT = 4
+ _ACTION_TEXT = 'text'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
+ self._activity = activity
+
self._text = ToggleToolButton('text')
self.insert(self._text, -1)
self._text.show()
self._text.set_tooltip(_('Type'))
- self._text.connect('clicked', set_tool, activity, 'text', self._ACTION_TEXT)
-
+ self._text.connect('clicked', self.set_tool, self._ACTION_TEXT)
+
"""
#FIXME: this button is not connected to the right callback
self._bold = ToggleToolButton('format-text-bold')
@@ -462,18 +706,24 @@ class TextToolbar(gtk.Toolbar):
#self.insert(self._text_color, -1)
self._text_color.show()
"""
+
def type_text(self, activity):
set_tool(self._ACTION_TEXT, activity, 'text')
activity._textview.show()
+
+ def set_tool(self, widget, tool):
+ #FIXME: this callback must change as others buttons get enabled
+ self._activity._area.tool = tool
+
class ImageToolbar(gtk.Toolbar):
- _OBJECT_HEIGHT = 30
- _OBJECT_INSERT = 31
- _OBJECT_ROTATE_LEFT = 32
- _OBJECT_ROTATE_RIGHT = 33
- _OBJECT_WIDTH = 34
+ _OBJECT_HEIGHT = 'height'
+ _OBJECT_INSERT = 'insert'
+ _OBJECT_ROTATE_LEFT = 'rotate-left'
+ _OBJECT_ROTATE_RIGHT = 'rotate-right'
+ _OBJECT_WIDTH = 'width'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
@@ -481,7 +731,7 @@ class ImageToolbar(gtk.Toolbar):
self._object_insert = ToolButton('object-insert')
self.insert(self._object_insert, -1)
self._object_insert.show()
- self._object_insert.set_tooltip(_('object-insert'))
+ self._object_insert.set_tooltip(_('Insert Image'))
separator = gtk.SeparatorToolItem()
separator.set_draw(True)
@@ -520,32 +770,32 @@ class ImageToolbar(gtk.Toolbar):
def rotate_left(self, widget, activity):
#activity._area._rotate_left()
- pass
+ pass
def insertImage(self, widget, activity):
- dialog = gtk.FileChooserDialog(title=(_('Open File...')),
- action=gtk.FILE_CHOOSER_ACTION_OPEN,
- buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OK, gtk.RESPONSE_OK))
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- #gtk28 = False
- file_path = dialog.get_filename()
+ dialog = gtk.FileChooserDialog(title=(_('Open File...')),
+ action=gtk.FILE_CHOOSER_ACTION_OPEN,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ dialog.show_all()
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ print dialog.get_filename(), 'selected'
+ #gtk28 = False
+ file_path = dialog.get_filename()
#file_path = decode_path((file_path,))[0]
#open(activity, file_path)
- activity._area.d.loadImage(file_path)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
+ activity._area.d.loadImage(file_path,widget)
+ elif response == gtk.RESPONSE_CANCEL:
+ print 'Closed, no files selected'
dialog.destroy()
class EffectsToolbar(gtk.Toolbar):
- _ACTION_GRAYSCALE = 0
+ _ACTION_GRAYSCALE = 'grayscale'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
@@ -633,82 +883,98 @@ class ViewToolbar(gtk.Toolbar):
print 'treeeter'
-def set_tool(widget, activity, data=None, tool=None):
- activity._area.tool = tool
- #setting cursor
- print data
- if data == 'tool-pencil':
- pix = gtk.gdk.pixbuf_new_from_file("./images/lapis_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-eraser':
- pix = gtk.gdk.pixbuf_new_from_file("./images/borracha_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-ellipse':
- pix = gtk.gdk.pixbuf_new_from_file("./images/circulo_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-rectangle':
- pix = gtk.gdk.pixbuf_new_from_file("./images/quadrado_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-marquee-rectangular':
- cursor = gtk.gdk.Cursor(gtk.gdk.CROSSHAIR)
- activity._area.move = False
-
- elif data == 'text':
- pix = gtk.gdk.pixbuf_new_from_file("./images/letra_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-line':
- pix = gtk.gdk.pixbuf_new_from_file("./images/linha_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-brush':
- pix = gtk.gdk.pixbuf_new_from_file("./icons/brush_cursor.svg")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-bucket':
- pix = gtk.gdk.pixbuf_new_from_file("./icons/bucket_cursor.svg")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-polygon':
- pix = gtk.gdk.pixbuf_new_from_file("./images/poligono_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-triangle':
- pix = gtk.gdk.pixbuf_new_from_file("./images/triangle_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-trapezoid':
- pix = gtk.gdk.pixbuf_new_from_file("./images/trapezoid_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- else:
- # Uses toolbar icon as cursor
- #FIXME: invert cursor color. Toolbar icons are white
- try:
- archive = './icons/' + data + '.svg'
- pix = gtk.gdk.pixbuf_new_from_file(archive)
- print archive, pix
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
- except:
- cursor = None
-
-
- activity._area.window.set_cursor(cursor)
- #print cursor
+# def set_tool(widget, activity, data=None, tool=None):
+# activity._area.tool = tool
+# #setting cursor
+# print data
+# if data == 'tool-pencil':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/lapis_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-eraser':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/borracha_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-ellipse':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/circulo_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-rectangle':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/quadrado_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-marquee-rectangular':
+# cursor = gtk.gdk.Cursor(gtk.gdk.CROSSHAIR)
+# activity._area.move = False
+
+# elif data == 'text':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/letra_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-line':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/linha_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-brush':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/brush_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-bucket':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/bucket_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-polygon':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/poligono_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-shape-triangle':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/triangle_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-shape-trapezoid':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/trapezoid_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-star':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/star_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-heart':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/heart_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-parallelogram':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/parallelogram_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-arrow':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/arrow_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# else:
+# # Uses toolbar icon as cursor
+# #FIXME: invert cursor color. Toolbar icons are white
+# try:
+# archive = './icons/' + data + '.svg'
+# pix = gtk.gdk.pixbuf_new_from_file(archive)
+# print archive, pix
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+# except:
+# cursor = None
+
+#
+# activity._area.window.set_cursor(cursor)
+# #print cursor
-
-def set_stroke_size(activity, size):
- activity._area.configure_line(size)
+#move to class ComboStrokeSize
+#def set_stroke_size(activity, size):
+ #activity._area.configure_line(size)
-def undo(widget, activity):
+def undo(widget, activity):
activity._area.undo()
-def redo(widget, activity):
+def redo(widget, activity):
activity._area.redo()
def test_connect(widget, activity, data=None):
@@ -718,21 +984,21 @@ def test_connect(widget, activity, data=None):
def insertImage(widget, activity):
- dialog = gtk.FileChooserDialog(title=(_('Open File...')),
- action=gtk.FILE_CHOOSER_ACTION_OPEN,
- buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OK, gtk.RESPONSE_OK))
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- #gtk28 = False
- file_path = dialog.get_filename()
+ dialog = gtk.FileChooserDialog(title=(_('Open File...')),
+ action=gtk.FILE_CHOOSER_ACTION_OPEN,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ dialog.show_all()
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ print dialog.get_filename(), 'selected'
+ #gtk28 = False
+ file_path = dialog.get_filename()
#file_path = decode_path((file_path,))[0]
#open(activity, file_path)
- activity._area.d.loadImage(file_path)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
+ activity._area.d.loadImage(file_path)
+ elif response == gtk.RESPONSE_CANCEL:
+ print 'Closed, no files selected'
dialog.destroy()