gcompris r3314 - in branches/gcomprixogoo: . src/anim-activity src/boards src/connect4-2players-activity src/draw-activity src/gcompris src/goocanvas src/goocanvas/autom4te.cache src/goocanvas/demo src/goocanvas/docs src/goocanvas/po src/goocanvas/src
- From: bcoudoin svn gnome org
- To: svn-commits-list gnome org
- Subject: gcompris r3314 - in branches/gcomprixogoo: . src/anim-activity src/boards src/connect4-2players-activity src/draw-activity src/gcompris src/goocanvas src/goocanvas/autom4te.cache src/goocanvas/demo src/goocanvas/docs src/goocanvas/po src/goocanvas/src
- Date: Sun, 16 Mar 2008 21:48:50 +0000 (GMT)
Author: bcoudoin
Date: Sun Mar 16 21:48:49 2008
New Revision: 3314
URL: http://svn.gnome.org/viewvc/gcompris?rev=3314&view=rev
Log:
- Major cleanup in goocanvas to keep only the minimal we need.
- Integrated pygoocanvas. No more needed to install it separatly.
- fixed the file selector background and its highlight button
Removed:
branches/gcomprixogoo/src/goocanvas/INSTALL
branches/gcomprixogoo/src/goocanvas/aclocal.m4
branches/gcomprixogoo/src/goocanvas/autogen.sh
branches/gcomprixogoo/src/goocanvas/autom4te.cache/
branches/gcomprixogoo/src/goocanvas/config.h.in
branches/gcomprixogoo/src/goocanvas/configure
branches/gcomprixogoo/src/goocanvas/configure.in.REF
branches/gcomprixogoo/src/goocanvas/demo/
branches/gcomprixogoo/src/goocanvas/docs/
branches/gcomprixogoo/src/goocanvas/goocanvas.pc.in
branches/gcomprixogoo/src/goocanvas/gtk-doc.make
branches/gcomprixogoo/src/goocanvas/mkinstalldirs
branches/gcomprixogoo/src/goocanvas/po/
Modified:
branches/gcomprixogoo/ChangeLog
branches/gcomprixogoo/configure.in
branches/gcomprixogoo/src/anim-activity/anim.py
branches/gcomprixogoo/src/boards/Makefile.am
branches/gcomprixogoo/src/boards/py-mod-gcompris.c
branches/gcomprixogoo/src/boards/python.c
branches/gcomprixogoo/src/connect4-2players-activity/init_path.sh
branches/gcomprixogoo/src/draw-activity/init_path.sh
branches/gcomprixogoo/src/gcompris/bar.c
branches/gcomprixogoo/src/gcompris/file_selector.c
branches/gcomprixogoo/src/gcompris/gameutil.c
branches/gcomprixogoo/src/gcompris/gcompris.c
branches/gcomprixogoo/src/gcompris/gcompris_db.c
branches/gcomprixogoo/src/goocanvas/ (props changed)
branches/gcomprixogoo/src/goocanvas/Makefile.am
branches/gcomprixogoo/src/goocanvas/src/ (props changed)
branches/gcomprixogoo/src/goocanvas/src/goocanvasitemsimple.c
Modified: branches/gcomprixogoo/configure.in
==============================================================================
--- branches/gcomprixogoo/configure.in (original)
+++ branches/gcomprixogoo/configure.in Sun Mar 16 21:48:49 2008
@@ -450,7 +450,7 @@
AC_MSG_NOTICE([Python plugin is disabled.])
else
dnl Python interpreter is available so check for pygtk
- PKG_CHECK_MODULES(PYGTK, pygtk-2.0)
+ PKG_CHECK_MODULES(PYGTK, pygtk-2.0 pycairo)
AC_MSG_CHECKING([for pygtk defs])
PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
@@ -827,10 +827,6 @@
src/mosaic-activity/resources/mosaic/Makefile
src/goocanvas/Makefile
src/goocanvas/src/Makefile
-src/goocanvas/demo/Makefile
-src/goocanvas/docs/Makefile
-src/goocanvas/po/Makefile.in
-src/goocanvas/goocanvas.pc
])
echo ""
Modified: branches/gcomprixogoo/src/anim-activity/anim.py
==============================================================================
--- branches/gcomprixogoo/src/anim-activity/anim.py (original)
+++ branches/gcomprixogoo/src/anim-activity/anim.py Sun Mar 16 21:48:49 2008
@@ -173,25 +173,25 @@
"y",
"width",
"height",
- #"stroke_color_rgba",
+ "stroke_color_rgba",
],
'FILL_RECT' : [ "x",
"y",
"width",
"height",
- #"fill_color_rgba",
+ "fill_color_rgba",
],
'CIRCLE' : [ "center_x",
"center_y",
"radius_x",
"radius_y",
- #"stroke_color_rgba",
+ "stroke_color_rgba",
],
'FILL_CIRCLE' : [ "center_x",
"center_y",
"radius_x",
"radius_y",
- #"fill_color_rgba",
+ "fill_color_rgba",
],
'TEXT' : [ "x",
"y",
@@ -536,6 +536,7 @@
x=theX,
y=y
)
+ gcompris.utils.item_focus_init(item, None)
item.connect("button_press_event", self.tool_item_event, i)
if i%2:
y += stepy
@@ -626,7 +627,7 @@
color_pixmap_height = pixmap.get_height()
- y = gcompris.BOARD_HEIGHT - color_pixmap_height - 8
+ y = gcompris.BOARD_HEIGHT - color_pixmap_height - 30
c = 0
Modified: branches/gcomprixogoo/src/boards/Makefile.am
==============================================================================
--- branches/gcomprixogoo/src/boards/Makefile.am (original)
+++ branches/gcomprixogoo/src/boards/Makefile.am Sun Mar 16 21:48:49 2008
@@ -53,8 +53,13 @@
libpython_la_LDFLAGS = -export-dynamic $(shared) $(no_undefined) -module -avoid-version $(gc_libs) $(PYTHON_LIBS)
libpython_la_LIBADD =
-libpython_la_CFLAGS = -fno-strict-aliasing $(PYGTK_CFLAGS)
+libpython_la_CFLAGS = -fno-strict-aliasing $(PYGTK_CFLAGS) \
+ -DPYGOOCANVAS_MAJOR_VERSION=0 \
+ -DPYGOOCANVAS_MINOR_VERSION=0 \
+ -DPYGOOCANVAS_MICRO_VERSION=0
+
libpython_la_SOURCES = python.c \
+ goocanvas.c goocanvasmodule.c \
py-gcompris-board.c py-gcompris-board.h \
py-gcompris-properties.c py-gcompris-properties.h \
py-gcompris-profile.c py-gcompris-profile.h \
Modified: branches/gcomprixogoo/src/boards/py-mod-gcompris.c
==============================================================================
--- branches/gcomprixogoo/src/boards/py-mod-gcompris.c (original)
+++ branches/gcomprixogoo/src/boards/py-mod-gcompris.c Sun Mar 16 21:48:49 2008
@@ -41,7 +41,7 @@
#include "py-mod-anim.h"
#include "py-mod-admin.h"
-//void initgnomecanvas (void);
+void initgoocanvas (void);
void pair_in_dict(gpointer key,
gpointer value,
@@ -1611,7 +1611,7 @@
/* Initialize the sub modules */
- //initgnomecanvas();
+ initgoocanvas();
python_gcompris_bonus_module_init();
python_gc_score_module_init();
python_gc_skin_module_init();
Modified: branches/gcomprixogoo/src/boards/python.c
==============================================================================
--- branches/gcomprixogoo/src/boards/python.c (original)
+++ branches/gcomprixogoo/src/boards/python.c Sun Mar 16 21:48:49 2008
@@ -144,7 +144,6 @@
char* board_file_name;
char* boardclass;
- gchar *boarddir;
PyObject* module_dict;
PyObject* py_boardclass;
@@ -220,20 +219,13 @@
board_file_name = strchr(board->type, ':')+1;
boardclass = g_strdup_printf("Gcompris_%s", board_file_name);
- /* Test if board come with -L option */
+ /* Test if board come with --python_plugin_dir option */
- g_warning("board_dir: '%s' package_data_dir '%s' file_name '%s'",
+ g_warning("board_dir: '%s' python_plugin_dir '%s' file_name '%s'",
board->board_dir,
properties->package_python_plugin_dir,
board_file_name);
- if (strcmp(board->board_dir, properties->package_python_plugin_dir)!=0){
- boarddir = g_strdup_printf("sys.path.append('%s/')", board->board_dir);
-
- PyRun_SimpleString(boarddir);
- g_free(boarddir);
- }
-
/* Insert the board module into the python's interpreter */
python_board_module = PyImport_ImportModuleEx(board_file_name,
globals,
@@ -537,7 +529,8 @@
*/
/*
- * Normally python in already runningwhen config_start is called. If not config_stop has to stop it.
+ * Normally python in already running when config_start is called.
+ * If not config_stop has to stop it.
*/
static gboolean python_run_by_config = FALSE;
Modified: branches/gcomprixogoo/src/connect4-2players-activity/init_path.sh
==============================================================================
--- branches/gcomprixogoo/src/connect4-2players-activity/init_path.sh (original)
+++ branches/gcomprixogoo/src/connect4-2players-activity/init_path.sh Sun Mar 16 21:48:49 2008
@@ -2,8 +2,7 @@
# This is sourced by runit.sh
path=$1
activity=connect4-2players
-pythonplugindir=$path
-resourcedir=$path/$resources
-resources
- ../connect4-activity/resources
+plugindir=$path/../boards/.libs
+pythonplugindir=$path/../connect4-activity
+resourcedir=$path/../connect4-activity/resources
section="/strategy"
Modified: branches/gcomprixogoo/src/draw-activity/init_path.sh
==============================================================================
--- branches/gcomprixogoo/src/draw-activity/init_path.sh (original)
+++ branches/gcomprixogoo/src/draw-activity/init_path.sh Sun Mar 16 21:48:49 2008
@@ -3,6 +3,6 @@
path=$1
activity=draw
plugindir=$path/../boards/.libs
-pythonplugindir=$path
-resourcedir=$path/resources
+pythonplugindir=$path/../anim-activity
+resourcedir=$path/../anim-activity/resources
section="/math/geometry"
Modified: branches/gcomprixogoo/src/gcompris/bar.c
==============================================================================
--- branches/gcomprixogoo/src/gcompris/bar.c (original)
+++ branches/gcomprixogoo/src/gcompris/bar.c Sun Mar 16 21:48:49 2008
@@ -32,6 +32,7 @@
#define BAR_GAP 15 /* Value used to fill space above and under icons in the bar */
#define NUMBER_OF_ITEMS 10 /* Number of buttons in the bar */
+#define HIDE_BAR_TIMOUT 3000 /* The time before we hide the bar in ms */
static void update_exit_button();
static gboolean on_enter_notify (GooCanvasItem *item,
@@ -580,7 +581,7 @@
bar_reset_sound_id();
if(!bar_down_id)
- bar_down_id = g_timeout_add (3500, (GtkFunction) _bar_down, NULL);
+ bar_down_id = g_timeout_add (HIDE_BAR_TIMOUT, (GtkFunction) _bar_down, NULL);
return FALSE;
}
@@ -685,6 +686,10 @@
else
confirm_quit(TRUE);
}
+ else if(!strcmp((char *)data, "bar"))
+ {
+ _force_bar_down();
+ }
return TRUE;
}
Modified: branches/gcomprixogoo/src/gcompris/file_selector.c
==============================================================================
--- branches/gcomprixogoo/src/gcompris/file_selector.c (original)
+++ branches/gcomprixogoo/src/gcompris/file_selector.c Sun Mar 16 21:48:49 2008
@@ -152,6 +152,7 @@
FileSelectorCallBack iscb)
{
GooCanvasItem *item;
+ GooCanvasItem *item2;
GdkPixbuf *pixmap = NULL;
gint y = 0;
gint y_start = 0;
@@ -263,7 +264,7 @@
"/cancel/");
gc_item_focus_init(item, NULL);
- item = goo_canvas_text_new (rootitem,
+ item2 = goo_canvas_text_new (rootitem,
_("CANCEL"),
(gdouble) BOARDWIDTH*0.33,
(gdouble) y - gdk_pixbuf_get_height(pixmap),
@@ -272,10 +273,10 @@
"font", gc_skin_font_title,
"fill-color-rgba", gc_skin_color_text_button,
NULL);
- g_signal_connect(item, "button_press_event",
+ g_signal_connect(item2, "button_press_event",
(GtkSignalFunc) item_event_file_selector,
"/cancel/");
- gc_item_focus_init(item, NULL);
+ gc_item_focus_init(item2, item);
// OK
item = goo_canvas_image_new (rootitem,
@@ -289,7 +290,7 @@
"/ok/");
gc_item_focus_init(item, NULL);
- item = goo_canvas_text_new (rootitem,
+ item2 = goo_canvas_text_new (rootitem,
(mode==MODE_LOAD ? _("LOAD") : _("SAVE")),
(gdouble) BOARDWIDTH*0.66,
(gdouble) y - gdk_pixbuf_get_height(pixmap),
@@ -298,10 +299,10 @@
"font", gc_skin_font_title,
"fill-color-rgba", gc_skin_color_text_button,
NULL);
- g_signal_connect(item, "button_press_event",
+ g_signal_connect(item2, "button_press_event",
(GtkSignalFunc) item_event_file_selector,
"/ok/");
- gc_item_focus_init(item, NULL);
+ gc_item_focus_init(item2, item);
gdk_pixbuf_unref(pixmap);
@@ -339,7 +340,6 @@
GList *file_list = NULL;
GList *listrunner;
-
GtkAdjustment *adj;
if(!rootitem)
@@ -381,7 +381,7 @@
bg_item = goo_canvas_rect_new (goo_canvas_get_root_item(GOO_CANVAS(canvas)),
0,
0,
- DRAWING_AREA_X2 - DRAWING_AREA_X1,
+ DRAWING_AREA_X2 - DRAWING_AREA_X1 + 200,
DRAWING_AREA_Y2 - DRAWING_AREA_Y1,
"fill-color-rgba", gc_skin_get_color("gcompris/fileselectbg"),
"line-width", 0.0,
@@ -390,7 +390,7 @@
adj = \
GTK_ADJUSTMENT (gtk_adjustment_new (0.00, 0.00,
- DRAWING_AREA_Y2 - DRAWING_AREA_Y1 + 30,
+ IMAGE_HEIGHT,
10, IMAGE_HEIGHT,
(DRAWING_AREA_Y2 - DRAWING_AREA_Y1)/3)
);
@@ -561,7 +561,7 @@
"height", (double)iy + IMAGE_HEIGHT + IMAGE_GAP,
NULL);
g_object_set(adj,
- "upper", iy + IMAGE_HEIGHT + IMAGE_GAP,
+ "upper", (double)iy - IMAGE_HEIGHT + IMAGE_GAP - 1,
NULL);
}
}
@@ -571,6 +571,8 @@
g_dir_close(dir);
g_list_free(file_list);
+ /* Warning: we don't scale the internal canvas dynamicaly */
+ goo_canvas_set_scale (GOO_CANVAS(canvas), gc_zoom_factor_get());
}
/* Callback when a directory is selected */
Modified: branches/gcomprixogoo/src/gcompris/gameutil.c
==============================================================================
--- branches/gcomprixogoo/src/gcompris/gameutil.c (original)
+++ branches/gcomprixogoo/src/gcompris/gameutil.c Sun Mar 16 21:48:49 2008
@@ -175,7 +175,7 @@
}
/**
- * Set the focus of the given image (highlight or not)
+ * Set the focus of the given item (highlight or not)
*
*/
static void
@@ -290,15 +290,18 @@
"visibility", GOO_CANVAS_ITEM_INVISIBLE,
NULL);
- if(!already_created)
- {
- g_signal_connect(source_item, "enter_notify_event",
- (GtkSignalFunc) gc_item_focus_event,
- target_item);
- g_signal_connect(source_item, "leave_notify_event",
- (GtkSignalFunc) gc_item_focus_event,
- target_item);
- }
+ /* Avoid double connection */
+ g_signal_handlers_disconnect_by_func(source_item,
+ (GtkSignalFunc) gc_item_focus_event,
+ target_item);
+
+ /* connect source to target */
+ g_signal_connect(source_item, "enter_notify_event",
+ (GtkSignalFunc) gc_item_focus_event,
+ target_item);
+ g_signal_connect(source_item, "leave_notify_event",
+ (GtkSignalFunc) gc_item_focus_event,
+ target_item);
}
/*
Modified: branches/gcomprixogoo/src/gcompris/gcompris.c
==============================================================================
--- branches/gcomprixogoo/src/gcompris/gcompris.c (original)
+++ branches/gcomprixogoo/src/gcompris/gcompris.c Sun Mar 16 21:48:49 2008
@@ -625,8 +625,6 @@
static void setup_window ()
{
GcomprisBoard *board_to_start;
- GdkPixbuf *icon_pixbuf;
- gchar *icon_file;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
@@ -634,31 +632,26 @@
* Set an icon for gcompris
* ------------------------
*/
- icon_file = g_strconcat(properties->system_icon_dir, "/gcompris.png", NULL);
- if (!g_file_test (icon_file, G_FILE_TEST_EXISTS)) {
- /* Now check if this file is on the net */
- icon_file = gc_net_get_url_from_file("gcompris.png", NULL);
- }
-
- if(!icon_file)
- g_message ("Couldn't find file %s !", icon_file);
- else
- {
- icon_pixbuf = gc_net_load_pixmap(icon_file);
+ {
+ GdkPixbuf *icon_pixbuf = NULL;
+ gchar *iconfile = gc_file_find_absolute("%s/%s",
+ properties->system_icon_dir, "gcompris.png",
+ NULL);
+ if(iconfile)
+ {
+ icon_pixbuf = gc_pixmap_load(iconfile);
+ g_free(iconfile);
- if (!icon_pixbuf)
- {
- g_message ("Failed to load pixbuf file: %s\n",
- icon_file);
- }
- g_free(icon_file);
+ if (icon_pixbuf)
+ {
+ gtk_window_set_icon (GTK_WINDOW (window), icon_pixbuf);
+ gdk_pixbuf_unref (icon_pixbuf);
+ }
+ }
+ else
+ g_message ("Failed to find icon file: 'gcompris.png'");
- if (icon_pixbuf)
- {
- gtk_window_set_icon (GTK_WINDOW (window), icon_pixbuf);
- gdk_pixbuf_unref (icon_pixbuf);
- }
- }
+ }
gtk_window_set_title(GTK_WINDOW (window), "GCompris");
Modified: branches/gcomprixogoo/src/gcompris/gcompris_db.c
==============================================================================
--- branches/gcomprixogoo/src/gcompris/gcompris_db.c (original)
+++ branches/gcomprixogoo/src/gcompris/gcompris_db.c Sun Mar 16 21:48:49 2008
@@ -774,8 +774,6 @@
void gc_db_remove_board(int board_id)
{
#ifdef USE_SQLITE
- g_warning("Supress board %d from db.", board_id);
-
char *zErrMsg;
char **result;
int rc;
Modified: branches/gcomprixogoo/src/goocanvas/Makefile.am
==============================================================================
--- branches/gcomprixogoo/src/goocanvas/Makefile.am (original)
+++ branches/gcomprixogoo/src/goocanvas/Makefile.am Sun Mar 16 21:48:49 2008
@@ -1,11 +1,8 @@
## Process this file with automake to produce Makefile.in
-SUBDIRS = src demo docs
+SUBDIRS = src
# require automake 1.7
AUTOMAKE_OPTIONS = 1.7
-#pkgconfigdir = $(libdir)/pkgconfig
-#pkgconfig_DATA = goocanvas.pc
-
-EXTRA_DIST = goocanvas.pc.in autogen.sh
+EXTRA_DIST = autogen.sh
Modified: branches/gcomprixogoo/src/goocanvas/src/goocanvasitemsimple.c
==============================================================================
--- branches/gcomprixogoo/src/goocanvas/src/goocanvasitemsimple.c (original)
+++ branches/gcomprixogoo/src/goocanvas/src/goocanvasitemsimple.c Sun Mar 16 21:48:49 2008
@@ -9,8 +9,8 @@
* SECTION:goocanvasitemsimple
* @Title: GooCanvasItemSimple
* @Short_Description: the base class for the standard canvas items.
- * @Stability_Level:
- * @See_Also:
+ * @Stability_Level:
+ * @See_Also:
*
* #GooCanvasItemSimple is used as a base class for all of the standard canvas
* items. It can also be used as the base class for new custom canvas items.
@@ -218,7 +218,7 @@
_("Stroke Color RGBA"),
_("The color to use for the item's perimeter, specified as a 32-bit integer value. To disable painting set the 'stroke-pattern' property to NULL"),
0, G_MAXUINT, 0,
- G_PARAM_WRITABLE));
+ G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_STROKE_PIXBUF,
g_param_spec_object ("stroke-pixbuf",
@@ -239,7 +239,7 @@
_("Fill Color RGBA"),
_("The color to use to paint the interior of the item, specified as a 32-bit integer value. To disable painting set the 'fill-pattern' property to NULL"),
0, G_MAXUINT, 0,
- G_PARAM_WRITABLE));
+ G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_FILL_PIXBUF,
g_param_spec_object ("fill-pixbuf",
@@ -854,7 +854,7 @@
* goo_canvas_item_simple_changed:
* @item: a #GooCanvasItemSimple.
* @recompute_bounds: if the item's bounds need to be recomputed.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple.
*
* It is used as a callback for the "changed" signal of the item models.
@@ -965,7 +965,7 @@
if (simple->need_update)
goo_canvas_item_ensure_updated (item);
-
+
*bounds = simple->bounds;
}
@@ -1078,7 +1078,7 @@
/**
* goo_canvas_item_simple_check_style:
* @item: a #GooCanvasItemSimple.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple,
* typically in their update() or get_requested_area() methods.
*
@@ -1418,7 +1418,7 @@
* goo_canvas_item_simple_set_model:
* @item: a #GooCanvasItemSimple.
* @model: the model that @item will view.
- *
+ *
* This function should be called by subclasses of #GooCanvasItemSimple
* in their set_model() method.
**/
@@ -1482,7 +1482,7 @@
* goo_canvas_item_simple_paint_path:
* @item: a #GooCanvasItemSimple.
* @cr: a cairo context.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple.
*
* It paints the current path, using the item's style settings.
@@ -1512,7 +1512,7 @@
* @item: a #GooCanvasItemSimple.
* @cr: a cairo context.
* @bounds: the #GooCanvasBounds struct to store the resulting bounding box.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple,
* typically in their update() or get_requested_area() methods.
*
@@ -1598,7 +1598,7 @@
* @item: a #GooCanvasItemSimple.
* @cr: a cairo context.
* @bounds: the bounds of the item, in the item's coordinate space.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple,
* typically in their update() or get_requested_area() methods.
*
@@ -1646,7 +1646,7 @@
* @item: a #GooCanvasItemSimple.
* @cr: a cairo context.
* @bounds: the bounds of the item, in the item's coordinate space.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple,
* typically in their get_requested_area() method.
*
@@ -1705,12 +1705,12 @@
* @y: the y coordinate of the point.
* @cr: a cairo context.
* @pointer_events: specifies which parts of the path to check.
- *
+ *
* This function is intended to be used by subclasses of #GooCanvasItemSimple.
*
* It checks if the given point is in the current path, using the item's
* style settings.
- *
+ *
* Returns: %TRUE if the given point is in the current path.
**/
gboolean
@@ -1752,9 +1752,9 @@
/**
* goo_canvas_item_simple_get_line_width:
* @item: a #GooCanvasItemSimple.
- *
+ *
* Gets the item's line width.
- *
+ *
* Returns: the item's line width.
**/
gdouble
@@ -1777,8 +1777,8 @@
* SECTION:goocanvasitemmodelsimple
* @Title: GooCanvasItemModelSimple
* @Short_Description: the base class for the standard canvas item models.
- * @Stability_Level:
- * @See_Also:
+ * @Stability_Level:
+ * @See_Also:
*
* #GooCanvasItemModelSimple is used as a base class for the standard canvas
* item models. It can also be used as the base class for new custom canvas
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]