help-smalltalk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-smalltalk] [PATCH 13/15] gtktools: Move the Clock/Tetris to the GT


From: Holger Hans Peter Freyther
Subject: [Help-smalltalk] [PATCH 13/15] gtktools: Move the Clock/Tetris to the GTKTools
Date: Mon, 8 Apr 2013 11:30:29 +0200

One can now use gst-run --start GTKTools-Example-Tetris to start
the tetris game.
---
 .gitignore                                         |    2 +
 configure.ac                                       |    2 +
 packages/gtktools/Examples/Clock/GtkClock.st       |  165 +++++++++
 packages/gtktools/Examples/Clock/Makefile.frag     |    5 +
 packages/gtktools/Examples/Clock/package.xml       |    9 +
 packages/gtktools/Examples/Tetris/BlockWidget.st   |   44 +++
 packages/gtktools/Examples/Tetris/HighScores.st    |   36 ++
 packages/gtktools/Examples/Tetris/Makefile.frag    |    5 +
 packages/gtktools/Examples/Tetris/Score.st         |   24 ++
 packages/gtktools/Examples/Tetris/Tetris.st        |  390 +++++++++++++++++++
 packages/gtktools/Examples/Tetris/TetrisField.st   |  179 +++++++++
 .../gtktools/Examples/Tetris/TetrisFieldWidget.st  |   57 +++
 packages/gtktools/Examples/Tetris/TetrisPiece.st   |  174 +++++++++
 packages/gtktools/Examples/Tetris/TetrisPieceI.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceJ.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceL.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceO.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceS.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceT.st  |   60 +++
 .../gtktools/Examples/Tetris/TetrisPieceWidget.st  |   57 +++
 packages/gtktools/Examples/Tetris/TetrisPieceZ.st  |   61 +++
 packages/gtktools/Examples/Tetris/package.xml      |   23 ++
 packages/visualgst/Clock/GtkClock.st               |  165 ---------
 packages/visualgst/Makefile.frag                   |    2 +-
 packages/visualgst/Tetris/BlockWidget.st           |   44 ---
 packages/visualgst/Tetris/HighScores.st            |   37 --
 packages/visualgst/Tetris/Score.st                 |   25 --
 packages/visualgst/Tetris/Tetris.st                |  391 --------------------
 packages/visualgst/Tetris/TetrisField.st           |  180 ---------
 packages/visualgst/Tetris/TetrisFieldWidget.st     |   57 ---
 packages/visualgst/Tetris/TetrisPiece.st           |  175 ---------
 packages/visualgst/Tetris/TetrisPieceI.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceJ.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceL.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceO.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceS.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceT.st          |   60 ---
 packages/visualgst/Tetris/TetrisPieceWidget.st     |   57 ---
 packages/visualgst/Tetris/TetrisPieceZ.st          |   62 ----
 packages/visualgst/package.xml                     |   30 --
 40 files changed, 1599 insertions(+), 1594 deletions(-)
 create mode 100644 packages/gtktools/Examples/Clock/GtkClock.st
 create mode 100644 packages/gtktools/Examples/Clock/Makefile.frag
 create mode 100644 packages/gtktools/Examples/Clock/package.xml
 create mode 100644 packages/gtktools/Examples/Tetris/BlockWidget.st
 create mode 100644 packages/gtktools/Examples/Tetris/HighScores.st
 create mode 100644 packages/gtktools/Examples/Tetris/Makefile.frag
 create mode 100644 packages/gtktools/Examples/Tetris/Score.st
 create mode 100644 packages/gtktools/Examples/Tetris/Tetris.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisField.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisFieldWidget.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPiece.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceI.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceJ.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceL.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceO.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceS.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceT.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceWidget.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceZ.st
 create mode 100644 packages/gtktools/Examples/Tetris/package.xml
 delete mode 100644 packages/visualgst/Clock/GtkClock.st
 delete mode 100644 packages/visualgst/Tetris/BlockWidget.st
 delete mode 100644 packages/visualgst/Tetris/HighScores.st
 delete mode 100644 packages/visualgst/Tetris/Score.st
 delete mode 100644 packages/visualgst/Tetris/Tetris.st
 delete mode 100644 packages/visualgst/Tetris/TetrisField.st
 delete mode 100644 packages/visualgst/Tetris/TetrisFieldWidget.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPiece.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceI.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceJ.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceL.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceO.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceS.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceT.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceWidget.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceZ.st

diff --git a/.gitignore b/.gitignore
index 8e8fe08..d7a3ac0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,6 +63,8 @@ packages/gtk/sizeof
 packages/gtk/sizeof.c
 packages/gtk/structs
 packages/gtktools/stamp-classes
+packages/gtktools/Examples/Clock/stamp-classes
+packages/gtktools/Examples/Tetris/stamp-classes
 packages/i18n/ref-add.sed
 packages/i18n/ref-del.sed
 packages/net/gnutls-wrapper
diff --git a/configure.ac b/configure.ac
index 5305622..c447b1c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -588,6 +588,8 @@ GST_PACKAGE_ENABLE([Swazoo], [swazoo-httpd])
 GST_PACKAGE_ENABLE([Sockets], [sockets], [], [gst_cv_sockets])
 GST_PACKAGE_ENABLE([VFSAddOns], [vfs], [], [], [Makefile])
 GST_PACKAGE_ENABLE([GTKTools], [gtktools])
+GST_PACKAGE_ENABLE([GTKTools-Example-Clock], [gtktools/Examples/Clock])
+GST_PACKAGE_ENABLE([GTKTools-Example-Tetris], [gtktools/Examples/Tetris])
 GST_PACKAGE_ENABLE([VisualGST], [visualgst])
 GST_PACKAGE_ENABLE([XML-XMLNodeBuilder], [xml/builder])
 GST_PACKAGE_ENABLE([XML-DOM], [xml/dom])
diff --git a/packages/gtktools/Examples/Clock/GtkClock.st 
b/packages/gtktools/Examples/Clock/GtkClock.st
new file mode 100644
index 0000000..42e0624
--- /dev/null
+++ b/packages/gtktools/Examples/Clock/GtkClock.st
@@ -0,0 +1,165 @@
+Smalltalk.Object subclass: GtkClock [
+    | canvas hour minute process radius second window x y |
+
+    GtkClock class >> open [
+       <category: 'user interface'>
+
+       ^ (self new)
+           initialize;
+           showAll;
+           yourself
+    ]
+
+    GtkClock class >> openSized: aPoint [
+       <category: 'user interface'>
+
+       ^ (self new)
+           initialize;
+           resize: aPoint;
+           showAll;
+           yourself
+    ]
+
+    quit [
+       <category: 'events'>
+
+       process terminate.
+       window hide
+    ]
+
+    time [
+       <category: 'time'>
+
+       | now |
+       now := DateTime now.
+        hour := now hour.
+        minute := now minute.
+        second := now second.
+    ]
+
+    clearArea: aGtkAllocation [
+       <category: 'drawing'>
+
+       | res |
+        res := aGtkAllocation castTo: (CIntType arrayType: 4).
+
+        canvas saveWhile: [
+            canvas
+                rectangle: ((address@hidden) extent: ((res at: 2) @ (res at: 
3)));
+                operator: #clear;
+                fill ]
+    ]
+
+    drawClockCircle: context [
+       <category: 'drawing'>
+
+        context
+            lineWidth: 6;
+            stroke: [ context arc: address@hidden radius: radius from: 0 to: 
Float pi * 2 ]
+    ]
+
+    drawHourMarker: context [
+       <category: 'drawing'>
+
+        1 to: 12 do: [ :i |
+            context
+                lineWidth: 4;
+                stroke: [ | inset |
+                    inset := 0.1 * radius.
+                    context
+                        moveTo: (x + ((radius - inset) * (i * Float pi / 6.0) 
cos)) @ (y + ((radius - inset) * (i * Float pi / 6.0) sin));
+                        lineTo: (x + (radius * (i * Float pi / 6.0) cos)) @ (y 
+ (radius * (i * Float pi / 6.0) sin)) ] ]
+    ]
+
+    drawClockLine: context angle: anAngFloat [
+       <category: 'drawing'>
+
+        context
+            lineWidth: 4;
+            paint: [
+                context stroke: [
+                    context
+                        sourceRed: 1 green: 0.2 blue: 0.2 alpha: 1.0;
+                        moveTo: address@hidden;
+                        lineTo: (x + (radius * anAngFloat  cos)) @ (y + 
(radius * anAngFloat sin)) ] ]
+            withAlpha: 0.64
+    ]
+
+    drawHourLine: context [
+       <category: 'drawing'>
+
+       self drawClockLine: context angle: (hour \\ 12 * (Float pi / 6.0)) - 
(Float pi / 2.0).
+    ]
+
+    drawMinuteLine: context [
+       <category: 'drawing'>
+
+       self drawClockLine: context angle: (minute * (Float pi / 30.0)) - 
(Float pi / 2.0)
+    ]
+
+    drawSecondLine: context [
+       <category: 'drawing'>
+
+       self drawClockLine: context angle: (second * (Float pi / 30.0)) - 
(Float pi / 2.0)
+    ]
+
+    drawClock: context [
+       <category: 'drawing'>
+
+       self
+            drawClockCircle: context;
+            drawHourMarker: context;
+            drawHourLine: context;
+            drawMinuteLine: context;
+            drawSecondLine: context
+    ]
+
+    expose: aGtkWidget event: aGdkEventExpose [
+
+       aGtkWidget getWindow withContextDo: [ :cr |
+           canvas := cr.
+
+           x := 128.
+           y := 128.
+
+           self
+               clearArea: aGtkWidget getAllocation;
+               time;
+               drawClock: cr ].
+
+       ^ true
+    ]
+
+    initialize [
+       <category: 'intialization'>
+
+       window := (GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel).
+       window
+           setColormap: window getScreen getRgbaColormap;
+           connectSignal: 'expose_event' to: self selector: #'expose:event:';
+           connectSignal: 'delete-event' to: self selector: #'delete:event:';
+           setDecorated: false.
+       radius := 100
+    ]
+
+    delete: aGtkWidget event: aGdkEvent [
+        <category: 'windows event'>
+
+        self quit.
+        ^ true
+    ]
+
+    resize: aPoint [
+       <category: 'user interface'>
+
+       window resize: aPoint x height: aPoint y
+    ]
+
+    showAll [
+       | delay |
+
+       delay := Delay forSeconds: 1.
+       window showAll.
+       process := [ [ true ] whileTrue: [ window queueDraw. delay wait ] ] fork
+    ]
+]
diff --git a/packages/gtktools/Examples/Clock/Makefile.frag 
b/packages/gtktools/Examples/Clock/Makefile.frag
new file mode 100644
index 0000000..44a1b4b
--- /dev/null
+++ b/packages/gtktools/Examples/Clock/Makefile.frag
@@ -0,0 +1,5 @@
+GTKTools-Example-Clock_FILES = \
+packages/gtktools/Examples/Clock/GtkClock.st
+$(GTKTools-Example-Clock_FILES):
+$(srcdir)/packages/gtktools/Examples/Clock/stamp-classes: 
$(GTKTools-Example-Clock_FILES)
+       touch $(srcdir)/packages/gtktools/Examples/Clock/stamp-classes
diff --git a/packages/gtktools/Examples/Clock/package.xml 
b/packages/gtktools/Examples/Clock/package.xml
new file mode 100644
index 0000000..dbde9cc
--- /dev/null
+++ b/packages/gtktools/Examples/Clock/package.xml
@@ -0,0 +1,9 @@
+<package>
+    <name>GTKTools-Example-Clock</name>
+    <namespace>Clock</namespace>
+    <prereq>GTKTools</prereq>
+
+    <filein>GtkClock.st</filein>
+    <start>Clock.GtkClock open.
+    GTK.Gtk main</start>
+</package>
diff --git a/packages/gtktools/Examples/Tetris/BlockWidget.st 
b/packages/gtktools/Examples/Tetris/BlockWidget.st
new file mode 100644
index 0000000..d5ff04c
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/BlockWidget.st
@@ -0,0 +1,44 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPieceWidget subclass: BlockWidget [
+
+    drawOn: aCanvas [
+       <category: 'drawing'>
+
+       | linear |
+        linear := Cairo.LinearGradient from: position to: (position x + size@ 
position y + size).
+        linear addStopAt: 0 color: color.
+        linear addStopAt: 1 color: Cairo.Color black.
+
+        aCanvas
+            fill: [ aCanvas rectangle: (position extent: address@hidden) ]
+            with: linear
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/HighScores.st 
b/packages/gtktools/Examples/Tetris/HighScores.st
new file mode 100644
index 0000000..6c21313
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/HighScores.st
@@ -0,0 +1,36 @@
+Object subclass: HighScores [
+
+    | highScores maxScores |
+
+    HighScores class >> newSized: anInteger [
+       <category: 'instance creation'>
+
+       ^ self new
+           maxScores: anInteger;
+           yourself
+    ]
+
+    highScores [
+       <category: 'accessing'>
+
+       ^ highScores ifNil: [ highScores := OrderedCollection new ]
+    ]
+
+    maxScores: anInteger [
+       <category: 'accessing'>
+
+       maxScores := anInteger
+    ]
+
+    addScore: aScore [
+       <category: 'updating'>
+
+       | pos |
+       pos := 0.
+       self highScores doWithIndex: [ :each :index |
+           each < index ifTrue: [ pos := index ] ].
+       pos = 0 ifTrue: [ ^ self ].
+       self highScores add: aScore after: pos.
+       self highScores size > self maxScores ifTrue: [ self highScores 
removeLast ]
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/Makefile.frag 
b/packages/gtktools/Examples/Tetris/Makefile.frag
new file mode 100644
index 0000000..a186062
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/Makefile.frag
@@ -0,0 +1,5 @@
+GTKTools-Example-Tetris_FILES = \
+packages/gtktools/Examples/Tetris/HighScores.st 
packages/gtktools/Examples/Tetris/Score.st 
packages/gtktools/Examples/Tetris/TetrisPieceWidget.st 
packages/gtktools/Examples/Tetris/BlockWidget.st 
packages/gtktools/Examples/Tetris/TetrisField.st 
packages/gtktools/Examples/Tetris/TetrisPiece.st 
packages/gtktools/Examples/Tetris/TetrisPieceI.st 
packages/gtktools/Examples/Tetris/TetrisPieceJ.st 
packages/gtktools/Examples/Tetris/TetrisPieceL.st 
packages/gtktools/Examples/Tetris/TetrisPieceO.st 
packages/gtktools/Examples/Tetris/TetrisPieceS.st 
packages/gtktools/Examples/Tetris/TetrisPieceT.st 
packages/gtktools/Examples/Tetris/TetrisPieceZ.st 
packages/gtktools/Examples/Tetris/Tetris.st
+$(GTKTools-Example-Tetris_FILES):
+$(srcdir)/packages/gtktools/Examples/Tetris/stamp-classes: 
$(GTKTools-Example-Tetris_FILES)
+       touch $(srcdir)/packages/gtktools/Examples/Tetris/stamp-classes
diff --git a/packages/gtktools/Examples/Tetris/Score.st 
b/packages/gtktools/Examples/Tetris/Score.st
new file mode 100644
index 0000000..967e7df
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/Score.st
@@ -0,0 +1,24 @@
+Object subclass: Score [
+
+    Score class >> score: anInteger [
+       <category: 'instance creation'>
+
+       ^ self new
+           score: anInteger;
+           yourself
+    ]
+
+    | score |
+
+    score: anInteger [
+       <category: 'accessing'>
+
+       score := anInteger
+    ]
+
+    score [
+       <category: 'acccessing'>
+
+       ^ score
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/Tetris.st 
b/packages/gtktools/Examples/Tetris/Tetris.st
new file mode 100644
index 0000000..358047e
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/Tetris.st
@@ -0,0 +1,390 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+GTKTools.GtkMainWindow subclass: Tetris [
+    | canvasWidget canvas process pause delay grid movingBlocks level score 
level lines |
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    Tetris class [ | highScores | ]
+
+    Tetris class >> highScores [
+       <category: 'accessing'>
+
+       ^ highScores ifNil: [ highScores := HighScores newSized: 10 ]
+    ]
+
+    Tetris class >> open [
+       <category: 'user interface'>
+
+       TetrisPiece initialize.
+
+       ^ super open
+           play;
+           yourself
+    ]
+
+    initialize [
+       <category: 'initialization'>
+
+       movingBlocks := false.
+       super initialize.
+    ]
+
+    windowTitle [
+       <category: 'initialization'>
+
+       ^'Tetris'
+    ]
+
+    postInitialize [
+       <category: 'initialization'>
+
+       super postInitialize.
+        canvasWidget grabFocus.
+       window
+           connectSignal: 'key-press-event' to: self selector: 
#'keyPressedOn:keyEvent:'
+    ]
+
+    onDelete [
+       <category: 'windows event'>
+
+       self quit.
+       ^ true
+    ]
+
+    createHelpMenus [
+        <category: 'user interface'>
+
+        ^{GTK.GtkMenuItem menuItem: 'About Tetris' connectTo: self selector: 
#aboutLauncher.
+            GTK.GtkMenuItem menuItem: 'About GNU Smalltalk' connectTo: self 
selector: #aboutGst}
+    ]
+
+    createMenus [
+        <category: 'user interface'>
+
+        self createMainMenu: #(#('Help' #createHelpMenus))
+    ]
+
+    buildCentralWidget [
+       <category: 'user interface'>
+
+       ^ canvasWidget := GTK.GtkDrawingArea new
+           setSizeRequest: 400 height: 700;
+           connectSignal: 'expose_event' to: self selector: #'expose:event:';
+           yourself
+    ]
+
+    clearArea: aGtkAllocation [
+        <category: 'drawing'>
+
+        | res |
+        res := aGtkAllocation castTo: (CIntType arrayType: 4).
+
+        canvas saveWhile: [
+           canvas
+                rectangle: ((address@hidden) extent: ((res at: 2) @ (res at: 
3)));
+                operator: #clear;
+                fill ]
+    ]
+
+    drawArea [
+       <category: 'drawing'>
+
+       1 to: 22 do: [ :i |
+           BlockWidget new
+               position: 50@(50 + ((i - 1) * 15));
+               size: 15;
+               color: Cairo.Color white;
+               drawOn: canvas.
+
+            BlockWidget new
+                position: (50 + (11 * 15))@(50 + ((i - 1) * 15));
+                size: 15;
+               color: Cairo.Color white;
+                drawOn: canvas ].
+
+       1 to: 12 do: [ :i |
+            BlockWidget new
+                position: (50 + ((i - 1) * 15))@50;
+                size: 15;
+               color: Cairo.Color white;
+                drawOn: canvas.
+
+            BlockWidget new
+                position: (50 + ((i - 1) * 15))@(50 + (22 * 15));
+                size: 15;
+               color: Cairo.Color white;
+                drawOn: canvas ]
+    ]
+
+    drawGrid [
+       <category: 'drawing'>
+
+       grid ifNil: [ ^ self ].
+       grid drawOn: canvas
+    ]
+
+    drawScore [
+       <category: 'drawing'>
+
+       canvas
+           moveTo: address@hidden;
+           sourceRed: 1 green: 1 blue: 1;
+           showText: 'Score : ', (self score displayString);
+           moveTo: address@hidden;
+           showText: 'Level : ', (self level displayString);
+           stroke.
+    ]
+
+    expose: aGtkWidget event: aGdkEventExpose [
+       <category: 'drawing event'>
+
+       aGtkWidget getWindow withContextDo: [ :cr |
+            canvas := cr.
+            self
+                clearArea: aGtkWidget getAllocation;
+               drawArea;
+               drawGrid;
+               drawScore ].
+
+        ^ true
+    ]
+
+    keyPressedOn: aGtkWidget keyEvent: aGdkEventKey [
+       <category: 'key event'>
+
+       | event |
+       movingBlocks ifFalse: [ ^ false ].
+
+       event := aGdkEventKey castTo: GTK.GdkEventKey type.
+
+       event keyval value = 65361 ifTrue: [ self movePieceLeft. ^ true ].
+       event keyval value = 65363 ifTrue: [ self movePieceRight. ^ true ].
+       event keyval value = 65362 ifTrue: [ self rotatePiece. ^ true ].
+       event keyval value = 65364 ifTrue: [ self dropPiece. ^ true ].
+
+       ^ false
+    ]
+
+    refresh [
+       <category: 'drawing'>
+
+       canvasWidget queueDraw
+    ]
+
+    cycle [
+       <category: 'game'>
+
+       | result filledLines |
+       grid := TetrisField new.
+       [ movingBlocks := true.
+         result := grid currentPiece: TetrisPiece random.
+         result ifTrue: [ self
+                           refresh;
+                           delay ].
+         result ] whileTrue: [
+               [ result := self slidePiece.
+                 self refresh.
+                 result ] whileTrue: [ self delay ].
+                 filledLines := self
+                                   resetMovingBlocks;
+                                   cementPiece;
+                                   removeLines.
+                 self updateScore: filledLines.
+                 Processor yield ].
+
+       ^ self gameOver
+    ]
+
+    initializeGame [
+       <category: 'game'>
+
+       self
+           level: 1;
+           lines: 0;
+           score: 0.
+       movingBlocks := true
+    ]
+
+    play [
+       <category: 'game'>
+
+       process := [ self
+                       initializeGame;
+                       cycle ] fork.
+    ]
+
+    quit [
+       <category: 'game'>
+
+       process terminate.
+       window hideAll
+    ]
+
+    gameOver [
+       <category: 'game'>
+
+       self highScores addScore: (Score score: self score)
+    ]
+
+    resetMovingBlocks [
+       <category: 'game'>
+
+       movingBlocks := false
+    ]
+
+    delay [
+       "I like this method a lot!"
+
+       <category: 'private'>
+       delay wait.
+
+       "Especially this semaphore!!
+       pause wait.
+       pause signal"
+    ]
+
+    highScores [
+       <category: 'accessing'>
+
+       ^ self class highScores
+    ]
+
+    level [
+       <category: 'accessing'>
+
+       ^ level
+    ]
+
+    level: nextLevel [
+       <category: 'private'>
+
+       level := nextLevel min: 10.
+       delay := Delay forMilliseconds: 825 - (75 * level).
+    ]
+
+    lines [
+       <category: 'private'>
+
+       ^ lines
+    ]
+
+    lines: newLines [
+       <category: 'private'>
+
+       lines := newLines
+    ]
+
+    score [
+       <category: 'private'>
+
+       ^ score
+    ]
+
+    score: newScore [
+       <category: 'private'>
+
+       score := newScore
+    ]
+
+    updateScore: filledLines [
+       <category: 'private'>
+
+       self lines: self lines + filledLines.
+        (self lines - 1) // 10 > (self level - 1) ifTrue: [ self advanceLevel 
].
+        self score: 2 * self level squared + (#(0 50 150 400 900) at: 
filledLines + 1) + self score
+    ]
+
+    advanceLevel [
+       <category: 'events'>
+
+       self level: self level + 1
+    ]
+
+    movePieceLeft [
+       <category: 'events'>
+
+       grid movePieceLeft.
+       self refresh
+    ]
+
+    movePieceRight [
+       <category: 'events'>
+
+       grid movePieceRight.
+       self refresh
+    ]
+
+    pause [
+       <category: 'events'>
+
+       "I like this semaphore a lot!"
+       pause wait
+    ]
+
+    restart [
+       <category: 'events'>
+
+       "I like this semaphore a lot!"
+       pause signal
+    ]
+
+    rotatePiece [
+       <category: 'events'>
+
+       grid rotatePiece.
+       self refresh
+    ]
+
+    slidePiece [
+       <category: 'events'>
+
+       ^ grid slidePiece
+    ]
+
+    cementPiece [
+       <category: 'events'>
+
+       ^ grid cementPiece
+    ]
+
+    removeLines [
+       <category: 'game'>
+
+       ^ grid removeLines
+    ]
+
+    dropPiece [
+       <category: 'events'>
+
+       ^ grid dropPiece
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisField.st 
b/packages/gtktools/Examples/Tetris/TetrisField.st
new file mode 100644
index 0000000..1f2fadd
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisField.st
@@ -0,0 +1,179 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+
+Object subclass: TetrisField [
+    | rows currentPiece |
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisField class >> new [
+       <category: 'instance creation'>
+
+       ^ self basicNew initialize
+    ]
+
+    at: point [
+       <category: 'accessing'>
+
+       ^ (rows at: point y) at: point x
+    ]
+
+    at: point put: value [
+       <category: 'accessing'>
+
+       ^ (rows at: point y) at: point x put: value
+    ]
+
+    initialize [
+       <category: 'initializing'>
+
+       rows := (1 to: 22) collect: [:each | ByteArray new: 10].
+       rows do: [:each | self initializeLine: each].
+       (rows at: 22) atAll: (1 to: 10) put: 1
+    ]
+
+    initializeLine: line [
+       <category: 'initializing'>
+
+       line
+           atAll: (1 to: 10) put: 0
+    ]
+
+    checkLine: y [
+       <category: 'removing filled lines'>
+
+       ^ (rows at: y) allSatisfy: [:each | each ~~ 0]
+    ]
+
+    removeLines [
+       <category: 'removing filled lines'>
+
+       | removed lastLine firstLine |
+       removed := 0.
+       firstLine := self currentPiece y.
+       lastLine := 21 min: firstLine + 3.
+       lastLine - firstLine + 1 timesRepeat:
+               [(self checkLine: lastLine)
+                   ifTrue:
+                       [removed := removed + 1.
+                       self removeLine: lastLine]
+                   ifFalse: [lastLine := lastLine - 1]].
+       ^ removed
+    ]
+
+    removeLine: filledY [
+       <category: 'removing filled lines'>
+
+       | saved y shift line |
+       saved := rows at: filledY.
+       filledY to: 2
+           by: -1
+           do: [:each | rows at: each put: (rows at: each - 1)].
+       self initializeLine: saved.
+       rows at: 1 put: saved
+    ]
+
+    cementPiece [
+       <category: 'piece'>
+
+       self currentPiece cementOn: self
+    ]
+
+    dropPiece [
+       <category: 'moving pieces'>
+
+       [ self slidePiece ] whileTrue: []
+    ]
+
+    movePieceLeft [
+       <category: 'moving pieces'>
+
+       self currentPiece x: self currentPiece x - 1.
+       ^ self currentPiece moveInto: self
+           ifFail: [self currentPiece x: self currentPiece x + 1]
+    ]
+
+    movePieceRight [
+       <category: 'moving pieces'>
+
+       self currentPiece x: self currentPiece x + 1.
+       ^ self currentPiece moveInto: self
+           ifFail: [ self currentPiece x: self currentPiece x - 1 ]
+    ]
+
+    rotatePiece [
+       <category: 'moving pieces'>
+
+       self currentPiece rotate: 1.
+       ^ self currentPiece moveInto: self ifFail: [ self currentPiece rotate: 
3 ]
+    ]
+
+    slidePiece [
+       <category: 'moving pieces'>
+
+       self currentPiece y: self currentPiece y + 1.
+       ^ self currentPiece moveInto: self
+           ifFail: [self currentPiece y: self currentPiece y - 1]
+    ]
+
+    currentPiece [
+       <category: 'accessing piece variables'>
+
+       ^ currentPiece
+    ]
+
+    currentPiece: piece [
+       <category: 'accessing piece variables'>
+
+       currentPiece := piece.
+       (self currentPiece)
+           x: 4;
+           y: 1.
+
+       self currentPiece moveInto: self
+            ifFail: [ ^ false ].
+       ^ true
+    ]
+
+    drawOn: aCanvas [
+       <category: 'drawing'>
+
+       1 to: 21 do: [ :y |
+           1 to: 10 do: [ :x |
+               ((rows at: y) at: x) ~= 0 ifTrue: [
+                   BlockWidget new
+                       position: (50 + (x * 15))@(50 + (y * 15));
+                       size: 15;
+                       color: Cairo.Color white;
+                       drawOn: aCanvas ] ] ].
+       self currentPiece drawOn: aCanvas
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisFieldWidget.st 
b/packages/gtktools/Examples/Tetris/TetrisFieldWidget.st
new file mode 100644
index 0000000..59efbad
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisFieldWidget.st
@@ -0,0 +1,57 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: TetrisFieldWidget [
+
+    | position size color |
+
+    position: aPoint [
+       <category: 'accessing'>
+
+       position := aPoint
+    ]
+
+    size: anInteger [
+       <category: 'accessing'>
+
+       size := anInteger
+    ]
+
+    color: aColor [
+       <category: 'accessing'>
+
+       color := aColor
+    ]
+
+    drawOn: aCanvas [
+       <category: 'drawing'>
+
+       self subclassResponsibility
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPiece.st 
b/packages/gtktools/Examples/Tetris/TetrisPiece.st
new file mode 100644
index 0000000..4b1c489
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPiece.st
@@ -0,0 +1,174 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: TetrisPiece [
+    | rotation origin |
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    Pieces := nil.
+
+    TetrisPiece class >> pieces [
+       <category: 'accessing'>
+
+       ^ Pieces ifNil: [ Pieces := self subclasses asOrderedCollection ]
+    ]
+
+    TetrisPiece class >> random [
+       <category: 'pieces'>
+
+       | piece |
+       piece := Random between: 1 and: 7.
+       ^ (self pieces at: piece) new
+           initialize;
+           yourself
+    ]
+
+    initialize [
+       <category: 'initialization'>
+
+       rotation := 1.
+       origin := Point new
+    ]
+
+    piece [
+       <category: 'accessing'>
+
+       ^ self class piece
+    ]
+
+    color [
+       <category: 'drawing'>
+
+       ^ self class color
+    ]
+
+    cementOn: field [
+       <category: 'blocks'>
+
+        | point x y |
+        point := Point new.
+        y := 0.
+        (self piece at: rotation) do: [ :line |
+                    x := 0.
+                    line do: [ :elem |
+                        elem = 1 ifTrue: [
+                            point
+                                x: self origin x + x;
+                                y: self origin y + y.
+                            (field at: point) = 0 ifTrue: [ field at: point 
put: elem ] ].
+                       x := x + 1 ].
+                   y := y + 1].
+    ]
+
+    canMoveInto: field [
+       <category: 'moving'>
+
+       | point x y |
+       point := Point new.
+       y := 0.
+       (self piece at: rotation) do: [ :line |
+                   x := 0.
+                   line do: [ :elem |
+                       elem = 1 ifTrue: [
+                           point
+                               x: self origin x + x;
+                               y: self origin y + y.
+                           (field at: point) > 0 ifTrue: [ ^ false ] ].
+                       x := x + 1 ].
+                   y := y + 1 ].
+       ^ true
+    ]
+
+    moveInto: field ifFail: aBlock [
+       <category: 'moving'>
+
+       (self canMoveInto: field) ifFalse: [ aBlock value.
+                                   ^ false ].
+       ^ true
+    ]
+
+    rotate: howMany [
+       "Three lines are necessary because rotation is in the 1..4 range,
+        while \\ likes a 0..3 range"
+
+       <category: 'moving'>
+       rotation := rotation - 1.
+       rotation := (rotation + howMany) \\ 4.
+       rotation := rotation + 1
+    ]
+
+    origin [
+       <category: 'accessing'>
+
+       ^ origin
+    ]
+
+    x [
+       <category: 'accessing'>
+
+       ^ self origin x
+    ]
+
+    x: x [
+       <category: 'accessing'>
+
+       self origin x: x
+    ]
+
+    y [
+       <category: 'accessing'>
+
+       ^ self origin y
+    ]
+
+    y: y [
+       <category: 'accessing'>
+
+       self origin y: y
+    ]
+
+    drawOn: aCanvas [
+       <category: 'drawing'>
+
+       | y |
+       y := 0.
+        (self piece at: rotation) do: [ :line |
+           y := y + 1.
+            1 to: 4 do: [ :x |
+                (line at: x) ~= 0 ifTrue: [
+                    BlockWidget new
+                        position: (50 + ((self x + x - 1) * 15))@(50 + ((self 
y + y - 1) * 15));
+                        size: 15;
+                       color: self color;
+                        drawOn: aCanvas ] ] ]
+    ]
+
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceI.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceI.st
new file mode 100644
index 0000000..772e607
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceI.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceI [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceI class >> piece [
+       <category: 'pieces'>
+
+       ^#( #( #(1 0 0 0)
+              #(1 0 0 0)
+              #(1 0 0 0)
+              #(1 0 0 0))
+           #( #(0 0 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0)
+              #(1 1 1 1))
+           #( #(1 0 0 0)
+              #(1 0 0 0)
+              #(1 0 0 0)
+              #(1 0 0 0))
+           #( #(0 0 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0)
+              #(1 1 1 1)))
+    ]
+
+    TetrisPieceI class >> color [
+       <category: 'pieces'>
+
+       ^ Cairo.Color red
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceJ.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceJ.st
new file mode 100644
index 0000000..aa26777
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceJ.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceJ [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceJ class >> piece [
+       <category: 'pieces'>
+
+       ^#( #( #(0 1 0 0)
+              #(0 1 0 0)
+              #(1 1 0 0)
+              #(0 0 0 0))
+           #( #(1 0 0 0)
+              #(1 1 1 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(1 0 0 0)
+              #(1 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 1 0)
+              #(0 0 1 0)
+              #(0 0 0 0)
+              #(0 0 0 0)))
+    ]
+
+    TetrisPieceJ class >> color [
+       <category: 'pieces'>
+
+       ^ Cairo.Color magenta
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceL.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceL.st
new file mode 100644
index 0000000..5a0748f
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceL.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceL [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceL class >> piece [
+       <category: 'pieces'>
+
+       ^#( #( #(1 0 0 0)
+              #(1 0 0 0)
+              #(1 1 0 0)
+              #(0 0 0 0))
+           #( #(1 1 1 0)
+              #(1 0 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(0 1 0 0)
+              #(0 1 0 0)
+              #(0 0 0 0))
+           #( #(0 0 1 0)
+              #(1 1 1 0)
+              #(0 0 0 0)
+              #(0 0 0 0)))
+    ]
+
+    TetrisPieceL class >> color [
+       <category: 'pieces'>
+
+       ^ Cairo.Color r: 0.74 g: 0.71 b: 0.42 "DarkKhaki"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceO.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceO.st
new file mode 100644
index 0000000..417502f
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceO.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceO [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceO class >> piece [
+       <category: 'pieces'>
+
+       ^#( #( #(1 1 0 0)
+              #(1 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(1 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(1 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(1 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0)))
+    ]
+
+    TetrisPieceO class >> color [
+       <category: 'piece'>
+
+       ^ Cairo.Color r: 0.54 g: 0.17 b: 0.88 "BlueViolet"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceS.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceS.st
new file mode 100644
index 0000000..b3b242b
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceS.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceS [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceS class >> piece [
+       <category: 'pieces'>
+
+       ^#( #( #(0 1 0 0)
+              #(1 1 0 0)
+              #(1 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(0 1 1 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(0 1 0 0)
+              #(1 1 0 0)
+              #(1 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 0 0)
+              #(0 1 1 0)
+              #(0 0 0 0)
+              #(0 0 0 0)))
+    ]
+
+    TetrisPieceS class >> color [
+       <category: 'pieces'>
+
+       ^ Cairo.Color cyan
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceT.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceT.st
new file mode 100644
index 0000000..f1f963b
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceT.st
@@ -0,0 +1,60 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceT [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceT class >> piece [
+       <category: 'pieces'>
+       ^#( #( #(0 1 0 0)
+              #(1 1 1 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 0 0 0)
+              #(1 1 0 0)
+              #(1 0 0 0)
+              #(0 0 0 0))
+           #( #(1 1 1 0)
+              #(0 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(0 1 0 0)
+              #(1 1 0 0)
+              #(0 1 0 0)
+              #(0 0 0 0)))
+    ]
+
+    TetrisPieceT class >> color [
+       <category: 'pieces'>
+
+       ^ Cairo.Color r: 0.13 g: 0.54 b: 0.13 "ForestGreen"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceWidget.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceWidget.st
new file mode 100644
index 0000000..f56a8ba
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceWidget.st
@@ -0,0 +1,57 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: TetrisPieceWidget [
+
+    | position size color |
+
+    position: aPoint [
+       <category: 'accessing'>
+
+       position := aPoint
+    ]
+
+    size: anInteger [
+       <category: 'accessing'>
+
+       size := anInteger
+    ]
+
+    color: aColor [
+       <category: 'accessing'>
+
+       color := aColor
+    ]
+
+    drawOn: aCanvas [
+       <category: 'drawing'>
+
+       self subclassResponsibility
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceZ.st 
b/packages/gtktools/Examples/Tetris/TetrisPieceZ.st
new file mode 100644
index 0000000..b893aca
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceZ.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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, or (at your option) any later version.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceZ [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceZ class >> piece [
+       <category: 'pieces'>
+
+       ^#( #( #(1 0 0 0)
+              #(1 1 0 0)
+              #(0 1 0 0)
+              #(0 0 0 0))
+           #( #(0 1 1 0)
+              #(1 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0))
+           #( #(1 0 0 0)
+              #(1 1 0 0)
+              #(0 1 0 0)
+              #(0 0 0 0))
+           #( #(0 1 1 0)
+              #(1 1 0 0)
+              #(0 0 0 0)
+              #(0 0 0 0)))
+    ]
+
+    TetrisPieceZ class >> color [
+       <category: 'pieces'>
+
+       ^ Cairo.Color r: 0.99 g: 0.55 b: 0 "DarkOrange"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/package.xml 
b/packages/gtktools/Examples/Tetris/package.xml
new file mode 100644
index 0000000..83978ae
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/package.xml
@@ -0,0 +1,23 @@
+<package>
+    <name>GTKTools-Example-Tetris</name>
+    <namespace>Tetris</namespace>
+    <prereq>GTKTools</prereq>
+
+    <filein>HighScores.st</filein>
+    <filein>Score.st</filein>
+    <filein>TetrisPieceWidget.st</filein>
+    <filein>BlockWidget.st</filein>
+    <filein>TetrisField.st</filein>
+    <filein>TetrisPiece.st</filein>
+    <filein>TetrisPieceI.st</filein>
+    <filein>TetrisPieceJ.st</filein>
+    <filein>TetrisPieceL.st</filein>
+    <filein>TetrisPieceO.st</filein>
+    <filein>TetrisPieceS.st</filein>
+    <filein>TetrisPieceT.st</filein>
+    <filein>TetrisPieceZ.st</filein>
+    <filein>Tetris.st</filein>
+
+    <start>Tetris.Tetris open.
+    GTK.Gtk main</start>
+</package>
diff --git a/packages/visualgst/Clock/GtkClock.st 
b/packages/visualgst/Clock/GtkClock.st
deleted file mode 100644
index a566c33..0000000
--- a/packages/visualgst/Clock/GtkClock.st
+++ /dev/null
@@ -1,165 +0,0 @@
-Smalltalk.Object subclass: GtkClock [
-    | canvas hour minute process radius second window x y |
-
-    GtkClock class >> open [
-       <category: 'user interface'>
-
-       ^ (self new)
-           initialize;
-           showAll;
-           yourself
-    ]
-
-    GtkClock class >> openSized: aPoint [
-       <category: 'user interface'>
-       
-       ^ (self new)
-           initialize;
-           resize: aPoint;
-           showAll;
-           yourself
-    ]
-
-    quit [
-       <category: 'events'>
-
-       process terminate.
-       window hide
-    ]
-
-    time [
-       <category: 'time'>
-
-       | now |
-       now := DateTime now.
-        hour := now hour.
-        minute := now minute.
-        second := now second.
-    ]
-
-    clearArea: aGtkAllocation [
-       <category: 'drawing'>
-
-       | res |
-        res := aGtkAllocation castTo: (CIntType arrayType: 4).
-
-        canvas saveWhile: [
-            canvas
-                rectangle: ((address@hidden) extent: ((res at: 2) @ (res at: 
3)));
-                operator: #clear;
-                fill ]
-    ]
-
-    drawClockCircle: context [
-       <category: 'drawing'>
-
-        context
-            lineWidth: 6;
-            stroke: [ context arc: address@hidden radius: radius from: 0 to: 
Float pi * 2 ]
-    ]
-
-    drawHourMarker: context [
-       <category: 'drawing'>
-
-        1 to: 12 do: [ :i |
-            context
-                lineWidth: 4;
-                stroke: [ | inset |
-                    inset := 0.1 * radius.
-                    context
-                        moveTo: (x + ((radius - inset) * (i * Float pi / 6.0) 
cos)) @ (y + ((radius - inset) * (i * Float pi / 6.0) sin));
-                        lineTo: (x + (radius * (i * Float pi / 6.0) cos)) @ (y 
+ (radius * (i * Float pi / 6.0) sin)) ] ]
-    ]
-
-    drawClockLine: context angle: anAngFloat [
-       <category: 'drawing'>
-
-        context
-            lineWidth: 4;
-            paint: [
-                context stroke: [
-                    context
-                        sourceRed: 1 green: 0.2 blue: 0.2 alpha: 1.0;
-                        moveTo: address@hidden;
-                        lineTo: (x + (radius * anAngFloat  cos)) @ (y + 
(radius * anAngFloat sin)) ] ]
-            withAlpha: 0.64
-    ]
-
-    drawHourLine: context [
-       <category: 'drawing'>
-
-       self drawClockLine: context angle: (hour \\ 12 * (Float pi / 6.0)) - 
(Float pi / 2.0).
-    ]
-
-    drawMinuteLine: context [
-       <category: 'drawing'>
-
-       self drawClockLine: context angle: (minute * (Float pi / 30.0)) - 
(Float pi / 2.0)
-    ]
-
-    drawSecondLine: context [
-       <category: 'drawing'>
-
-       self drawClockLine: context angle: (second * (Float pi / 30.0)) - 
(Float pi / 2.0)
-    ]
-
-    drawClock: context [
-       <category: 'drawing'>
-
-       self
-            drawClockCircle: context;
-            drawHourMarker: context;
-            drawHourLine: context;
-            drawMinuteLine: context;
-            drawSecondLine: context
-    ]
-
-    expose: aGtkWidget event: aGdkEventExpose [
-
-       aGtkWidget getWindow withContextDo: [ :cr |
-           canvas := cr.
-
-           x := 128.
-           y := 128.
-
-           self 
-               clearArea: aGtkWidget getAllocation;
-               time;
-               drawClock: cr ].
-
-       ^ true
-    ]
-
-    initialize [
-       <category: 'intialization'>
-
-       window := (GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel).
-       window 
-           setColormap: window getScreen getRgbaColormap;
-           connectSignal: 'expose_event' to: self selector: #'expose:event:';
-           connectSignal: 'delete-event' to: self selector: #'delete:event:';
-           setDecorated: false.
-       radius := 100
-    ]
-
-    delete: aGtkWidget event: aGdkEvent [
-        <category: 'windows event'>
-
-        self quit.
-        ^ true
-    ]
-
-    resize: aPoint [
-       <category: 'user interface'>
-
-       window resize: aPoint x height: aPoint y
-    ]
-
-    showAll [
-       | delay |
-
-       delay := Delay forSeconds: 1.
-       window showAll.
-       process := [ [ true ] whileTrue: [ window queueDraw. delay wait ] ] fork
-    ]
-]
diff --git a/packages/visualgst/Makefile.frag b/packages/visualgst/Makefile.frag
index 5058822..f34ecaa 100644
--- a/packages/visualgst/Makefile.frag
+++ b/packages/visualgst/Makefile.frag
@@ -1,5 +1,5 @@
 VisualGST_FILES = \
-packages/visualgst/Notification/AbstractEvent.st 
packages/visualgst/Notification/AddedEvent.st 
packages/visualgst/Notification/CommentedEvent.st 
packages/visualgst/Notification/DoItEvent.st 
packages/visualgst/Notification/SystemEventManager.st 
packages/visualgst/Notification/EventMultiplexer.st 
packages/visualgst/Notification/EventDispatcher.st 
packages/visualgst/Notification/ModifiedEvent.st 
packages/visualgst/Notification/ModifiedClassDefinitionEvent.st 
packages/visualgst/Notification/RecategorizedEvent.st 
packages/visualgst/Notification/RemovedEvent.st 
packages/visualgst/Notification/RenamedEvent.st 
packages/visualgst/Notification/ReorganizedEvent.st 
packages/visualgst/Notification/SystemChangeNotifier.st 
packages/visualgst/GtkAnnouncer.st 
packages/visualgst/GtkNamespaceSelectionChanged.st 
packages/visualgst/GtkClassSelectionChanged.st 
packages/visualgst/Commands/Command.st 
packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st 
packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st 
packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st 
packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st 
packages/visualgst/Commands/TabsMenus/CloseTabCommand.st 
packages/visualgst/Commands/TabsMenus/NextTabCommand.st 
packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st 
packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st 
packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st 
packages/visualgst/Commands/ClassMenus/ClassCommand.st 
packages/visualgst/Commands/ClassMenus/InspectClassCommand.st 
packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st 
packages/visualgst/Commands/ClassMenus/AddClassCommand.st 
packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st 
packages/visualgst/Commands/ClassMenus/RenameClassCommand.st 
packages/visualgst/Commands/CategoryMenus/CategoryCommand.st 
packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st 
packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st 
packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st 
packages/visualgst/Commands/MethodMenus/MethodCommand.st 
packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st 
packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st 
packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st 
packages/visualgst/Commands/MethodMenus/DebugTestCommand.st 
packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st 
packages/visualgst/Commands/EditMenus/CancelEditCommand.st 
packages/visualgst/Commands/EditMenus/UndoEditCommand.st 
packages/visualgst/Commands/EditMenus/RedoEditCommand.st 
packages/visualgst/Commands/EditMenus/CutEditCommand.st 
packages/visualgst/Commands/EditMenus/CopyEditCommand.st 
packages/visualgst/Commands/EditMenus/PasteEditCommand.st 
packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st 
packages/visualgst/Commands/EditMenus/FindEditCommand.st 
packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st 
packages/visualgst/Commands/DebugMenus/DebugCommand.st 
packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st 
packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st 
packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st 
packages/visualgst/Menus/MenuBuilder.st 
packages/visualgst/Menus/MenuSeparator.st 
packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st 
packages/visualgst/Menus/DebuggerToolbar.st 
packages/visualgst/Menus/NamespaceMenus.st 
packages/visualgst/Menus/ClassMenus.st 
packages/visualgst/Menus/CategoryMenus.st 
packages/visualgst/Menus/ContextMenus.st 
packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st 
packages/visualgst/Menus/SmalltalkMenus.st 
packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st 
packages/visualgst/Menus/TabsMenus.st 
packages/visualgst/Menus/InspectorMenus.st 
packages/visualgst/Menus/TextMenus.st 
packages/visualgst/Menus/WorkspaceVariableMenus.st 
packages/visualgst/Menus/SimpleWorkspaceMenus.st 
packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st 
packages/visualgst/Category/ClassCategory.st 
packages/visualgst/Category/AbstractNamespace.st 
packages/visualgst/Category/Class.st packages/visualgst/GtkEntryWidget.st 
packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st pack
 ages/visualgst/GtkPackageBuilderWidget.st 
packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st 
packages/visualgst/GtkLauncher.st 
packages/visualgst/Text/GtkTextPluginWidget.st 
packages/visualgst/Text/GtkFindWidget.st 
packages/visualgst/Text/GtkReplaceWidget.st 
packages/visualgst/Text/GtkSaveTextWidget.st 
packages/visualgst/GtkNotebookWidget.st 
packages/visualgst/Image/GtkImageModel.st 
packages/visualgst/Image/GtkImageWidget.st 
packages/visualgst/Debugger/GtkContextWidget.st 
packages/visualgst/Debugger/GtkDebugger.st 
packages/visualgst/State/BrowserState.st 
packages/visualgst/State/NamespaceState.st 
packages/visualgst/State/ClassState.st 
packages/visualgst/State/CategoryState.st 
packages/visualgst/State/MethodState.st 
packages/visualgst/GtkWorkspaceWidget.st 
packages/visualgst/GtkTranscriptWidget.st 
packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st 
packages/visualgst/StBrowser/GtkCategorizedClassWidget.st 
packages/visualgst/StBrowser/GtkCategoryWid
 get.st packages/visualgst/StBrowser/GtkMethodWidget.st 
packages/visualgst/Text/GtkSourceCodeWidget.st 
packages/visualgst/StBrowser/GtkClassHierarchyWidget.st 
packages/visualgst/GtkHistoryWidget.st 
packages/visualgst/Inspector/GtkInspector.st 
packages/visualgst/StBrowser/GtkClassBrowserWidget.st 
packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st 
packages/visualgst/Undo/UndoCommand.st 
packages/visualgst/Undo/AddNamespaceUndoCommand.st 
packages/visualgst/Undo/RenameNamespaceUndoCommand.st 
packages/visualgst/Undo/DeleteNamespaceUndoCommand.st 
packages/visualgst/Source/SourceFormatter.st 
packages/visualgst/Source/NamespaceHeaderSource.st 
packages/visualgst/Source/NamespaceSource.st 
packages/visualgst/Source/ClassHeaderSource.st 
packages/visualgst/Source/ClassSource.st 
packages/visualgst/Source/CategorySource.st 
packages/visualgst/Source/MethodSource.st 
packages/visualgst/Source/PackageSource.st 
packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/
 AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st 
packages/visualgst/Undo/DeleteClassUndoCommand.st 
packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st 
packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st 
packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st 
packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st 
packages/visualgst/Undo/RenameCategoryUndoCommand.st 
packages/visualgst/Undo/AddMethodUndoCommand.st 
packages/visualgst/Undo/DeleteMethodUndoCommand.st 
packages/visualgst/WorkspaceVariableTracker.st 
packages/visualgst/GtkVariableTrackerWidget.st 
packages/visualgst/SyntaxHighlighter.st 
packages/visualgst/Undo/Text/InsertTextCommand.st 
packages/visualgst/Undo/Text/DeleteTextCommand.st 
packages/visualgst/Undo/Text/ReplaceTextCommand.st 
packages/visualgst/Clock/GtkClock.st 
packages/visualgst/Inspector/GtkInspectorSourceWidget.st 
packages/visualgst/Inspector/GtkInspectorBrowserWidget.st pack
 ages/visualgst/Inspector/GtkInspectorWidget.st 
packages/visualgst/Inspector/GtkObjectInspectorView.st 
packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st 
packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st 
packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st 
packages/visualgst/Inspector/GtkSetInspectorView.st 
packages/visualgst/Inspector/GtkDictionaryInspectorView.st 
packages/visualgst/Inspector/GtkCharacterInspectorView.st 
packages/visualgst/Inspector/GtkIntegerInspectorView.st 
packages/visualgst/Inspector/GtkFloatInspectorView.st 
packages/visualgst/Implementors/GtkImageResultsWidget.st 
packages/visualgst/Implementors/GtkImplementorResultsWidget.st 
packages/visualgst/Implementors/GtkSenderResultsWidget.st 
packages/visualgst/Notification/Kernel/AbstractNamespace.st 
packages/visualgst/Notification/Kernel/Metaclass.st 
packages/visualgst/Notification/Kernel/Class.st 
packages/visualgst/Notification/Kernel/MethodDictionary.st 
packages/visualgst/Debu
 gger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st 
packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st 
packages/visualgst/Tetris/TetrisPieceWidget.st 
packages/visualgst/Tetris/BlockWidget.st 
packages/visualgst/Tetris/TetrisField.st 
packages/visualgst/Tetris/TetrisPiece.st 
packages/visualgst/Tetris/TetrisPieceI.st 
packages/visualgst/Tetris/TetrisPieceJ.st 
packages/visualgst/Tetris/TetrisPieceL.st 
packages/visualgst/Tetris/TetrisPieceO.st 
packages/visualgst/Tetris/TetrisPieceS.st 
packages/visualgst/Tetris/TetrisPieceT.st 
packages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st 
packages/visualgst/SUnit/TestBacktraceLog.st 
packages/visualgst/SUnit/GtkSUnitResultWidget.st 
packages/visualgst/GtkClassSUnitWidget.st 
packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st 
packages/visualgst/Commands/OpenBrowserCommand.st 
packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Co
 mmands/ToolsMenus/OpenSUnitCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st 
packages/visualgst/Commands/OpenWorkspaceCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st 
packages/visualgst/Commands/SaveImageCommand.st 
packages/visualgst/Commands/SaveImageAsCommand.st 
packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st 
packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st 
packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st 
packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st 
packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st 
packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif 
packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png 
packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go
 -home.png packages/visualgst/Icons/go-jump.png 
packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png 
packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png 
packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png 
packages/visualgst/Icons/NUnit.Failed.png 
packages/visualgst/Icons/NUnit.Loading.png 
packages/visualgst/Icons/NUnit.None.png 
packages/visualgst/Icons/NUnit.NotRun.png 
packages/visualgst/Icons/NUnit.Running.png 
packages/visualgst/Icons/NUnit.SuccessAndFailed.png 
packages/visualgst/Icons/NUnit.Success.png 
packages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png 
packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png 
packages/visualgst/Tests/AddNamespaceUndoCommandTest.st 
packages/visualgst/Tests/GtkMethodWidgetTest.st 
packages/visualgst/Tests/CompiledMethodTest.st 
packages/visualgst/Tests/ExtractLiteralsTest.st 
packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/Me
 nuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st 
packages/visualgst/Tests/EmptyTest.st 
packages/visualgst/Tests/AddClassUndoCommandTest.st 
packages/visualgst/Tests/GtkCategoryWidgetTest.st 
packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st 
packages/visualgst/Tests/PragmaTest.st 
packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st 
packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
+packages/visualgst/Notification/AbstractEvent.st 
packages/visualgst/Notification/AddedEvent.st 
packages/visualgst/Notification/CommentedEvent.st 
packages/visualgst/Notification/DoItEvent.st 
packages/visualgst/Notification/SystemEventManager.st 
packages/visualgst/Notification/EventMultiplexer.st 
packages/visualgst/Notification/EventDispatcher.st 
packages/visualgst/Notification/ModifiedEvent.st 
packages/visualgst/Notification/ModifiedClassDefinitionEvent.st 
packages/visualgst/Notification/RecategorizedEvent.st 
packages/visualgst/Notification/RemovedEvent.st 
packages/visualgst/Notification/RenamedEvent.st 
packages/visualgst/Notification/ReorganizedEvent.st 
packages/visualgst/Notification/SystemChangeNotifier.st 
packages/visualgst/GtkAnnouncer.st 
packages/visualgst/GtkNamespaceSelectionChanged.st 
packages/visualgst/GtkClassSelectionChanged.st 
packages/visualgst/Commands/Command.st 
packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st 
packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st 
packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st 
packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st 
packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st 
packages/visualgst/Commands/TabsMenus/CloseTabCommand.st 
packages/visualgst/Commands/TabsMenus/NextTabCommand.st 
packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st 
packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st 
packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st 
packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st 
packages/visualgst/Commands/ClassMenus/ClassCommand.st 
packages/visualgst/Commands/ClassMenus/InspectClassCommand.st 
packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st 
packages/visualgst/Commands/ClassMenus/AddClassCommand.st 
packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st 
packages/visualgst/Commands/ClassMenus/RenameClassCommand.st 
packages/visualgst/Commands/CategoryMenus/CategoryCommand.st 
packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st 
packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st 
packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st 
packages/visualgst/Commands/MethodMenus/MethodCommand.st 
packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st 
packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st 
packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st 
packages/visualgst/Commands/MethodMenus/DebugTestCommand.st 
packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st 
packages/visualgst/Commands/EditMenus/CancelEditCommand.st 
packages/visualgst/Commands/EditMenus/UndoEditCommand.st 
packages/visualgst/Commands/EditMenus/RedoEditCommand.st 
packages/visualgst/Commands/EditMenus/CutEditCommand.st 
packages/visualgst/Commands/EditMenus/CopyEditCommand.st 
packages/visualgst/Commands/EditMenus/PasteEditCommand.st 
packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st 
packages/visualgst/Commands/EditMenus/FindEditCommand.st 
packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st 
packages/visualgst/Commands/DebugMenus/DebugCommand.st 
packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st 
packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st 
packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st 
packages/visualgst/Menus/MenuBuilder.st 
packages/visualgst/Menus/MenuSeparator.st 
packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st 
packages/visualgst/Menus/DebuggerToolbar.st 
packages/visualgst/Menus/NamespaceMenus.st 
packages/visualgst/Menus/ClassMenus.st 
packages/visualgst/Menus/CategoryMenus.st 
packages/visualgst/Menus/ContextMenus.st 
packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st 
packages/visualgst/Menus/SmalltalkMenus.st 
packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st 
packages/visualgst/Menus/TabsMenus.st 
packages/visualgst/Menus/InspectorMenus.st 
packages/visualgst/Menus/TextMenus.st 
packages/visualgst/Menus/WorkspaceVariableMenus.st 
packages/visualgst/Menus/SimpleWorkspaceMenus.st 
packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st 
packages/visualgst/Category/ClassCategory.st 
packages/visualgst/Category/AbstractNamespace.st 
packages/visualgst/Category/Class.st packages/visualgst/GtkEntryWidget.st 
packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st pack
 ages/visualgst/GtkPackageBuilderWidget.st 
packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st 
packages/visualgst/GtkLauncher.st 
packages/visualgst/Text/GtkTextPluginWidget.st 
packages/visualgst/Text/GtkFindWidget.st 
packages/visualgst/Text/GtkReplaceWidget.st 
packages/visualgst/Text/GtkSaveTextWidget.st 
packages/visualgst/GtkNotebookWidget.st 
packages/visualgst/Image/GtkImageModel.st 
packages/visualgst/Image/GtkImageWidget.st 
packages/visualgst/Debugger/GtkContextWidget.st 
packages/visualgst/Debugger/GtkDebugger.st 
packages/visualgst/State/BrowserState.st 
packages/visualgst/State/NamespaceState.st 
packages/visualgst/State/ClassState.st 
packages/visualgst/State/CategoryState.st 
packages/visualgst/State/MethodState.st 
packages/visualgst/GtkWorkspaceWidget.st 
packages/visualgst/GtkTranscriptWidget.st 
packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st 
packages/visualgst/StBrowser/GtkCategorizedClassWidget.st 
packages/visualgst/StBrowser/GtkCategoryWid
 get.st packages/visualgst/StBrowser/GtkMethodWidget.st 
packages/visualgst/Text/GtkSourceCodeWidget.st 
packages/visualgst/StBrowser/GtkClassHierarchyWidget.st 
packages/visualgst/GtkHistoryWidget.st 
packages/visualgst/Inspector/GtkInspector.st 
packages/visualgst/StBrowser/GtkClassBrowserWidget.st 
packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st 
packages/visualgst/Undo/UndoCommand.st 
packages/visualgst/Undo/AddNamespaceUndoCommand.st 
packages/visualgst/Undo/RenameNamespaceUndoCommand.st 
packages/visualgst/Undo/DeleteNamespaceUndoCommand.st 
packages/visualgst/Source/SourceFormatter.st 
packages/visualgst/Source/NamespaceHeaderSource.st 
packages/visualgst/Source/NamespaceSource.st 
packages/visualgst/Source/ClassHeaderSource.st 
packages/visualgst/Source/ClassSource.st 
packages/visualgst/Source/CategorySource.st 
packages/visualgst/Source/MethodSource.st 
packages/visualgst/Source/PackageSource.st 
packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/
 AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st 
packages/visualgst/Undo/DeleteClassUndoCommand.st 
packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st 
packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st 
packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st 
packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st 
packages/visualgst/Undo/RenameCategoryUndoCommand.st 
packages/visualgst/Undo/AddMethodUndoCommand.st 
packages/visualgst/Undo/DeleteMethodUndoCommand.st 
packages/visualgst/WorkspaceVariableTracker.st 
packages/visualgst/GtkVariableTrackerWidget.st 
packages/visualgst/SyntaxHighlighter.st 
packages/visualgst/Undo/Text/InsertTextCommand.st 
packages/visualgst/Undo/Text/DeleteTextCommand.st 
packages/visualgst/Undo/Text/ReplaceTextCommand.st 
packages/visualgst/Inspector/GtkInspectorSourceWidget.st 
packages/visualgst/Inspector/GtkInspectorBrowserWidget.st 
packages/visualgst/Inspector/GtkInspector
 Widget.st packages/visualgst/Inspector/GtkObjectInspectorView.st 
packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st 
packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st 
packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st 
packages/visualgst/Inspector/GtkSetInspectorView.st 
packages/visualgst/Inspector/GtkDictionaryInspectorView.st 
packages/visualgst/Inspector/GtkCharacterInspectorView.st 
packages/visualgst/Inspector/GtkIntegerInspectorView.st 
packages/visualgst/Inspector/GtkFloatInspectorView.st 
packages/visualgst/Implementors/GtkImageResultsWidget.st 
packages/visualgst/Implementors/GtkImplementorResultsWidget.st 
packages/visualgst/Implementors/GtkSenderResultsWidget.st 
packages/visualgst/Notification/Kernel/AbstractNamespace.st 
packages/visualgst/Notification/Kernel/Metaclass.st 
packages/visualgst/Notification/Kernel/Class.st 
packages/visualgst/Notification/Kernel/MethodDictionary.st 
packages/visualgst/Debugger/GtkStackInspectorView.st package
 s/visualgst/Debugger/GtkStackInspector.st 
packages/visualgst/SUnit/TestBacktraceLog.st 
packages/visualgst/SUnit/GtkSUnitResultWidget.st 
packages/visualgst/GtkClassSUnitWidget.st 
packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st 
packages/visualgst/Commands/OpenBrowserCommand.st 
packages/visualgst/Commands/OpenTabbedBrowserCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st 
packages/visualgst/Commands/OpenWorkspaceCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st 
packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st 
packages/visualgst/Commands/SaveImageCommand.st 
packages/visualgst/Commands/SaveImageAsCommand.st 
packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st 
packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st 
packages/visualgst/Commands/Works
 paceMenus/DeleteItemCommand.st 
packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st 
packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st 
packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif 
packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png 
packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png 
packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png 
packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png 
packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png 
packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png 
packages/visualgst/Icons/NUnit.Loading.png 
packages/visualgst/Icons/NUnit.None.png 
packages/visualgst/Icons/NUnit.NotRun.png 
packages/visualgst/Icons/NUnit.Running.png 
packages/visualgst/Icons/NUnit.SuccessAndFailed.png 
packages/visualgst/Icons/NUnit.Success.png 
packages/visualgst/Icons/extension.png
  packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png 
packages/visualgst/Icons/visualgst.png 
packages/visualgst/Tests/AddNamespaceUndoCommandTest.st 
packages/visualgst/Tests/GtkMethodWidgetTest.st 
packages/visualgst/Tests/CompiledMethodTest.st 
packages/visualgst/Tests/ExtractLiteralsTest.st 
packages/visualgst/Tests/CategoryTest.st 
packages/visualgst/Tests/MenuBuilderTest.st 
packages/visualgst/Tests/GtkAssistantTest.st 
packages/visualgst/Tests/EmptyTest.st 
packages/visualgst/Tests/AddClassUndoCommandTest.st 
packages/visualgst/Tests/GtkCategoryWidgetTest.st 
packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st 
packages/visualgst/Tests/PragmaTest.st 
packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st 
packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
 $(VisualGST_FILES):
 $(srcdir)/packages/visualgst/stamp-classes: $(VisualGST_FILES)
        touch $(srcdir)/packages/visualgst/stamp-classes
diff --git a/packages/visualgst/Tetris/BlockWidget.st 
b/packages/visualgst/Tetris/BlockWidget.st
deleted file mode 100644
index d5ff04c..0000000
--- a/packages/visualgst/Tetris/BlockWidget.st
+++ /dev/null
@@ -1,44 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-|
- ======================================================================"
-
-TetrisPieceWidget subclass: BlockWidget [
-
-    drawOn: aCanvas [
-       <category: 'drawing'>
-
-       | linear |
-        linear := Cairo.LinearGradient from: position to: (position x + size@ 
position y + size).
-        linear addStopAt: 0 color: color.
-        linear addStopAt: 1 color: Cairo.Color black.
-
-        aCanvas
-            fill: [ aCanvas rectangle: (position extent: address@hidden) ]
-            with: linear
-    ]
-]
diff --git a/packages/visualgst/Tetris/HighScores.st 
b/packages/visualgst/Tetris/HighScores.st
deleted file mode 100644
index 5629941..0000000
--- a/packages/visualgst/Tetris/HighScores.st
+++ /dev/null
@@ -1,37 +0,0 @@
-Object subclass: HighScores [
-
-    | highScores maxScores |
-
-    HighScores class >> newSized: anInteger [
-       <category: 'instance creation'>
-
-       ^ self new
-           maxScores: anInteger;
-           yourself
-    ]
-
-    highScores [
-       <category: 'accessing'>
-
-       ^ highScores ifNil: [ highScores := OrderedCollection new ]
-    ]
-
-    maxScores: anInteger [
-       <category: 'accessing'>
-
-       maxScores := anInteger
-    ]
-
-    addScore: aScore [
-       <category: 'updating'>
-
-       | pos |
-       pos := 0.
-       self highScores doWithIndex: [ :each :index |
-           each < index ifTrue: [ pos := index ] ].
-       pos = 0 ifTrue: [ ^ self ].
-       self highScores add: aScore after: pos.
-       self highScores size > self maxScores ifTrue: [ self highScores 
removeLast ]
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/Score.st 
b/packages/visualgst/Tetris/Score.st
deleted file mode 100644
index 805651b..0000000
--- a/packages/visualgst/Tetris/Score.st
+++ /dev/null
@@ -1,25 +0,0 @@
-Object subclass: Score [
-
-    Score class >> score: anInteger [
-       <category: 'instance creation'>
-
-       ^ self new
-           score: anInteger;
-           yourself
-    ]
-
-    | score |
-
-    score: anInteger [
-       <category: 'accessing'>
-
-       score := anInteger
-    ]
-
-    score [
-       <category: 'acccessing'>
-
-       ^ score
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/Tetris.st 
b/packages/visualgst/Tetris/Tetris.st
deleted file mode 100644
index c0c50de..0000000
--- a/packages/visualgst/Tetris/Tetris.st
+++ /dev/null
@@ -1,391 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-GTKTools.GtkMainWindow subclass: Tetris [
-    | canvasWidget canvas process pause delay grid movingBlocks level score 
level lines |
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    Tetris class [ | highScores | ]
-
-    Tetris class >> highScores [
-       <category: 'accessing'>
-
-       ^ highScores ifNil: [ highScores := HighScores newSized: 10 ]
-    ]
-
-    Tetris class >> open [
-       <category: 'user interface'>
-
-       TetrisPiece initialize.
-
-       ^ super open
-           play;
-           yourself
-    ]
-
-    initialize [
-       <category: 'initialization'>
-
-       movingBlocks := false.
-       super initialize.
-    ]
-
-    windowTitle [
-       <category: 'initialization'>
-
-       ^'Tetris'
-    ]
-
-    postInitialize [
-       <category: 'initialization'>
-
-       super postInitialize.
-        canvasWidget grabFocus.
-       window
-           connectSignal: 'key-press-event' to: self selector: 
#'keyPressedOn:keyEvent:'
-    ]
-
-    onDelete [
-       <category: 'windows event'>
-
-       self quit.
-       ^ true
-    ]
-
-    createHelpMenus [
-        <category: 'user interface'>
-
-        ^{GTK.GtkMenuItem menuItem: 'About Tetris' connectTo: self selector: 
#aboutLauncher.
-            GTK.GtkMenuItem menuItem: 'About GNU Smalltalk' connectTo: self 
selector: #aboutGst}
-    ]
-
-    createMenus [
-        <category: 'user interface'>
-
-        self createMainMenu: #(#('Help' #createHelpMenus))
-    ]
-
-    buildCentralWidget [
-       <category: 'user interface'>
-       
-       ^ canvasWidget := GTK.GtkDrawingArea new
-           setSizeRequest: 400 height: 700;
-           connectSignal: 'expose_event' to: self selector: #'expose:event:';
-           yourself
-    ]
-
-    clearArea: aGtkAllocation [
-        <category: 'drawing'>
-
-        | res |
-        res := aGtkAllocation castTo: (CIntType arrayType: 4).
-
-        canvas saveWhile: [ 
-           canvas
-                rectangle: ((address@hidden) extent: ((res at: 2) @ (res at: 
3)));
-                operator: #clear;
-                fill ]
-    ]
-
-    drawArea [
-       <category: 'drawing'>
-
-       1 to: 22 do: [ :i |
-           BlockWidget new
-               position: 50@(50 + ((i - 1) * 15));
-               size: 15;
-               color: Cairo.Color white;
-               drawOn: canvas.
-
-            BlockWidget new
-                position: (50 + (11 * 15))@(50 + ((i - 1) * 15));
-                size: 15;
-               color: Cairo.Color white;
-                drawOn: canvas ].
-
-       1 to: 12 do: [ :i |
-            BlockWidget new
-                position: (50 + ((i - 1) * 15))@50;
-                size: 15;
-               color: Cairo.Color white;
-                drawOn: canvas.
-
-            BlockWidget new
-                position: (50 + ((i - 1) * 15))@(50 + (22 * 15));
-                size: 15;
-               color: Cairo.Color white;
-                drawOn: canvas ]
-    ]
-
-    drawGrid [
-       <category: 'drawing'>
-
-       grid ifNil: [ ^ self ].
-       grid drawOn: canvas
-    ]
-
-    drawScore [
-       <category: 'drawing'>
-
-       canvas
-           moveTo: address@hidden;
-           sourceRed: 1 green: 1 blue: 1;
-           showText: 'Score : ', (self score displayString);
-           moveTo: address@hidden;
-           showText: 'Level : ', (self level displayString);
-           stroke.
-    ]
-
-    expose: aGtkWidget event: aGdkEventExpose [
-       <category: 'drawing event'>
-
-       aGtkWidget getWindow withContextDo: [ :cr |
-            canvas := cr.
-            self
-                clearArea: aGtkWidget getAllocation;
-               drawArea;
-               drawGrid;
-               drawScore ].
-
-        ^ true
-    ]
-
-    keyPressedOn: aGtkWidget keyEvent: aGdkEventKey [
-       <category: 'key event'>
-
-       | event |
-       movingBlocks ifFalse: [ ^ false ].
-
-       event := aGdkEventKey castTo: GTK.GdkEventKey type.
-
-       event keyval value = 65361 ifTrue: [ self movePieceLeft. ^ true ].
-       event keyval value = 65363 ifTrue: [ self movePieceRight. ^ true ].
-       event keyval value = 65362 ifTrue: [ self rotatePiece. ^ true ].
-       event keyval value = 65364 ifTrue: [ self dropPiece. ^ true ].
-
-       ^ false
-    ]
-
-    refresh [
-       <category: 'drawing'>
-
-       canvasWidget queueDraw
-    ]
-
-    cycle [
-       <category: 'game'>
-       
-       | result filledLines |
-       grid := TetrisField new.
-       [ movingBlocks := true.
-         result := grid currentPiece: TetrisPiece random.
-         result ifTrue: [ self 
-                           refresh;
-                           delay ].
-         result ] whileTrue: [ 
-               [ result := self slidePiece.
-                 self refresh.
-                 result ] whileTrue: [ self delay ].
-                 filledLines := self 
-                                   resetMovingBlocks;
-                                   cementPiece;
-                                   removeLines.
-                 self updateScore: filledLines.
-                 Processor yield ].
-
-       ^ self gameOver 
-    ]
-
-    initializeGame [
-       <category: 'game'>
-
-       self 
-           level: 1;
-           lines: 0;
-           score: 0.
-       movingBlocks := true
-    ]
-
-    play [
-       <category: 'game'>
-
-       process := [ self
-                       initializeGame;
-                       cycle ] fork.
-    ]
-
-    quit [
-       <category: 'game'>
-
-       process terminate.
-       window hideAll
-    ]
-
-    gameOver [
-       <category: 'game'>
-
-       self highScores addScore: (Score score: self score)
-    ]
-
-    resetMovingBlocks [
-       <category: 'game'>
-
-       movingBlocks := false
-    ]
-
-    delay [
-       "I like this method a lot!"
-
-       <category: 'private'>
-       delay wait.
-
-       "Especially this semaphore!!
-       pause wait.
-       pause signal"
-    ]
-
-    highScores [
-       <category: 'accessing'>
-
-       ^ self class highScores
-    ]
-
-    level [
-       <category: 'accessing'>
-
-       ^ level
-    ]
-
-    level: nextLevel [
-       <category: 'private'>
-
-       level := nextLevel min: 10.
-       delay := Delay forMilliseconds: 825 - (75 * level).
-    ]
-
-    lines [
-       <category: 'private'>
-
-       ^ lines
-    ]
-
-    lines: newLines [
-       <category: 'private'>
-
-       lines := newLines
-    ]
-
-    score [
-       <category: 'private'>
-
-       ^ score
-    ]
-
-    score: newScore [
-       <category: 'private'>
-
-       score := newScore
-    ]
-
-    updateScore: filledLines [
-       <category: 'private'>
-
-       self lines: self lines + filledLines.
-        (self lines - 1) // 10 > (self level - 1) ifTrue: [ self advanceLevel 
].
-        self score: 2 * self level squared + (#(0 50 150 400 900) at: 
filledLines + 1) + self score
-    ]
-
-    advanceLevel [
-       <category: 'events'>
-
-       self level: self level + 1
-    ]
-
-    movePieceLeft [
-       <category: 'events'>
-
-       grid movePieceLeft.
-       self refresh
-    ]
-
-    movePieceRight [
-       <category: 'events'>
-
-       grid movePieceRight.
-       self refresh
-    ]
-
-    pause [
-       <category: 'events'>
-
-       "I like this semaphore a lot!"
-       pause wait
-    ]
-
-    restart [
-       <category: 'events'>
-
-       "I like this semaphore a lot!"
-       pause signal
-    ]
-
-    rotatePiece [
-       <category: 'events'>
-
-       grid rotatePiece.
-       self refresh
-    ]
-
-    slidePiece [
-       <category: 'events'>
-
-       ^ grid slidePiece
-    ]
-
-    cementPiece [
-       <category: 'events'>
-
-       ^ grid cementPiece
-    ]
-
-    removeLines [
-       <category: 'game'>
-
-       ^ grid removeLines
-    ]
-
-    dropPiece [
-       <category: 'events'>
-
-       ^ grid dropPiece
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisField.st 
b/packages/visualgst/Tetris/TetrisField.st
deleted file mode 100644
index afd0465..0000000
--- a/packages/visualgst/Tetris/TetrisField.st
+++ /dev/null
@@ -1,180 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-
-Object subclass: TetrisField [
-    | rows currentPiece |
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisField class >> new [
-       <category: 'instance creation'>
-
-       ^ self basicNew initialize
-    ]
-
-    at: point [
-       <category: 'accessing'>
-
-       ^ (rows at: point y) at: point x
-    ]
-
-    at: point put: value [
-       <category: 'accessing'>
-
-       ^ (rows at: point y) at: point x put: value
-    ]
-
-    initialize [
-       <category: 'initializing'>
-       
-       rows := (1 to: 22) collect: [:each | ByteArray new: 10].
-       rows do: [:each | self initializeLine: each].
-       (rows at: 22) atAll: (1 to: 10) put: 1
-    ]
-
-    initializeLine: line [
-       <category: 'initializing'>
-
-       line
-           atAll: (1 to: 10) put: 0
-    ]
-
-    checkLine: y [
-       <category: 'removing filled lines'>
-
-       ^ (rows at: y) allSatisfy: [:each | each ~~ 0]
-    ]
-
-    removeLines [
-       <category: 'removing filled lines'>
-
-       | removed lastLine firstLine |
-       removed := 0.
-       firstLine := self currentPiece y.
-       lastLine := 21 min: firstLine + 3.
-       lastLine - firstLine + 1 timesRepeat: 
-               [(self checkLine: lastLine) 
-                   ifTrue: 
-                       [removed := removed + 1.
-                       self removeLine: lastLine]
-                   ifFalse: [lastLine := lastLine - 1]].
-       ^ removed
-    ]
-
-    removeLine: filledY [
-       <category: 'removing filled lines'>
-
-       | saved y shift line |
-       saved := rows at: filledY.
-       filledY to: 2
-           by: -1
-           do: [:each | rows at: each put: (rows at: each - 1)].
-       self initializeLine: saved.
-       rows at: 1 put: saved
-    ]
-
-    cementPiece [
-       <category: 'piece'>
-
-       self currentPiece cementOn: self
-    ]
-
-    dropPiece [
-       <category: 'moving pieces'>
-
-       [ self slidePiece ] whileTrue: []
-    ]
-
-    movePieceLeft [
-       <category: 'moving pieces'>
-
-       self currentPiece x: self currentPiece x - 1.
-       ^ self currentPiece moveInto: self
-           ifFail: [self currentPiece x: self currentPiece x + 1]
-    ]
-
-    movePieceRight [
-       <category: 'moving pieces'>
-
-       self currentPiece x: self currentPiece x + 1.
-       ^ self currentPiece moveInto: self
-           ifFail: [ self currentPiece x: self currentPiece x - 1 ]
-    ]
-
-    rotatePiece [
-       <category: 'moving pieces'>
-
-       self currentPiece rotate: 1.
-       ^ self currentPiece moveInto: self ifFail: [ self currentPiece rotate: 
3 ]
-    ]
-
-    slidePiece [
-       <category: 'moving pieces'>
-
-       self currentPiece y: self currentPiece y + 1.
-       ^ self currentPiece moveInto: self
-           ifFail: [self currentPiece y: self currentPiece y - 1]
-    ]
-
-    currentPiece [
-       <category: 'accessing piece variables'>
-
-       ^ currentPiece
-    ]
-
-    currentPiece: piece [
-       <category: 'accessing piece variables'>
-
-       currentPiece := piece.
-       (self currentPiece)
-           x: 4;
-           y: 1.
-
-       self currentPiece moveInto: self
-            ifFail: [ ^ false ].
-       ^ true
-    ]
-
-    drawOn: aCanvas [
-       <category: 'drawing'>
-
-       1 to: 21 do: [ :y |
-           1 to: 10 do: [ :x |
-               ((rows at: y) at: x) ~= 0 ifTrue: [
-                   BlockWidget new
-                       position: (50 + (x * 15))@(50 + (y * 15));
-                       size: 15;
-                       color: Cairo.Color white;
-                       drawOn: aCanvas ] ] ].
-       self currentPiece drawOn: aCanvas
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisFieldWidget.st 
b/packages/visualgst/Tetris/TetrisFieldWidget.st
deleted file mode 100644
index 25beaa8..0000000
--- a/packages/visualgst/Tetris/TetrisFieldWidget.st
+++ /dev/null
@@ -1,57 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-|
- ======================================================================"
-
-Object subclass: TetrisFieldWidget [
-
-    | position size color |
-
-    position: aPoint [
-       <category: 'accessing'>
-
-       position := aPoint
-    ]
-
-    size: anInteger [
-       <category: 'accessing'>
-
-       size := anInteger
-    ]
-    
-    color: aColor [
-       <category: 'accessing'>
-
-       color := aColor
-    ]
-
-    drawOn: aCanvas [
-       <category: 'drawing'>
-
-       self subclassResponsibility
-    ]
-]
diff --git a/packages/visualgst/Tetris/TetrisPiece.st 
b/packages/visualgst/Tetris/TetrisPiece.st
deleted file mode 100644
index e4cab58..0000000
--- a/packages/visualgst/Tetris/TetrisPiece.st
+++ /dev/null
@@ -1,175 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-Object subclass: TetrisPiece [
-    | rotation origin |
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    Pieces := nil.
-
-    TetrisPiece class >> pieces [
-       <category: 'accessing'>
-
-       ^ Pieces ifNil: [ Pieces := self subclasses asOrderedCollection ]
-    ]
-
-    TetrisPiece class >> random [
-       <category: 'pieces'>
-
-       | piece |
-       piece := Random between: 1 and: 7.
-       ^ (self pieces at: piece) new
-           initialize;
-           yourself
-    ]
-
-    initialize [
-       <category: 'initialization'>
-
-       rotation := 1.
-       origin := Point new
-    ]
-
-    piece [
-       <category: 'accessing'>
-
-       ^ self class piece
-    ]
-
-    color [
-       <category: 'drawing'>
-
-       ^ self class color
-    ]
-
-    cementOn: field [
-       <category: 'blocks'>
-
-        | point x y |
-        point := Point new.
-        y := 0.
-        (self piece at: rotation) do: [ :line |
-                    x := 0.
-                    line do: [ :elem |
-                        elem = 1 ifTrue: [
-                            point
-                                x: self origin x + x;
-                                y: self origin y + y.
-                            (field at: point) = 0 ifTrue: [ field at: point 
put: elem ] ].
-                       x := x + 1 ].
-                   y := y + 1].
-    ]
-
-    canMoveInto: field [
-       <category: 'moving'>
-
-       | point x y |
-       point := Point new.
-       y := 0.
-       (self piece at: rotation) do: [ :line |
-                   x := 0.
-                   line do: [ :elem | 
-                       elem = 1 ifTrue: [ 
-                           point
-                               x: self origin x + x;
-                               y: self origin y + y.
-                           (field at: point) > 0 ifTrue: [ ^ false ] ].
-                       x := x + 1 ].
-                   y := y + 1 ].
-       ^ true
-    ]
-
-    moveInto: field ifFail: aBlock [
-       <category: 'moving'>
-
-       (self canMoveInto: field) ifFalse: [ aBlock value.
-                                   ^ false ].
-       ^ true
-    ]
-
-    rotate: howMany [
-       "Three lines are necessary because rotation is in the 1..4 range,
-        while \\ likes a 0..3 range"
-
-       <category: 'moving'>
-       rotation := rotation - 1.
-       rotation := (rotation + howMany) \\ 4.
-       rotation := rotation + 1
-    ]
-
-    origin [
-       <category: 'accessing'>
-
-       ^ origin
-    ]
-
-    x [
-       <category: 'accessing'>
-
-       ^ self origin x
-    ]
-
-    x: x [
-       <category: 'accessing'>
-
-       self origin x: x
-    ]
-
-    y [
-       <category: 'accessing'>
-
-       ^ self origin y
-    ]
-
-    y: y [
-       <category: 'accessing'>
-
-       self origin y: y
-    ]
-
-    drawOn: aCanvas [
-       <category: 'drawing'>
-
-       | y |
-       y := 0.
-        (self piece at: rotation) do: [ :line |
-           y := y + 1.
-            1 to: 4 do: [ :x |
-                (line at: x) ~= 0 ifTrue: [
-                    BlockWidget new
-                        position: (50 + ((self x + x - 1) * 15))@(50 + ((self 
y + y - 1) * 15));
-                        size: 15;
-                       color: self color;
-                        drawOn: aCanvas ] ] ]
-    ]
-
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceI.st 
b/packages/visualgst/Tetris/TetrisPieceI.st
deleted file mode 100644
index 05fdd5a..0000000
--- a/packages/visualgst/Tetris/TetrisPieceI.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceI [
-
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceI class >> piece [
-       <category: 'pieces'>
-
-       ^#( #( #(1 0 0 0)
-              #(1 0 0 0)
-              #(1 0 0 0)
-              #(1 0 0 0))
-           #( #(0 0 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0)
-              #(1 1 1 1))
-           #( #(1 0 0 0)
-              #(1 0 0 0)
-              #(1 0 0 0)
-              #(1 0 0 0))
-           #( #(0 0 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0)
-              #(1 1 1 1)))
-    ]
-
-    TetrisPieceI class >> color [
-       <category: 'pieces'>
-
-       ^ Cairo.Color red
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceJ.st 
b/packages/visualgst/Tetris/TetrisPieceJ.st
deleted file mode 100644
index 6c4ce92..0000000
--- a/packages/visualgst/Tetris/TetrisPieceJ.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceJ [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceJ class >> piece [
-       <category: 'pieces'>
-
-       ^#( #( #(0 1 0 0)
-              #(0 1 0 0)
-              #(1 1 0 0)
-              #(0 0 0 0))
-           #( #(1 0 0 0)
-              #(1 1 1 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 0 0)
-              #(1 0 0 0)
-              #(1 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 1 0)
-              #(0 0 1 0)
-              #(0 0 0 0)
-              #(0 0 0 0)))
-    ]
-
-    TetrisPieceJ class >> color [
-       <category: 'pieces'>
-
-       ^ Cairo.Color magenta
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceL.st 
b/packages/visualgst/Tetris/TetrisPieceL.st
deleted file mode 100644
index e544c47..0000000
--- a/packages/visualgst/Tetris/TetrisPieceL.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceL [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceL class >> piece [
-       <category: 'pieces'>
-
-       ^#( #( #(1 0 0 0)
-              #(1 0 0 0)
-              #(1 1 0 0)
-              #(0 0 0 0)) 
-           #( #(1 1 1 0)
-              #(1 0 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 0 0)
-              #(0 1 0 0)
-              #(0 1 0 0)
-              #(0 0 0 0))
-           #( #(0 0 1 0)
-              #(1 1 1 0)
-              #(0 0 0 0)
-              #(0 0 0 0)))
-    ]
-
-    TetrisPieceL class >> color [
-       <category: 'pieces'>
-
-       ^ Cairo.Color r: 0.74 g: 0.71 b: 0.42 "DarkKhaki"
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceO.st 
b/packages/visualgst/Tetris/TetrisPieceO.st
deleted file mode 100644
index 46cf714..0000000
--- a/packages/visualgst/Tetris/TetrisPieceO.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceO [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceO class >> piece [
-       <category: 'pieces'>
-
-       ^#( #( #(1 1 0 0)
-              #(1 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 0 0)
-              #(1 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 0 0)
-              #(1 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 0 0)
-              #(1 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0)))
-    ]
-
-    TetrisPieceO class >> color [
-       <category: 'piece'>
-
-       ^ Cairo.Color r: 0.54 g: 0.17 b: 0.88 "BlueViolet"
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceS.st 
b/packages/visualgst/Tetris/TetrisPieceS.st
deleted file mode 100644
index 19b3ee1..0000000
--- a/packages/visualgst/Tetris/TetrisPieceS.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceS [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceS class >> piece [
-       <category: 'pieces'>
-
-       ^#( #( #(0 1 0 0)
-              #(1 1 0 0)
-              #(1 0 0 0)
-              #(0 0 0 0))
-           #( #(1 1 0 0)
-              #(0 1 1 0)
-              #(0 0 0 0)
-              #(0 0 0 0)) 
-           #( #(0 1 0 0)
-              #(1 1 0 0)
-              #(1 0 0 0)
-              #(0 0 0 0)) 
-           #( #(1 1 0 0)
-              #(0 1 1 0)
-              #(0 0 0 0)
-              #(0 0 0 0)))
-    ]
-
-    TetrisPieceS class >> color [
-       <category: 'pieces'>
-
-       ^ Cairo.Color cyan
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceT.st 
b/packages/visualgst/Tetris/TetrisPieceT.st
deleted file mode 100644
index b7c6af0..0000000
--- a/packages/visualgst/Tetris/TetrisPieceT.st
+++ /dev/null
@@ -1,60 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceT [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceT class >> piece [
-       <category: 'pieces'>
-       ^#( #( #(0 1 0 0)
-              #(1 1 1 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 0 0 0)
-              #(1 1 0 0)
-              #(1 0 0 0)
-              #(0 0 0 0)) 
-           #( #(1 1 1 0)
-              #(0 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(0 1 0 0)
-              #(1 1 0 0)
-              #(0 1 0 0)
-              #(0 0 0 0)))
-    ]
-
-    TetrisPieceT class >> color [
-       <category: 'pieces'>
-
-       ^ Cairo.Color r: 0.13 g: 0.54 b: 0.13 "ForestGreen"
-    ]
-]
diff --git a/packages/visualgst/Tetris/TetrisPieceWidget.st 
b/packages/visualgst/Tetris/TetrisPieceWidget.st
deleted file mode 100644
index 1795612..0000000
--- a/packages/visualgst/Tetris/TetrisPieceWidget.st
+++ /dev/null
@@ -1,57 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-|
- ======================================================================"
-
-Object subclass: TetrisPieceWidget [
-
-    | position size color |
-
-    position: aPoint [
-       <category: 'accessing'>
-
-       position := aPoint
-    ]
-
-    size: anInteger [
-       <category: 'accessing'>
-
-       size := anInteger
-    ]
-    
-    color: aColor [
-       <category: 'accessing'>
-
-       color := aColor
-    ]
-
-    drawOn: aCanvas [
-       <category: 'drawing'>
-
-       self subclassResponsibility
-    ]
-]
diff --git a/packages/visualgst/Tetris/TetrisPieceZ.st 
b/packages/visualgst/Tetris/TetrisPieceZ.st
deleted file mode 100644
index e49cf3c..0000000
--- a/packages/visualgst/Tetris/TetrisPieceZ.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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, or (at your option) any later version.
-| 
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceZ [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceZ class >> piece [
-       <category: 'pieces'>
-
-       ^#( #( #(1 0 0 0)
-              #(1 1 0 0)
-              #(0 1 0 0)
-              #(0 0 0 0))
-           #( #(0 1 1 0)
-              #(1 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0))
-           #( #(1 0 0 0)
-              #(1 1 0 0)
-              #(0 1 0 0)
-              #(0 0 0 0))
-           #( #(0 1 1 0)
-              #(1 1 0 0)
-              #(0 0 0 0)
-              #(0 0 0 0)))
-    ]
-
-    TetrisPieceZ class >> color [
-       <category: 'pieces'>
-
-       ^ Cairo.Color r: 0.99 g: 0.55 b: 0 "DarkOrange"
-    ]
-]
-
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index 3ab496d..d826135 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -217,7 +217,6 @@
   <filein>Undo/Text/InsertTextCommand.st</filein>
   <filein>Undo/Text/DeleteTextCommand.st</filein>
   <filein>Undo/Text/ReplaceTextCommand.st</filein>
-  <filein>Clock/GtkClock.st</filein>
   <filein>Inspector/GtkInspectorSourceWidget.st</filein>
   <filein>Inspector/GtkInspectorBrowserWidget.st</filein>
   <filein>Inspector/GtkInspectorWidget.st</filein>
@@ -239,20 +238,6 @@
   <filein>Notification/Kernel/MethodDictionary.st</filein>
   <filein>Debugger/GtkStackInspectorView.st</filein>
   <filein>Debugger/GtkStackInspector.st</filein>
-  <filein>Tetris/HighScores.st</filein>
-  <filein>Tetris/Score.st</filein>
-  <filein>Tetris/TetrisPieceWidget.st</filein>
-  <filein>Tetris/BlockWidget.st</filein>
-  <filein>Tetris/TetrisField.st</filein>
-  <filein>Tetris/TetrisPiece.st</filein>
-  <filein>Tetris/TetrisPieceI.st</filein>
-  <filein>Tetris/TetrisPieceJ.st</filein>
-  <filein>Tetris/TetrisPieceL.st</filein>
-  <filein>Tetris/TetrisPieceO.st</filein>
-  <filein>Tetris/TetrisPieceS.st</filein>
-  <filein>Tetris/TetrisPieceT.st</filein>
-  <filein>Tetris/TetrisPieceZ.st</filein>
-  <filein>Tetris/Tetris.st</filein>
   <filein>SUnit/TestBacktraceLog.st</filein>
   <filein>SUnit/GtkSUnitResultWidget.st</filein>
   <filein>GtkClassSUnitWidget.st</filein>
@@ -430,7 +415,6 @@
   <file>Undo/Text/InsertTextCommand.st</file>
   <file>Undo/Text/DeleteTextCommand.st</file>
   <file>Undo/Text/ReplaceTextCommand.st</file>
-  <file>Clock/GtkClock.st</file>
   <file>Inspector/GtkInspectorSourceWidget.st</file>
   <file>Inspector/GtkInspectorBrowserWidget.st</file>
   <file>Inspector/GtkInspectorWidget.st</file>
@@ -452,20 +436,6 @@
   <file>Notification/Kernel/MethodDictionary.st</file>
   <file>Debugger/GtkStackInspectorView.st</file>
   <file>Debugger/GtkStackInspector.st</file>
-  <file>Tetris/HighScores.st</file>
-  <file>Tetris/Score.st</file>
-  <file>Tetris/TetrisPieceWidget.st</file>
-  <file>Tetris/BlockWidget.st</file>
-  <file>Tetris/TetrisField.st</file>
-  <file>Tetris/TetrisPiece.st</file>
-  <file>Tetris/TetrisPieceI.st</file>
-  <file>Tetris/TetrisPieceJ.st</file>
-  <file>Tetris/TetrisPieceL.st</file>
-  <file>Tetris/TetrisPieceO.st</file>
-  <file>Tetris/TetrisPieceS.st</file>
-  <file>Tetris/TetrisPieceT.st</file>
-  <file>Tetris/TetrisPieceZ.st</file>
-  <file>Tetris/Tetris.st</file>
   <file>SUnit/TestBacktraceLog.st</file>
   <file>SUnit/GtkSUnitResultWidget.st</file>
   <file>GtkClassSUnitWidget.st</file>
-- 
1.7.10.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]