Removed the old paths and the remaining legacy stuff it needed. Fixes bug

2003-05-21  Michael Natterer  <mitch@gimp.org>

	Removed the old paths and the remaining legacy stuff it needed.
	Fixes bug #104471.

	* Makefile.am
	* configure.in
	* pixmaps/*: removed the pixmaps/ directory.

	* app/ops_buttons.[ch]
	* app/path.[ch]
	* app/pathP.h
	* app/path_transform.h
	* app/gui/paths-dialog.[ch]
	* app/tools/gimpbezierselecttool.[ch]: removed these files.

	* app/Makefile.am
	* app/gui/Makefile.am
	* app/tools/Makefile.am: changed accordingly.

	* app/core/core-types.h: removed the Path* types.

	* app/core/gimpimage.[ch]
	* app/core/gimpimage-duplicate.c: removed gimage->paths.

	* app/gui/about-dialog.c: inline wilber2_xpm for now.

	* app/gui/dialogs-constructors.c
	* app/gui/dialogs-menu.c
	* app/gui/dialogs.c
	* app/gui/menus.c: removed the old paths dialog.

	* app/gui/gui.c: removed gui_rotate_the_shield_harmonics() hack
	which was broken anyway.

	* app/tools/gimptransformtool.c: #if 0 path_transform preview stuff.

	* app/tools/gimpiscissorstool.c: removed useless include.

	* app/tools/tools.c: removed the bezier select tool.

	* app/vectors/gimpvectors.c (gimp_vectors_real_stroke_add): use
	g_list_append(), not g_list_prepend() so some ugly side conditions
	of legacy path loading are honored.

	* app/xcf/xcf-load.c
	* app/xcf/xcf-save.c: load and save only GimpVectors.
This commit is contained in:
Michael Natterer 2003-05-21 17:38:14 +00:00 committed by Michael Natterer
parent bf4d38d70e
commit 487f71ba05
51 changed files with 505 additions and 8430 deletions

View File

@ -1,3 +1,51 @@
2003-05-21 Michael Natterer <mitch@gimp.org>
Removed the old paths and the remaining legacy stuff it needed.
Fixes bug #104471.
* Makefile.am
* configure.in
* pixmaps/*: removed the pixmaps/ directory.
* app/ops_buttons.[ch]
* app/path.[ch]
* app/pathP.h
* app/path_transform.h
* app/gui/paths-dialog.[ch]
* app/tools/gimpbezierselecttool.[ch]: removed these files.
* app/Makefile.am
* app/gui/Makefile.am
* app/tools/Makefile.am: changed accordingly.
* app/core/core-types.h: removed the Path* types.
* app/core/gimpimage.[ch]
* app/core/gimpimage-duplicate.c: removed gimage->paths.
* app/gui/about-dialog.c: inline wilber2_xpm for now.
* app/gui/dialogs-constructors.c
* app/gui/dialogs-menu.c
* app/gui/dialogs.c
* app/gui/menus.c: removed the old paths dialog.
* app/gui/gui.c: removed gui_rotate_the_shield_harmonics() hack
which was broken anyway.
* app/tools/gimptransformtool.c: #if 0 path_transform preview stuff.
* app/tools/gimpiscissorstool.c: removed useless include.
* app/tools/tools.c: removed the bezier select tool.
* app/vectors/gimpvectors.c (gimp_vectors_real_stroke_add): use
g_list_append(), not g_list_prepend() so some ugly side conditions
of legacy path loading are honored.
* app/xcf/xcf-load.c
* app/xcf/xcf-save.c: load and save only GimpVectors.
2003-05-21 Michael Natterer <mitch@gimp.org> 2003-05-21 Michael Natterer <mitch@gimp.org>
* app/core/gimpdrawable.[ch]: added GimpDrawable::alpha_changed() * app/core/gimpdrawable.[ch]: added GimpDrawable::alpha_changed()

View File

@ -4,7 +4,6 @@ SUBDIRS = \
m4macros \ m4macros \
tools \ tools \
regexrepl \ regexrepl \
pixmaps \
cursors \ cursors \
themes \ themes \
po \ po \

View File

@ -35,21 +35,7 @@ scriptdata =
bin_PROGRAMS = gimp-1.3 bin_PROGRAMS = gimp-1.3
## gimp_1_3_SOURCES = \
## stuff which is about to be replaced by new subsystems
##
bye_sources = \
ops_buttons.c \
ops_buttons.h \
path.c \
path.h \
pathP.h \
path_transform.h
##
## stuff
##
stuff_sources = \
appenv.h \ appenv.h \
app_procs.c \ app_procs.c \
app_procs.h \ app_procs.h \
@ -62,10 +48,6 @@ stuff_sources = \
libgimp_glue.c \ libgimp_glue.c \
libgimp_glue.h libgimp_glue.h
gimp_1_3_SOURCES = \
$(bye_sources) \
$(stuff_sources)
EXTRA_DIST = \ EXTRA_DIST = \
makefile.msc \ makefile.msc \
gimp.rc \ gimp.rc \
@ -95,6 +77,7 @@ INCLUDES = \
gimp_1_3_LDADD = \ gimp_1_3_LDADD = \
$(gimp_exp) \ $(gimp_exp) \
$(top_builddir)/libgimpwidgets/libgimpwidgets-$(LT_RELEASE).la \
config/libappconfig.a \ config/libappconfig.a \
gui/libappgui.a \ gui/libappgui.a \
display/libappdisplay.a \ display/libappdisplay.a \
@ -114,7 +97,6 @@ gimp_1_3_LDADD = \
$(top_builddir)/libgimpmath/libgimpmath-$(LT_RELEASE).la \ $(top_builddir)/libgimpmath/libgimpmath-$(LT_RELEASE).la \
$(top_builddir)/libgimpbase/libgimpbase-$(LT_RELEASE).la \ $(top_builddir)/libgimpbase/libgimpbase-$(LT_RELEASE).la \
$(top_builddir)/libgimpmodule/libgimpmodule-$(LT_RELEASE).la \ $(top_builddir)/libgimpmodule/libgimpmodule-$(LT_RELEASE).la \
$(top_builddir)/libgimpwidgets/libgimpwidgets-$(LT_RELEASE).la \
$(GTK_LIBS) \ $(GTK_LIBS) \
$(PANGOFT2_LIBS) \ $(PANGOFT2_LIBS) \
$(LIBART_LIBS) \ $(LIBART_LIBS) \

View File

@ -131,13 +131,6 @@ typedef struct _GimpPaletteEntry GimpPaletteEntry;
typedef struct _GimpPlugInDebug GimpPlugInDebug; typedef struct _GimpPlugInDebug GimpPlugInDebug;
/* EEK stuff */
typedef struct _Path Path;
typedef struct _PathPoint PathPoint;
typedef struct _PathList PathList;
/* functions */ /* functions */
typedef void (* GimpInitStatusFunc) (const gchar *text1, typedef void (* GimpInitStatusFunc) (const gchar *text1,

View File

@ -42,8 +42,6 @@
#include "gimplist.h" #include "gimplist.h"
#include "gimpparasitelist.h" #include "gimpparasitelist.h"
#include "path.h"
#include "gimp-intl.h" #include "gimp-intl.h"
@ -61,7 +59,6 @@ gimp_image_duplicate (GimpImage *gimage)
GimpDrawable *new_floating_sel_drawable = NULL; GimpDrawable *new_floating_sel_drawable = NULL;
GimpDrawable *floating_sel_drawable = NULL; GimpDrawable *floating_sel_drawable = NULL;
GimpParasiteList *parasites; GimpParasiteList *parasites;
PathList *paths;
gint count; gint count;
g_return_val_if_fail (gimage != NULL, NULL); g_return_val_if_fail (gimage != NULL, NULL);
@ -222,26 +219,6 @@ gimp_image_duplicate (GimpImage *gimage)
new_gimage->parasites = gimp_parasite_list_copy (parasites); new_gimage->parasites = gimp_parasite_list_copy (parasites);
} }
/* Copy paths */
paths = gimp_image_get_paths (gimage);
if (paths)
{
GSList *plist = NULL;
GSList *new_plist = NULL;
Path *path;
PathList *new_paths;
for (plist = paths->bz_paths; plist; plist = plist->next)
{
path = plist->data;
new_plist = g_slist_append (new_plist, path_copy (new_gimage, path));
}
new_paths = path_list_new (new_gimage,
paths->last_selected_row, new_plist);
gimp_image_set_paths (new_gimage, new_paths);
}
gimp_image_undo_enable (new_gimage); gimp_image_undo_enable (new_gimage);
return new_gimage; return new_gimage;

View File

@ -60,8 +60,6 @@
#include "vectors/gimpvectors.h" #include "vectors/gimpvectors.h"
#include "path.h"
#include "gimp-intl.h" #include "gimp-intl.h"
@ -474,8 +472,6 @@ gimp_image_init (GimpImage *gimage)
gimage->parasites = gimp_parasite_list_new (); gimage->parasites = gimp_parasite_list_new ();
gimage->paths = NULL;
gimage->qmask_state = FALSE; gimage->qmask_state = FALSE;
gimage->qmask_inverted = FALSE; gimage->qmask_inverted = FALSE;
gimage->qmask_color.r = 1.0; gimage->qmask_color.r = 1.0;
@ -641,8 +637,6 @@ gimp_image_get_memsize (GimpObject *object)
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->parasites)); memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->parasites));
/* FIXME paths */
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->undo_stack)); memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->undo_stack));
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->redo_stack)); memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->redo_stack));
@ -2066,7 +2060,7 @@ gimp_image_set_tattoo_state (GimpImage *gimage,
} }
/* layers / channels / paths */ /* layers / channels / vectors */
GimpContainer * GimpContainer *
gimp_image_get_layers (const GimpImage *gimage) gimp_image_get_layers (const GimpImage *gimage)
@ -2092,23 +2086,6 @@ gimp_image_get_vectors (const GimpImage *gimage)
return gimage->vectors; return gimage->vectors;
} }
void
gimp_image_set_paths (GimpImage *gimage,
PathList *paths)
{
g_return_if_fail (GIMP_IS_IMAGE (gimage));
gimage->paths = paths;
}
PathList *
gimp_image_get_paths (const GimpImage *gimage)
{
g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
return gimage->paths;
}
GimpDrawable * GimpDrawable *
gimp_image_active_drawable (const GimpImage *gimage) gimp_image_active_drawable (const GimpImage *gimage)
{ {

View File

@ -140,8 +140,6 @@ struct _GimpImage
GimpParasiteList *parasites; /* Plug-in parasite data */ GimpParasiteList *parasites; /* Plug-in parasite data */
PathList *paths; /* Paths data for this image */
gboolean visible[MAX_CHANNELS]; /* visible channels */ gboolean visible[MAX_CHANNELS]; /* visible channels */
gboolean active[MAX_CHANNELS]; /* active channels */ gboolean active[MAX_CHANNELS]; /* active channels */
@ -385,10 +383,6 @@ GimpContainer * gimp_image_get_layers (const GimpImage *gimage);
GimpContainer * gimp_image_get_channels (const GimpImage *gimage); GimpContainer * gimp_image_get_channels (const GimpImage *gimage);
GimpContainer * gimp_image_get_vectors (const GimpImage *gimage); GimpContainer * gimp_image_get_vectors (const GimpImage *gimage);
void gimp_image_set_paths (GimpImage *gimage,
PathList *paths);
PathList * gimp_image_get_paths (const GimpImage *gimage);
GimpDrawable * gimp_image_active_drawable (const GimpImage *gimage); GimpDrawable * gimp_image_active_drawable (const GimpImage *gimage);
GimpLayer * gimp_image_get_active_layer (const GimpImage *gimage); GimpLayer * gimp_image_get_active_layer (const GimpImage *gimage);
GimpChannel * gimp_image_get_active_channel (const GimpImage *gimage); GimpChannel * gimp_image_get_active_channel (const GimpImage *gimage);

View File

@ -41,13 +41,119 @@
#include "gimp-intl.h" #include "gimp-intl.h"
#include "pixmaps/wilber2.xpm"
#define ANIMATION_STEPS 16 #define ANIMATION_STEPS 16
#define ANIMATION_SIZE 2 #define ANIMATION_SIZE 2
static char * wilber2_xpm[] = {
"95 95 9 1",
" c None",
". c #FFFFFF",
"+ c #B6B6B6",
"@ c #494949",
"# c #DBDBDB",
"$ c #6D6D6D",
"% c #929292",
"& c #242424",
"* c #000000",
" .+. ",
" .+. .+@# ..+. ",
" #@+. .$@# .%&. ",
" #&+. .&@#. .+&$. ..#. ",
" .++. +*$.. .$*%. .%*%. ..%%. ",
" .$@. #@*%. .#*&. .#&@. .%*%. ",
" .$&+. .#&&+ .%*&# .#&*# #&@.. ",
" .+*&+. .#*&+ .#&*$. .#@*&# #&$. ",
" .+#. ..%&&+. .%*&# .%**+. .$**%. .+&@. ..++. ",
" .%@#. ..@*$. #@*&#. .$**+. #**@.. ..+@*@. .#$&%. ",
" .+&$.. .@*%. .@**%. .#&*@.. #&*@. .%**&+. .%*%.. ",
" #&*@+. #&*@.. .+&*&+. .%**%. .$*&#. #&*&+. .$*#. ",
" .#+.+$*&+. #&*&%.. .+&*&+..#&*&#..+**%. #&*@. ..+&*# ",
" ... .@&...@*%. .%***$#. .%**&# .@**%. #&*@. .@*@. .+@&*&. .... ",
" +%..#&$+..@*@.. ..+@**&+..#&**+ .@**$..#**&# .$*&# #&**@+. .#+@%. ",
" +&%.+*@+#.@**%#.. .#@**@. #&**+.#&**+..%**&. .$*&+ +**$#. .$*@#. ",
" #@&$@**%+#%***@%#...+**&#.+&*@##@**$..%&**$..#&**+ .+**+. .#&&#. ",
" .+@&***@##.%&***&%. #&*&#.@*&+#@**$.#@**&%..#$**&+ .%*&# ..#+$*%. ",
" ..+&**&#...#+&**&#.#&*$.%**@.#&**+.%**&+.#$&***$. .$*&# .#$&**&+. ",
" .@***%.....+&**+.%**+.%**@.#&**+.$**@..@***&%#..+&*&# .%***@%. ",
" ... .$***@......$**+.@**+.+***+.@**$.%**@.+&**$#..#%&**&#..$**%#.. ..... ",
" #$#. .$***&%.....#@*#.@**@#.$**&+#&**+#&*&#+**&#.%&*****%.#$@*@.. ..%@&+ ",
" #@@++#.. .$****&$+....#$#.%***@+#$**&+%**@.$**+#&*@.#&***&@%#%$+$*%. .%*&%. ",
" .+&*&&$. .@******&%.....++#%&**&+#@**$#***#%**$#&*&#+**&%##+@%##&*+. .#+++@&+.. ",
" .+%$**+..$********$.....#+++@**&+%**&#&**#%**@#@*&#%**$#$&*%..%*&# .+&****$. ",
" ...@*&%#%*****@$@*@#....#&$+&**$+**&+***#@**$#&*&+%**&***@..#&*$. .@***&@#. ",
" .+***&&*****&##+@@+....%&&&**@+**&@**@%***+$**&+$*****@#..#@%#..+&*@+#.. ",
" .@**********%..#@&+...#&$%&*&@**&**&@***@%&***&*****&+.........$*&#. ",
" ... ..+++%&*****@...#&@...#&@##@*********************@%&%....++###$**$. ..##.. ",
" +$+..#.. ..+*****&#...+&+..+@&$.#&@%+%$$@&&**&***&&@$+#%&#...$&*&&&**&+. .....#@&&%. ",
" #@&@@&$#. #@*****@#...%$...#@&.+$#......##++%%%%+#.+$@&%...+&*******@. .#%$++@*$%#. ",
" .#&*&**$#..#++#.#******&+..#%....+%....................#&@%+....@**&$$@&$#..#@*****$... ",
" ..#.%**&@&***&+.$*******&%%++%$@&$.............##++#..#+......+**&#........$***&&@#. ",
" ..@********@##&*************&%..........+##....+$%#.......+@**%.#++#...%&*@+##.. ",
" .#@@@%%$&**+.+&************%..........%&&@$.....$$#.....+&**&##@**&$%@**&#. ",
" .......+&*&##@***********@...........%$%+@+.....$%.#%$$@***%#@*********%. ",
" .%***&&***********+...............+@#....#$+#+##+@&%#$***@@&***$.. ... ..... ",
" .##..#+#. ..###.#&**************&#........#$#.....%#.....#@.....#$%$&*&%#.#%$+....+%#..+@@%# ",
" #@@$$&*@#..+@&&@+.%&*&&@&*********@+#......+*@$$+..........@#.....#&***%..##... ..$&*&$$&&&@+ ",
" .#@**@**&@&*****&#.####.#%*******@&*&$+....+%+++$$#.....##.%+......&**@#+@&@%...#$******&+... ",
" ..+#.%&****&&***$#.#+$&@&******&+##%@&@#........$+.....%&@%%......@&$#+&****@%$@**@%%$$#. ",
" ..%&&$+##+@**&@&***********&#....%&#..#......#.....@**&%...#+.@+#+&**********$#..... ",
" ..##.. .#&***************&#....+&#.#$........+.#%****%...$*%&@&***@%+$****@#. ",
" .....+&**&@%%$*******&#....+@#.#&&@$@$..#*&&*****#.+#$*******$#...+@@%#. ",
" .#%@$#.+%%##++%&******&#...#@+...+%+$$$%.#&******&.#&&&**&**&$##%%#.......#.. ",
" .###...+&***&#...+@&*********&+...$%.....#.......%&*****%.#@****%%%+#%&**&+. .#%&@+..#+#..",
".##.+@*&%%$******&++$&************%..+&#.....+#.......%@&**&+..#+@**@%%%@*****&+##+@***&$%&*&%#",
"#$&&*&&*****&$$@*******&&&********@..%$.......%%#......#$@++@$%$@&&*************&&***&&***&$$$#",
".#%@@##$**&$#...%****&$##+&*******&#.%$........%@%%%%%$$%#..#+++%$$@@&***&*********&+##%@$#....",
" .......+$+.. ..%&&@+#+@&*********$.+@.........#+++++#.............+&**$+$****&**@#. ..... ",
" ... ..#+#.##..$*************$#&$..........%$@$$%...........#&**@+$&****$+#.. ",
" .#$&*&%#.#$***************$@*$.......+@&@@@$+..........#@***********@# .... ",
" .#$*****@@&**&@%%***********&&*%.....$@%#...............%************&#..#%%#. ",
" ..+#.#$***&&*****&%#+@**************&#....#.................#&*************$%$&**&#... ",
" ..#@*&&&**@+##%&**&+#@*****************@+....................#@&********************&%%@. ",
" .#+%@*&****$#. ..+$%##$*******************&&$%+###............#$&@***********&&**&$+%&***&. ",
" #$&*&%#%@&$#...##....+&**@%@***************@@@&&&@@$+#......#%@**@&*********&@@$%#...+@@%%. ",
" ..#++....#....%&&@%+%&**%#+&***********&%@*@##&&@&***&@%%%%$&****&$********@$@#... ..... ",
" .%*********@#$************&@+&&@$.&*+%****************&%@&**&@$@$#. ",
" .#&**&&****&#+&***&*******&+$&*$#$%&*$$*$&***&**********&@@@@$@&*@+###++#. ",
" ....#@**$##+$&$+.@**&+%&********&&*%.#@&&@@*@$*&&***************$+#@***&&&**$.. ",
" .#%%$&**%.. .....+**&#+&***********@+..#&%+*&$&&+%****************$.+*********%.... ",
" .#@*****@#..#+%+#+&**%#&***&*********&$+.+#.@$#+++&***@***$%@@&&&**&#.%@@@%+%&*&%%%$. ",
" ..#%*&@&&@#..#@**&&&**&#%***%%&**********&@+#.####+&****%***@+####+@*&+...#....#@*****. ",
" #$&*@#.###. .$********%.@**$#@**************&@@@&****&**%$****@$%#.#**$.. .#%%+%.. ",
" #%$%#. #&**@%%$@+.#&*&#$***$%&*****************&$**@#$******@#.&**$#..... .... ",
" ..... .+**$#......%**@#&**$+&**&@&**********&**@%***%#+$@&***%.@***&@@@%#. ",
" ...#@*@#...+%%$&**$#&*&#$**&%@**&$**&$&*&%**&#@***$+..+@**$.+&*******%. ",
" .#%$&**%..#$******&+#&*@.@**$+&**%@**$%**@+***++@****@#.#&*$..#%$$$@**@.. ",
" #@****@#..%****&&&+.#**@#&**+%**@+&**+%**&#@**@+#%&***@#.&*@........%&*%##. ",
" .+*&@@$+. .@**@+###..%**@.@**#%**@#&**++**&++&**&%##$***+.&**%.. ..$**&@+. ",
" ..+@&#.... .&*&#...#+$&**$.$**++**@#@**%.&**@#+&***$.#@*&+.@***$+#.. .#%$@&@# ",
" .$*&$. .#**%..#$*****&#.$**%#@*&+%**&#+&**@##@***#.$*&#.+&*****@+. ....+@% ",
" #++#.. ..$*&+..%***&@%+.#@**$.$**$.@**$.+&**$.#&**%.@*&#..+$@&***@. .## ",
" ..+$**&# .$**@#...+@***+.%**@.+***#.%**&#.@**##@**+. ...#+&*&# ",
" .$****$. .@**+..#@****$..$**@.#&**+.#**&##@*@..@**&+.. .#**+.. ",
" #&*@$+.. .$*@. .@***$#.#%&**%.#&**+.+**$.+**%..+&**&$+.. .@*&%+. ",
" .+*$#.. .@*@. .&**%..#@**&%##@**$.#@*&#.$**$. .+@&**&$. .+@&*&#. ",
" .#@*+. .#&*@. .&*&#..%**&+..$**$#.%**$..%**&#. ..+$**&# ..#%*%. ",
" #&&%. .#@**$. .@*&. .@**$. +**&#..@**%..#&**@#.. ..$**+ ..$@. ",
" #+#.. .+&**&+. .%*&. .$**+. +**@# .$**@#..+@**&%.. .#&*+. ..#. ",
" .$*@%#. .%*&# .+**%. #&*&#..+&*&+. .#%&**%. #&*$#. ",
" .@&#.. ..$**+ .&*$. .$**+. .+&*&+. ..%**$. .%&*@+. ",
" .#@&. ..%**&# .$*&#...@*&#. .+&*&#. .#&*%. ..#%*$. ",
" .$&$. .%**@+. .%**%. .+**$. .$**%. #&*+. ..@@. ",
" #@%#. .$*@#. ..@**+. #**&. .%**+. #&*%.. .+$# ",
" ##.. .%*+. .%**$. .+**$. .%*&# .%&&%. ... ",
" .+*%. #@*$.. .@*@#. .@*$. ..#&&# ",
" #@&+. .$*+. .@*%. .%&@#. .%&# ",
" +&%. .+*%. .$*%. ..%*$. .+@# ",
" ##.. .+*$. .#&&# .#@@. .#. ",
" .$&#. .$&# .@$. ",
" .$%. .@@. .%+. ",
" .#.. .%+. .... ",
" ... "};
static gboolean about_dialog_load_logo (GtkWidget *window); static gboolean about_dialog_load_logo (GtkWidget *window);
static void about_dialog_destroy (GtkObject *object, static void about_dialog_destroy (GtkObject *object,
gpointer data); gpointer data);
@ -68,7 +174,7 @@ static void about_dialog_tool_drop (GtkWidget *widget,
static gboolean about_dialog_timer (gpointer data); static gboolean about_dialog_timer (gpointer data);
extern gboolean double_speed; static gboolean double_speed = FALSE;
static GtkWidget *about_dialog = NULL; static GtkWidget *about_dialog = NULL;
static GtkWidget *logo_area = NULL; static GtkWidget *logo_area = NULL;

View File

@ -83,7 +83,6 @@
#include "file-new-dialog.h" #include "file-new-dialog.h"
#include "layers-commands.h" #include "layers-commands.h"
#include "module-browser.h" #include "module-browser.h"
#include "paths-dialog.h"
#include "preferences-dialog.h" #include "preferences-dialog.h"
#include "templates-commands.h" #include "templates-commands.h"
#include "tips-dialog.h" #include "tips-dialog.h"
@ -123,8 +122,6 @@ static void dialogs_set_color_editor_context_func (GimpDockable *dockable,
GimpContext *context); GimpContext *context);
static void dialogs_set_image_item_context_func (GimpDockable *dockable, static void dialogs_set_image_item_context_func (GimpDockable *dockable,
GimpContext *context); GimpContext *context);
static void dialogs_set_path_context_func (GimpDockable *dockable,
GimpContext *context);
static void dialogs_set_image_editor_context_func (GimpDockable *dockable, static void dialogs_set_image_editor_context_func (GimpDockable *dockable,
GimpContext *context); GimpContext *context);
static void dialogs_set_navigation_context_func (GimpDockable *dockable, static void dialogs_set_navigation_context_func (GimpDockable *dockable,
@ -141,9 +138,6 @@ static GtkWidget * dialogs_dockable_new (GtkWidget *widget,
static void dialogs_image_item_view_image_changed (GimpContext *context, static void dialogs_image_item_view_image_changed (GimpContext *context,
GimpImage *gimage, GimpImage *gimage,
GimpContainerView *view); GimpContainerView *view);
static void dialogs_path_view_image_changed (GimpContext *context,
GimpImage *gimage,
GtkWidget *view);
static void dialogs_image_editor_image_changed (GimpContext *context, static void dialogs_image_editor_image_changed (GimpContext *context,
GimpImage *gimage, GimpImage *gimage,
GimpImageEditor *editor); GimpImageEditor *editor);
@ -740,32 +734,6 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
return dockable; return dockable;
} }
GtkWidget *
dialogs_path_list_view_new (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size)
{
static GtkWidget *view = NULL;
GtkWidget *dockable;
if (view)
return NULL;
view = paths_dialog_create ();
g_object_add_weak_pointer (G_OBJECT (view), (gpointer *) &view);
dockable = dialogs_dockable_new (view,
"Old Path List", "Old Paths", NULL,
NULL, NULL,
dialogs_set_path_context_func);
gimp_dockable_set_context (GIMP_DOCKABLE (dockable), context);
return dockable;
}
GtkWidget * GtkWidget *
dialogs_indexed_palette_new (GimpDialogFactory *factory, dialogs_indexed_palette_new (GimpDialogFactory *factory,
GimpContext *context, GimpContext *context,
@ -1312,41 +1280,6 @@ dialogs_set_image_item_context_func (GimpDockable *dockable,
} }
} }
static void
dialogs_set_path_context_func (GimpDockable *dockable,
GimpContext *context)
{
GtkWidget *view;
view = (GtkWidget *) g_object_get_data (G_OBJECT (dockable),
"gimp-dialogs-view");
if (! view)
return;
if (dockable->context)
{
g_signal_handlers_disconnect_by_func (dockable->context,
dialogs_path_view_image_changed,
view);
}
if (context)
{
g_signal_connect (context, "image_changed",
G_CALLBACK (dialogs_path_view_image_changed),
view);
dialogs_path_view_image_changed (context,
gimp_context_get_image (context),
view);
}
else
{
dialogs_path_view_image_changed (NULL, NULL, view);
}
}
static void static void
dialogs_set_image_editor_context_func (GimpDockable *dockable, dialogs_set_image_editor_context_func (GimpDockable *dockable,
GimpContext *context) GimpContext *context)
@ -1450,14 +1383,6 @@ dialogs_image_item_view_image_changed (GimpContext *context,
gimp_item_tree_view_set_image (GIMP_ITEM_TREE_VIEW (view), gimage); gimp_item_tree_view_set_image (GIMP_ITEM_TREE_VIEW (view), gimage);
} }
static void
dialogs_path_view_image_changed (GimpContext *context,
GimpImage *gimage,
GtkWidget *widget)
{
paths_dialog_update (gimage);
}
static void static void
dialogs_image_editor_image_changed (GimpContext *context, dialogs_image_editor_image_changed (GimpContext *context,
GimpImage *gimage, GimpImage *gimage,

View File

@ -165,8 +165,6 @@ static const GimpDialogFactoryEntry dock_entries[] =
0, FALSE, FALSE, FALSE, TRUE }, 0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-vectors-list", dialogs_vectors_list_view_new, { "gimp-vectors-list", dialogs_vectors_list_view_new,
0, FALSE, FALSE, FALSE, TRUE }, 0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-path-list", dialogs_path_list_view_new,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-indexed-palette", dialogs_indexed_palette_new, { "gimp-indexed-palette", dialogs_indexed_palette_new,
0, FALSE, FALSE, FALSE, TRUE }, 0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-selection-editor", dialogs_selection_editor_new, { "gimp-selection-editor", dialogs_selection_editor_new,

View File

@ -43,8 +43,6 @@ dialogs_sources = \
palette-import-dialog.h \ palette-import-dialog.h \
palette-select.c \ palette-select.c \
palette-select.h \ palette-select.h \
paths-dialog.c \
paths-dialog.h \
pattern-select.c \ pattern-select.c \
pattern-select.h \ pattern-select.h \
preferences-dialog.c \ preferences-dialog.c \

View File

@ -41,13 +41,119 @@
#include "gimp-intl.h" #include "gimp-intl.h"
#include "pixmaps/wilber2.xpm"
#define ANIMATION_STEPS 16 #define ANIMATION_STEPS 16
#define ANIMATION_SIZE 2 #define ANIMATION_SIZE 2
static char * wilber2_xpm[] = {
"95 95 9 1",
" c None",
". c #FFFFFF",
"+ c #B6B6B6",
"@ c #494949",
"# c #DBDBDB",
"$ c #6D6D6D",
"% c #929292",
"& c #242424",
"* c #000000",
" .+. ",
" .+. .+@# ..+. ",
" #@+. .$@# .%&. ",
" #&+. .&@#. .+&$. ..#. ",
" .++. +*$.. .$*%. .%*%. ..%%. ",
" .$@. #@*%. .#*&. .#&@. .%*%. ",
" .$&+. .#&&+ .%*&# .#&*# #&@.. ",
" .+*&+. .#*&+ .#&*$. .#@*&# #&$. ",
" .+#. ..%&&+. .%*&# .%**+. .$**%. .+&@. ..++. ",
" .%@#. ..@*$. #@*&#. .$**+. #**@.. ..+@*@. .#$&%. ",
" .+&$.. .@*%. .@**%. .#&*@.. #&*@. .%**&+. .%*%.. ",
" #&*@+. #&*@.. .+&*&+. .%**%. .$*&#. #&*&+. .$*#. ",
" .#+.+$*&+. #&*&%.. .+&*&+..#&*&#..+**%. #&*@. ..+&*# ",
" ... .@&...@*%. .%***$#. .%**&# .@**%. #&*@. .@*@. .+@&*&. .... ",
" +%..#&$+..@*@.. ..+@**&+..#&**+ .@**$..#**&# .$*&# #&**@+. .#+@%. ",
" +&%.+*@+#.@**%#.. .#@**@. #&**+.#&**+..%**&. .$*&+ +**$#. .$*@#. ",
" #@&$@**%+#%***@%#...+**&#.+&*@##@**$..%&**$..#&**+ .+**+. .#&&#. ",
" .+@&***@##.%&***&%. #&*&#.@*&+#@**$.#@**&%..#$**&+ .%*&# ..#+$*%. ",
" ..+&**&#...#+&**&#.#&*$.%**@.#&**+.%**&+.#$&***$. .$*&# .#$&**&+. ",
" .@***%.....+&**+.%**+.%**@.#&**+.$**@..@***&%#..+&*&# .%***@%. ",
" ... .$***@......$**+.@**+.+***+.@**$.%**@.+&**$#..#%&**&#..$**%#.. ..... ",
" #$#. .$***&%.....#@*#.@**@#.$**&+#&**+#&*&#+**&#.%&*****%.#$@*@.. ..%@&+ ",
" #@@++#.. .$****&$+....#$#.%***@+#$**&+%**@.$**+#&*@.#&***&@%#%$+$*%. .%*&%. ",
" .+&*&&$. .@******&%.....++#%&**&+#@**$#***#%**$#&*&#+**&%##+@%##&*+. .#+++@&+.. ",
" .+%$**+..$********$.....#+++@**&+%**&#&**#%**@#@*&#%**$#$&*%..%*&# .+&****$. ",
" ...@*&%#%*****@$@*@#....#&$+&**$+**&+***#@**$#&*&+%**&***@..#&*$. .@***&@#. ",
" .+***&&*****&##+@@+....%&&&**@+**&@**@%***+$**&+$*****@#..#@%#..+&*@+#.. ",
" .@**********%..#@&+...#&$%&*&@**&**&@***@%&***&*****&+.........$*&#. ",
" ... ..+++%&*****@...#&@...#&@##@*********************@%&%....++###$**$. ..##.. ",
" +$+..#.. ..+*****&#...+&+..+@&$.#&@%+%$$@&&**&***&&@$+#%&#...$&*&&&**&+. .....#@&&%. ",
" #@&@@&$#. #@*****@#...%$...#@&.+$#......##++%%%%+#.+$@&%...+&*******@. .#%$++@*$%#. ",
" .#&*&**$#..#++#.#******&+..#%....+%....................#&@%+....@**&$$@&$#..#@*****$... ",
" ..#.%**&@&***&+.$*******&%%++%$@&$.............##++#..#+......+**&#........$***&&@#. ",
" ..@********@##&*************&%..........+##....+$%#.......+@**%.#++#...%&*@+##.. ",
" .#@@@%%$&**+.+&************%..........%&&@$.....$$#.....+&**&##@**&$%@**&#. ",
" .......+&*&##@***********@...........%$%+@+.....$%.#%$$@***%#@*********%. ",
" .%***&&***********+...............+@#....#$+#+##+@&%#$***@@&***$.. ... ..... ",
" .##..#+#. ..###.#&**************&#........#$#.....%#.....#@.....#$%$&*&%#.#%$+....+%#..+@@%# ",
" #@@$$&*@#..+@&&@+.%&*&&@&*********@+#......+*@$$+..........@#.....#&***%..##... ..$&*&$$&&&@+ ",
" .#@**@**&@&*****&#.####.#%*******@&*&$+....+%+++$$#.....##.%+......&**@#+@&@%...#$******&+... ",
" ..+#.%&****&&***$#.#+$&@&******&+##%@&@#........$+.....%&@%%......@&$#+&****@%$@**@%%$$#. ",
" ..%&&$+##+@**&@&***********&#....%&#..#......#.....@**&%...#+.@+#+&**********$#..... ",
" ..##.. .#&***************&#....+&#.#$........+.#%****%...$*%&@&***@%+$****@#. ",
" .....+&**&@%%$*******&#....+@#.#&&@$@$..#*&&*****#.+#$*******$#...+@@%#. ",
" .#%@$#.+%%##++%&******&#...#@+...+%+$$$%.#&******&.#&&&**&**&$##%%#.......#.. ",
" .###...+&***&#...+@&*********&+...$%.....#.......%&*****%.#@****%%%+#%&**&+. .#%&@+..#+#..",
".##.+@*&%%$******&++$&************%..+&#.....+#.......%@&**&+..#+@**@%%%@*****&+##+@***&$%&*&%#",
"#$&&*&&*****&$$@*******&&&********@..%$.......%%#......#$@++@$%$@&&*************&&***&&***&$$$#",
".#%@@##$**&$#...%****&$##+&*******&#.%$........%@%%%%%$$%#..#+++%$$@@&***&*********&+##%@$#....",
" .......+$+.. ..%&&@+#+@&*********$.+@.........#+++++#.............+&**$+$****&**@#. ..... ",
" ... ..#+#.##..$*************$#&$..........%$@$$%...........#&**@+$&****$+#.. ",
" .#$&*&%#.#$***************$@*$.......+@&@@@$+..........#@***********@# .... ",
" .#$*****@@&**&@%%***********&&*%.....$@%#...............%************&#..#%%#. ",
" ..+#.#$***&&*****&%#+@**************&#....#.................#&*************$%$&**&#... ",
" ..#@*&&&**@+##%&**&+#@*****************@+....................#@&********************&%%@. ",
" .#+%@*&****$#. ..+$%##$*******************&&$%+###............#$&@***********&&**&$+%&***&. ",
" #$&*&%#%@&$#...##....+&**@%@***************@@@&&&@@$+#......#%@**@&*********&@@$%#...+@@%%. ",
" ..#++....#....%&&@%+%&**%#+&***********&%@*@##&&@&***&@%%%%$&****&$********@$@#... ..... ",
" .%*********@#$************&@+&&@$.&*+%****************&%@&**&@$@$#. ",
" .#&**&&****&#+&***&*******&+$&*$#$%&*$$*$&***&**********&@@@@$@&*@+###++#. ",
" ....#@**$##+$&$+.@**&+%&********&&*%.#@&&@@*@$*&&***************$+#@***&&&**$.. ",
" .#%%$&**%.. .....+**&#+&***********@+..#&%+*&$&&+%****************$.+*********%.... ",
" .#@*****@#..#+%+#+&**%#&***&*********&$+.+#.@$#+++&***@***$%@@&&&**&#.%@@@%+%&*&%%%$. ",
" ..#%*&@&&@#..#@**&&&**&#%***%%&**********&@+#.####+&****%***@+####+@*&+...#....#@*****. ",
" #$&*@#.###. .$********%.@**$#@**************&@@@&****&**%$****@$%#.#**$.. .#%%+%.. ",
" #%$%#. #&**@%%$@+.#&*&#$***$%&*****************&$**@#$******@#.&**$#..... .... ",
" ..... .+**$#......%**@#&**$+&**&@&**********&**@%***%#+$@&***%.@***&@@@%#. ",
" ...#@*@#...+%%$&**$#&*&#$**&%@**&$**&$&*&%**&#@***$+..+@**$.+&*******%. ",
" .#%$&**%..#$******&+#&*@.@**$+&**%@**$%**@+***++@****@#.#&*$..#%$$$@**@.. ",
" #@****@#..%****&&&+.#**@#&**+%**@+&**+%**&#@**@+#%&***@#.&*@........%&*%##. ",
" .+*&@@$+. .@**@+###..%**@.@**#%**@#&**++**&++&**&%##$***+.&**%.. ..$**&@+. ",
" ..+@&#.... .&*&#...#+$&**$.$**++**@#@**%.&**@#+&***$.#@*&+.@***$+#.. .#%$@&@# ",
" .$*&$. .#**%..#$*****&#.$**%#@*&+%**&#+&**@##@***#.$*&#.+&*****@+. ....+@% ",
" #++#.. ..$*&+..%***&@%+.#@**$.$**$.@**$.+&**$.#&**%.@*&#..+$@&***@. .## ",
" ..+$**&# .$**@#...+@***+.%**@.+***#.%**&#.@**##@**+. ...#+&*&# ",
" .$****$. .@**+..#@****$..$**@.#&**+.#**&##@*@..@**&+.. .#**+.. ",
" #&*@$+.. .$*@. .@***$#.#%&**%.#&**+.+**$.+**%..+&**&$+.. .@*&%+. ",
" .+*$#.. .@*@. .&**%..#@**&%##@**$.#@*&#.$**$. .+@&**&$. .+@&*&#. ",
" .#@*+. .#&*@. .&*&#..%**&+..$**$#.%**$..%**&#. ..+$**&# ..#%*%. ",
" #&&%. .#@**$. .@*&. .@**$. +**&#..@**%..#&**@#.. ..$**+ ..$@. ",
" #+#.. .+&**&+. .%*&. .$**+. +**@# .$**@#..+@**&%.. .#&*+. ..#. ",
" .$*@%#. .%*&# .+**%. #&*&#..+&*&+. .#%&**%. #&*$#. ",
" .@&#.. ..$**+ .&*$. .$**+. .+&*&+. ..%**$. .%&*@+. ",
" .#@&. ..%**&# .$*&#...@*&#. .+&*&#. .#&*%. ..#%*$. ",
" .$&$. .%**@+. .%**%. .+**$. .$**%. #&*+. ..@@. ",
" #@%#. .$*@#. ..@**+. #**&. .%**+. #&*%.. .+$# ",
" ##.. .%*+. .%**$. .+**$. .%*&# .%&&%. ... ",
" .+*%. #@*$.. .@*@#. .@*$. ..#&&# ",
" #@&+. .$*+. .@*%. .%&@#. .%&# ",
" +&%. .+*%. .$*%. ..%*$. .+@# ",
" ##.. .+*$. .#&&# .#@@. .#. ",
" .$&#. .$&# .@$. ",
" .$%. .@@. .%+. ",
" .#.. .%+. .... ",
" ... "};
static gboolean about_dialog_load_logo (GtkWidget *window); static gboolean about_dialog_load_logo (GtkWidget *window);
static void about_dialog_destroy (GtkObject *object, static void about_dialog_destroy (GtkObject *object,
gpointer data); gpointer data);
@ -68,7 +174,7 @@ static void about_dialog_tool_drop (GtkWidget *widget,
static gboolean about_dialog_timer (gpointer data); static gboolean about_dialog_timer (gpointer data);
extern gboolean double_speed; static gboolean double_speed = FALSE;
static GtkWidget *about_dialog = NULL; static GtkWidget *about_dialog = NULL;
static GtkWidget *logo_area = NULL; static GtkWidget *logo_area = NULL;

View File

@ -83,7 +83,6 @@
#include "file-new-dialog.h" #include "file-new-dialog.h"
#include "layers-commands.h" #include "layers-commands.h"
#include "module-browser.h" #include "module-browser.h"
#include "paths-dialog.h"
#include "preferences-dialog.h" #include "preferences-dialog.h"
#include "templates-commands.h" #include "templates-commands.h"
#include "tips-dialog.h" #include "tips-dialog.h"
@ -123,8 +122,6 @@ static void dialogs_set_color_editor_context_func (GimpDockable *dockable,
GimpContext *context); GimpContext *context);
static void dialogs_set_image_item_context_func (GimpDockable *dockable, static void dialogs_set_image_item_context_func (GimpDockable *dockable,
GimpContext *context); GimpContext *context);
static void dialogs_set_path_context_func (GimpDockable *dockable,
GimpContext *context);
static void dialogs_set_image_editor_context_func (GimpDockable *dockable, static void dialogs_set_image_editor_context_func (GimpDockable *dockable,
GimpContext *context); GimpContext *context);
static void dialogs_set_navigation_context_func (GimpDockable *dockable, static void dialogs_set_navigation_context_func (GimpDockable *dockable,
@ -141,9 +138,6 @@ static GtkWidget * dialogs_dockable_new (GtkWidget *widget,
static void dialogs_image_item_view_image_changed (GimpContext *context, static void dialogs_image_item_view_image_changed (GimpContext *context,
GimpImage *gimage, GimpImage *gimage,
GimpContainerView *view); GimpContainerView *view);
static void dialogs_path_view_image_changed (GimpContext *context,
GimpImage *gimage,
GtkWidget *view);
static void dialogs_image_editor_image_changed (GimpContext *context, static void dialogs_image_editor_image_changed (GimpContext *context,
GimpImage *gimage, GimpImage *gimage,
GimpImageEditor *editor); GimpImageEditor *editor);
@ -740,32 +734,6 @@ dialogs_vectors_list_view_new (GimpDialogFactory *factory,
return dockable; return dockable;
} }
GtkWidget *
dialogs_path_list_view_new (GimpDialogFactory *factory,
GimpContext *context,
gint preview_size)
{
static GtkWidget *view = NULL;
GtkWidget *dockable;
if (view)
return NULL;
view = paths_dialog_create ();
g_object_add_weak_pointer (G_OBJECT (view), (gpointer *) &view);
dockable = dialogs_dockable_new (view,
"Old Path List", "Old Paths", NULL,
NULL, NULL,
dialogs_set_path_context_func);
gimp_dockable_set_context (GIMP_DOCKABLE (dockable), context);
return dockable;
}
GtkWidget * GtkWidget *
dialogs_indexed_palette_new (GimpDialogFactory *factory, dialogs_indexed_palette_new (GimpDialogFactory *factory,
GimpContext *context, GimpContext *context,
@ -1312,41 +1280,6 @@ dialogs_set_image_item_context_func (GimpDockable *dockable,
} }
} }
static void
dialogs_set_path_context_func (GimpDockable *dockable,
GimpContext *context)
{
GtkWidget *view;
view = (GtkWidget *) g_object_get_data (G_OBJECT (dockable),
"gimp-dialogs-view");
if (! view)
return;
if (dockable->context)
{
g_signal_handlers_disconnect_by_func (dockable->context,
dialogs_path_view_image_changed,
view);
}
if (context)
{
g_signal_connect (context, "image_changed",
G_CALLBACK (dialogs_path_view_image_changed),
view);
dialogs_path_view_image_changed (context,
gimp_context_get_image (context),
view);
}
else
{
dialogs_path_view_image_changed (NULL, NULL, view);
}
}
static void static void
dialogs_set_image_editor_context_func (GimpDockable *dockable, dialogs_set_image_editor_context_func (GimpDockable *dockable,
GimpContext *context) GimpContext *context)
@ -1450,14 +1383,6 @@ dialogs_image_item_view_image_changed (GimpContext *context,
gimp_item_tree_view_set_image (GIMP_ITEM_TREE_VIEW (view), gimage); gimp_item_tree_view_set_image (GIMP_ITEM_TREE_VIEW (view), gimage);
} }
static void
dialogs_path_view_image_changed (GimpContext *context,
GimpImage *gimage,
GtkWidget *widget)
{
paths_dialog_update (gimage);
}
static void static void
dialogs_image_editor_image_changed (GimpContext *context, dialogs_image_editor_image_changed (GimpContext *context,
GimpImage *gimage, GimpImage *gimage,

View File

@ -104,7 +104,6 @@ GimpItemFactoryEntry dialogs_menu_entries[] =
MENU_SEPARATOR ("/Add Tab/---"), MENU_SEPARATOR ("/Add Tab/---"),
ADD_TAB (N_("/Add Tab/Tools..."), "gimp-tool-list", NULL, NULL), ADD_TAB (N_("/Add Tab/Tools..."), "gimp-tool-list", NULL, NULL),
ADD_TAB (N_("/Add Tab/Old Paths..."), "gimp-path-list", NULL, NULL),
{ { N_("/Remove Tab"), NULL, { { N_("/Remove Tab"), NULL,
dialogs_remove_tab_cmd_callback, 0, dialogs_remove_tab_cmd_callback, 0,

View File

@ -165,8 +165,6 @@ static const GimpDialogFactoryEntry dock_entries[] =
0, FALSE, FALSE, FALSE, TRUE }, 0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-vectors-list", dialogs_vectors_list_view_new, { "gimp-vectors-list", dialogs_vectors_list_view_new,
0, FALSE, FALSE, FALSE, TRUE }, 0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-path-list", dialogs_path_list_view_new,
0, TRUE, FALSE, FALSE, TRUE },
{ "gimp-indexed-palette", dialogs_indexed_palette_new, { "gimp-indexed-palette", dialogs_indexed_palette_new,
0, FALSE, FALSE, FALSE, TRUE }, 0, FALSE, FALSE, FALSE, TRUE },
{ "gimp-selection-editor", dialogs_selection_editor_new, { "gimp-selection-editor", dialogs_selection_editor_new,

View File

@ -58,8 +58,6 @@
#include "gimp-intl.h" #include "gimp-intl.h"
#include "pixmaps/wilber2.xpm"
/* local function prototypes */ /* local function prototypes */
@ -73,10 +71,6 @@ static GimpObject * gui_display_new (GimpImage *gimage,
guint scale); guint scale);
static void gui_themes_dir_foreach_func (GimpDatafileData *file_data); static void gui_themes_dir_foreach_func (GimpDatafileData *file_data);
static gint gui_rotate_the_shield_harmonics (GtkWidget *widget,
GdkEvent *eevent,
gpointer data);
static gboolean gui_exit_callback (Gimp *gimp, static gboolean gui_exit_callback (Gimp *gimp,
gboolean kill_it); gboolean kill_it);
static gboolean gui_exit_finish_callback (Gimp *gimp, static gboolean gui_exit_finish_callback (Gimp *gimp,
@ -102,7 +96,6 @@ static GHashTable *themes_hash = NULL;
static GimpItemFactory *toolbox_item_factory = NULL; static GimpItemFactory *toolbox_item_factory = NULL;
static GimpItemFactory *image_item_factory = NULL; static GimpItemFactory *image_item_factory = NULL;
static GimpItemFactory *paths_item_factory = NULL;
/* public functions */ /* public functions */
@ -304,12 +297,6 @@ gui_restore (Gimp *gimp,
gimp, gimp,
TRUE); TRUE);
paths_item_factory = gimp_menu_factory_menu_new (global_menu_factory,
"<Paths>",
GTK_TYPE_MENU,
gimp,
FALSE);
gimp_devices_restore (gimp); gimp_devices_restore (gimp);
if (GIMP_GUI_CONFIG (gimp->config)->restore_session || restore_session) if (GIMP_GUI_CONFIG (gimp->config)->restore_session || restore_session)
@ -438,8 +425,6 @@ gui_message (Gimp *gimp,
} }
} }
gboolean double_speed = FALSE;
static GimpObject * static GimpObject *
gui_display_new (GimpImage *gimage, gui_display_new (GimpImage *gimage,
guint scale) guint scale)
@ -457,11 +442,6 @@ gui_display_new (GimpImage *gimage,
gimp_item_factory_update (shell->menubar_factory, shell); gimp_item_factory_update (shell->menubar_factory, shell);
if (double_speed)
g_signal_connect_after (shell->canvas, "expose_event",
G_CALLBACK (gui_rotate_the_shield_harmonics),
NULL);
return GIMP_OBJECT (gdisp); return GIMP_OBJECT (gdisp);
} }
@ -483,54 +463,6 @@ gui_themes_dir_foreach_func (GimpDatafileData *file_data)
g_strdup (file_data->filename)); g_strdup (file_data->filename));
} }
static gint
gui_rotate_the_shield_harmonics (GtkWidget *widget,
GdkEvent *eevent,
gpointer data)
{
GdkPixmap *pixmap = NULL;
GdkBitmap *mask = NULL;
gint width = 0;
gint height = 0;
g_signal_handlers_disconnect_by_func (widget,
gui_rotate_the_shield_harmonics,
data);
pixmap = gdk_pixmap_create_from_xpm_d (widget->window,
&mask,
NULL,
wilber2_xpm);
gdk_drawable_get_size (pixmap, &width, &height);
if (widget->allocation.width >= width &&
widget->allocation.height >= height)
{
gint x, y;
x = (widget->allocation.width - width) / 2;
y = (widget->allocation.height - height) / 2;
gdk_gc_set_clip_mask (widget->style->black_gc, mask);
gdk_gc_set_clip_origin (widget->style->black_gc, x, y);
gdk_draw_drawable (widget->window,
widget->style->black_gc,
pixmap, 0, 0,
x, y,
width, height);
gdk_gc_set_clip_mask (widget->style->black_gc, NULL);
gdk_gc_set_clip_origin (widget->style->black_gc, 0, 0);
}
g_object_unref (pixmap);
g_object_unref (mask);
return FALSE;
}
static gboolean static gboolean
gui_exit_callback (Gimp *gimp, gui_exit_callback (Gimp *gimp,
gboolean kill_it) gboolean kill_it)
@ -588,9 +520,6 @@ gui_exit_finish_callback (Gimp *gimp,
g_object_unref (image_item_factory); g_object_unref (image_item_factory);
image_item_factory = NULL; image_item_factory = NULL;
g_object_unref (paths_item_factory);
paths_item_factory = NULL;
menus_exit (gimp); menus_exit (gimp);
render_exit (gimp); render_exit (gimp);

View File

@ -53,7 +53,6 @@
#include "menus.h" #include "menus.h"
#include "palette-editor-menu.h" #include "palette-editor-menu.h"
#include "palettes-menu.h" #include "palettes-menu.h"
#include "paths-dialog.h"
#include "patterns-menu.h" #include "patterns-menu.h"
#include "qmask-menu.h" #include "qmask-menu.h"
#include "templates-menu.h" #include "templates-menu.h"
@ -149,12 +148,6 @@ menus_init (Gimp *gimp)
n_vectors_menu_entries, n_vectors_menu_entries,
vectors_menu_entries); vectors_menu_entries);
gimp_menu_factory_menu_register (global_menu_factory,
"<Paths>", "paths",
NULL, NULL, FALSE,
n_paths_menu_entries,
paths_menu_entries);
gimp_menu_factory_menu_register (global_menu_factory, gimp_menu_factory_menu_register (global_menu_factory,
"<Dialogs>", "dialogs", "<Dialogs>", "dialogs",
NULL, dialogs_menu_update, TRUE, NULL, dialogs_menu_update, TRUE,

File diff suppressed because it is too large Load Diff

View File

@ -1,68 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PATHS_DIALOG_H__
#define __PATHS_DIALOG_H__
GtkWidget * paths_dialog_create (void);
void paths_dialog_free (void);
void paths_dialog_update (GimpImage *gimage);
void paths_dialog_flush (void);
extern GimpItemFactoryEntry paths_menu_entries[];
extern gint n_paths_menu_entries;
void paths_dialog_new_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_delete_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_dup_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_copy_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_paste_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_stroke_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_path_to_sel_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_sel_to_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_import_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_export_path_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_edit_path_attributes_callback (GtkWidget *widget,
gpointer data);
void paths_dialog_destroy_cb (GtkObject *widget,
gpointer data);
/* EEEK */
void paths_newpoint_current (GimpBezierSelectTool *, GimpDisplay *);
void paths_first_button_press (GimpBezierSelectTool *, GimpDisplay *);
void paths_new_bezier_select_tool (void);
Path * paths_get_bzpaths (void);
void paths_set_bzpaths (GimpImage *, Path *);
void paths_dialog_set_default_op (void);
#endif /* __PATHS_DIALOG_H__ */

View File

@ -53,7 +53,6 @@
#include "menus.h" #include "menus.h"
#include "palette-editor-menu.h" #include "palette-editor-menu.h"
#include "palettes-menu.h" #include "palettes-menu.h"
#include "paths-dialog.h"
#include "patterns-menu.h" #include "patterns-menu.h"
#include "qmask-menu.h" #include "qmask-menu.h"
#include "templates-menu.h" #include "templates-menu.h"
@ -149,12 +148,6 @@ menus_init (Gimp *gimp)
n_vectors_menu_entries, n_vectors_menu_entries,
vectors_menu_entries); vectors_menu_entries);
gimp_menu_factory_menu_register (global_menu_factory,
"<Paths>", "paths",
NULL, NULL, FALSE,
n_paths_menu_entries,
paths_menu_entries);
gimp_menu_factory_menu_register (global_menu_factory, gimp_menu_factory_menu_register (global_menu_factory,
"<Dialogs>", "dialogs", "<Dialogs>", "dialogs",
NULL, dialogs_menu_update, TRUE, NULL, dialogs_menu_update, TRUE,

View File

@ -1,150 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <gtk/gtk.h>
#include "libgimpwidgets/gimpwidgets.h"
#include "ops_buttons.h"
#include "gimp-intl.h"
typedef enum
{
OPS_BUTTON_MODIFIER_NONE,
OPS_BUTTON_MODIFIER_SHIFT,
OPS_BUTTON_MODIFIER_CTRL,
OPS_BUTTON_MODIFIER_ALT,
OPS_BUTTON_MODIFIER_SHIFT_CTRL,
OPS_BUTTON_MODIFIER_LAST
} OpsButtonModifier;
static void ops_button_extended_clicked (GtkWidget *widget,
guint modifier_state,
gpointer data);
GtkWidget *
ops_button_box_new (OpsButton *ops_button,
OpsButtonType ops_type)
{
GtkWidget *button;
GtkWidget *button_box;
GtkWidget *pixmap;
GSList *group = NULL;
button_box = gtk_hbox_new (TRUE, 1);
while (ops_button->xpm_data)
{
pixmap = gimp_pixmap_new (ops_button->xpm_data);
switch (ops_type)
{
case OPS_BUTTON_NORMAL:
button = gimp_button_new ();
break;
case OPS_BUTTON_RADIO:
button = gtk_radio_button_new (group);
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
break;
default:
g_warning ("ops_button_box_new: unknown type %d\n", ops_type);
continue;
}
gtk_container_add (GTK_CONTAINER (button), pixmap);
if (ops_button->ext_callbacks == NULL)
{
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (ops_button->callback),
NULL);
}
else
{
g_signal_connect (button, "extended_clicked",
G_CALLBACK (ops_button_extended_clicked),
ops_button);
}
gimp_help_set_help_data (button,
gettext (ops_button->tooltip),
ops_button->private_tip);
gtk_box_pack_start (GTK_BOX (button_box), button, TRUE, TRUE, 0);
gtk_widget_show (pixmap);
gtk_widget_show (button);
ops_button->widget = button;
ops_button++;
}
return button_box;
}
static void
ops_button_extended_clicked (GtkWidget *widget,
guint modifier_state,
gpointer data)
{
OpsButton *ops_button;
OpsButtonModifier modifier;
g_return_if_fail (data != NULL);
ops_button = (OpsButton *) data;
if (modifier_state & GDK_SHIFT_MASK)
{
if (modifier_state & GDK_CONTROL_MASK)
modifier = OPS_BUTTON_MODIFIER_SHIFT_CTRL;
else
modifier = OPS_BUTTON_MODIFIER_SHIFT;
}
else if (modifier_state & GDK_CONTROL_MASK)
modifier = OPS_BUTTON_MODIFIER_CTRL;
else if (modifier_state & GDK_MOD1_MASK)
modifier = OPS_BUTTON_MODIFIER_ALT;
else
modifier = OPS_BUTTON_MODIFIER_NONE;
#ifdef __GNUC__
#warning FIXME: remove ops_buttons
#endif
#if 0
if (modifier > OPS_BUTTON_MODIFIER_NONE &&
modifier < OPS_BUTTON_MODIFIER_LAST)
{
if (ops_button->ext_callbacks[modifier - 1] != NULL)
(ops_button->ext_callbacks[modifier - 1]) (widget, NULL);
else
(ops_button->callback) (widget, NULL);
}
else
(ops_button->callback) (widget, NULL);
#endif
}

View File

@ -1,48 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __OPS_BUTTONS_H__
#define __OPS_BUTTONS_H__
typedef enum
{
OPS_BUTTON_NORMAL,
OPS_BUTTON_RADIO
} OpsButtonType;
typedef struct _OpsButton OpsButton;
struct _OpsButton
{
gchar **xpm_data; /* xpm data for the button */
GCallback callback; /* callback function */
GCallback *ext_callbacks; /* callback functions when *
* modifiers are pressed */
gchar *tooltip;
gchar *private_tip;
GtkWidget *widget; /* the button widget */
};
/* Function declarations */
GtkWidget * ops_button_box_new (OpsButton *ops_button,
OpsButtonType ops_type);
#endif /* __OPS_BUTTONS_H__ */

View File

@ -1,340 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* Some of this code is based on the layers_dialog box code.
*/
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
#include "libgimpmath/gimpmath.h"
#include "tools/tools-types.h"
#include "core/gimpimage.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplay-foreach.h"
#include "tools/gimpbezierselecttool.h"
#include "gui/paths-dialog.h"
#include "path.h"
#include "pathP.h"
static gchar * unique_name (GimpImage *gimage,
gchar *cstr);
Path *
path_new (GimpImage *gimage,
PathType ptype,
GSList *path_details,
gint closed,
gint state,
gint locked,
gint tattoo,
gchar *name)
{
gchar *suniq;
Path *path = g_new0 (Path, 1);
suniq = unique_name (gimage, name);
if (suniq)
path->name = suniq;
else
path->name = g_strdup (name);
path->path_details = path_details;
path->closed = closed;
path->state = state;
path->locked = locked;
path->pathtype = ptype;
if(tattoo)
path->tattoo = tattoo;
else
path->tattoo = gimp_image_get_new_tattoo (gimage);
return path;
}
Path *
path_copy (GimpImage *gimage,
Path *path)
{
Path *p_copy = g_new0 (Path, 1);
gchar *name;
name = unique_name (gimage, path->name);
if (name)
p_copy->name = name;
else
p_copy->name = g_strdup (path->name);
p_copy->closed = path->closed;
p_copy->state = path->state;
p_copy->pathtype = path->pathtype;
p_copy->path_details = pathpoints_copy (path->path_details);
if (gimage)
p_copy->tattoo = gimp_image_get_new_tattoo (gimage);
else
p_copy->tattoo = path->tattoo;
return p_copy;
}
void
path_free (Path *path)
{
g_return_if_fail (path != NULL);
g_free (path->name);
pathpoints_free (path->path_details);
g_free (path);
}
PathPoint *
path_point_new (guint type,
gdouble x,
gdouble y)
{
PathPoint *pathpoint = g_new0 (PathPoint,1);
pathpoint->type = type;
pathpoint->x = x;
pathpoint->y = y;
return pathpoint;
}
void
path_point_free (PathPoint *pathpoint)
{
g_free (pathpoint);
}
void
path_stroke (GimpImage *gimage,
PathList *pl,
Path *bzp)
{
GimpBezierSelectTool *bezier_sel;
GimpDisplay *gdisp;
gdisp = gdisplays_check_valid (pl->gdisp, gimage);
bezier_sel = path_to_beziersel (bzp);
bezier_stroke (bezier_sel, gdisp, SUBDIVIDE, !bzp->closed);
bezier_select_free (bezier_sel);
}
gint
path_distance (Path *bzp,
gdouble dist,
gint *x,
gint *y,
gdouble *grad)
{
gint ret;
GimpBezierSelectTool *bezier_sel;
bezier_sel = path_to_beziersel (bzp);
ret = bezier_distance_along (bezier_sel, !bzp->closed, dist, x, y, grad);
bezier_select_free (bezier_sel);
return ret;
}
GimpTattoo
path_get_tattoo (Path* p)
{
if (!p)
{
g_warning ("path_get_tattoo: invalid path");
return 0;
}
return p->tattoo;
}
Path*
path_get_path_by_tattoo (GimpImage *gimage,
GimpTattoo tattoo)
{
GSList *tlist;
PathList *plp;
if (!gimage || !tattoo)
return NULL;
/* Go around the list and check all tattoos. */
/* Get path structure */
plp = (PathList*) gimp_image_get_paths (gimage);
if (!plp)
return (NULL);
for (tlist = plp->bz_paths; tlist; tlist = g_slist_next(tlist))
{
Path* p = (Path*)(tlist->data);
if (p->tattoo == tattoo)
return (p);
}
return (NULL);
}
PathList *
path_list_new (GimpImage *gimage,
gint last_selected_row,
GSList *bz_paths)
{
PathList *pip = g_new0 (PathList, 1);
pip->gimage = gimage;
pip->last_selected_row = last_selected_row;
/* add connector to image delete/destroy */
pip->sig_id = g_signal_connect (gimage, "disconnect",
G_CALLBACK (paths_dialog_destroy_cb),
pip);
pip->bz_paths = bz_paths;
return (PathList *) pip;
}
void
path_list_free (PathList* iml)
{
g_return_if_fail (iml != NULL);
if (iml->bz_paths)
{
g_slist_foreach (iml->bz_paths, (GFunc) path_free, NULL);
g_slist_free (iml->bz_paths);
}
g_free (iml);
}
/* Always return a copy that must be freed later */
static gchar *
strip_off_cnumber (gchar *str)
{
gchar *hashptr;
gint num;
gchar *copy;
if (!str)
return str;
copy = g_strdup (str);
if ((hashptr = strrchr (copy,'#')) && /* have a hash */
strlen(hashptr) > 0 && /* followed by something */
(num = atoi(hashptr+1)) > 0 && /* which is a number */
((int) log10 (num) + 1) == strlen (hashptr+1)) /* which is at the end */
{
gchar *tstr;
/* Has a #<number> */
*hashptr = '\0';
tstr = g_strdup (copy);
g_free (copy);
copy = tstr;
}
return copy;
}
/* Return NULL if already unique else a unique string */
static gchar *
unique_name (GimpImage *gimage,
gchar *cstr)
{
GSList *tlist;
PathList *plp;
gboolean unique = TRUE;
gchar *copy_cstr;
gchar *copy_test;
gchar *stripped_copy;
gint counter = 1;
/* Get bzpath structure */
if (!gimage || !(plp = (PathList*) gimp_image_get_paths(gimage)))
return NULL;
tlist = plp->bz_paths;
while (tlist)
{
gchar *test_str;
test_str = ((Path *) (tlist->data))->name;
if (strcmp (cstr, test_str) == 0)
{
unique = FALSE;
break;
}
tlist = g_slist_next(tlist);
}
if (unique)
return NULL;
/* OK Clashes with something */
/* restart scan to find unique name */
stripped_copy = strip_off_cnumber (cstr);
copy_cstr = g_strdup_printf ("%s#%d", stripped_copy, counter++);
tlist = plp->bz_paths;
while (tlist)
{
copy_test = ((Path*)(tlist->data))->name;
if (strcmp (copy_cstr,copy_test) == 0)
{
g_free (copy_cstr);
copy_cstr = g_strdup_printf ("%s#%d", stripped_copy, counter++);
tlist = plp->bz_paths;
continue;
}
tlist = g_slist_next(tlist);
}
g_free (stripped_copy);
return copy_cstr;
}

View File

@ -1,82 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PATH_H__
#define __PATH_H__
struct _PathList
{
GimpImage *gimage;
gpointer gdisp; /* This is a hack.. Needed so we can get back to
* the same display that these curves were added
* too. That way when an entry in the paths dialog
* is clicked the bezier tool can be targeted at
* correct display. Note this display could have been
* deleted (ie different view), but gdisplays_check_valid()
* function will take care of that.. In this case we just
* pick a display that the gimage is rendered in.
*/
GSList *bz_paths; /* list of BZPATHP */
guint sig_id;
gint32 last_selected_row;
};
typedef enum
{
BEZIER = 1
} PathType;
Path* path_new (GimpImage *gimage,
PathType ptype,
GSList *path_details,
gint closed,
gint state,
gint locked,
gint tattoo,
gchar *name);
Path* path_copy (GimpImage *gimage,
Path *path);
void path_free (Path *path);
GimpTattoo path_get_tattoo (Path *path);
Path* path_get_path_by_tattoo (GimpImage *gimage,
GimpTattoo tattoo);
void path_stroke (GimpImage *gimage,
PathList *pl,
Path *bzp);
gint path_distance (Path *bzp,
gdouble dist,
gint *x,
gint *y,
gdouble *grad);
PathPoint* path_point_new (guint type,
gdouble x,
gdouble y);
void path_point_free (PathPoint *pathpoint);
PathList* path_list_new (GimpImage *gimage,
gint last_selected_row,
GSList *bz_paths);
void path_list_free (PathList *plist);
#endif /* __PATH_H__ */

View File

@ -1,59 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PATHP_H__
#define __PATHP_H__
struct _PathPoint
{
guint32 type;
gdouble x;
gdouble y;
};
struct _Path
{
GSList *path_details;
gint pathtype; /* Only beziers to start with */
gboolean closed;
guint32 state;
guint32 locked; /* Only bottom bit used */
GimpTattoo tattoo; /* The tattoo for the path */
gchar *name;
};
gboolean path_set_path (GimpImage *gimage,
gchar *pname);
gboolean path_set_path_points (GimpImage *gimage,
gchar *pname,
gint ptype,
gint pclosed,
gint num_pnts,
gdouble *pnts);
gboolean path_delete_path (GimpImage *gimage,
gchar *pname);
GSList* pathpoints_copy (GSList *list);
void pathpoints_free (GSList *list);
#endif /* __PATHP_H__ */

View File

@ -1,42 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1999 Andy Thomas alt@picnic.demon.co.uk
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PATH_TRANSFORM_H__
#define __PATH_TRANSFORM_H__
GSList * path_transform_start_undo (GimpImage *gimage);
void path_transform_free_undo (GSList *pundo);
void path_transform_do_undo (GimpImage *gimage,
GSList *pundo);
void path_transform_current_path (GimpImage *gimage,
GimpMatrix3 transform,
gboolean forpreview);
void path_transform_draw_current (GimpDisplay *gimage,
GimpDrawTool *core,
GimpMatrix3 transform);
void path_transform_flip_horz (GimpImage *gimage);
void path_transform_flip_vert (GimpImage *gimage);
void path_transform_xy (GimpImage *gimage,
gint x,
gint y);
#endif /* __PATH_TRANSFORM_H__ */

View File

@ -9,8 +9,6 @@ libapptools_a_sources = \
tools.h \ tools.h \
gimpairbrushtool.c \ gimpairbrushtool.c \
gimpairbrushtool.h \ gimpairbrushtool.h \
gimpbezierselecttool.c \
gimpbezierselecttool.h \
gimpblendoptions.c \ gimpblendoptions.c \
gimpblendoptions.h \ gimpblendoptions.h \
gimpblendtool.c \ gimpblendtool.c \

File diff suppressed because it is too large Load Diff

View File

@ -1,168 +0,0 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_BEZIER_SELECT_TOOL_H__
#define __GIMP_BEZIER_SELECT_TOOL_H__
#include "gimpselectiontool.h"
#define GIMP_TYPE_BEZIER_SELECT_TOOL (gimp_bezier_select_tool_get_type ())
#define GIMP_BEZIER_SELECT_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_BEZIER_SELECT_TOOL, GimpBezierSelectTool))
#define GIMP_BEZIER_SELECT_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_BEZIER_SELECT_TOOL, GimpBezierSelectToolClass))
#define GIMP_IS_BEZIER_SELECT_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_BEZIER_SELECT_TOOL))
#define GIMP_IS_BEZIER_SELECT_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_BEZIER_SELECT_TOOL))
#define GIMP_BEZIER_SELECT_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_BEZIER_SELECT_TOOL, GimpBezierSelectToolClass))
#define BEZIER_START 1
#define BEZIER_ADD 2
#define BEZIER_EDIT 4
#define BEZIER_DRAG 8
#define BEZIER_ANCHOR 1
#define BEZIER_CONTROL 2
#define BEZIER_MOVE 3
#define IMAGE_COORDS 1
#define AA_IMAGE_COORDS 2
#define SCREEN_COORDS 3
#define SUBDIVIDE 1000
enum { EXTEND_EDIT, EXTEND_ADD, EXTEND_REMOVE, EXTEND_NEW };
/* typedef struct _GimpBezierSelectTool GimpBezierSelectTool;
* typedef struct _GimpBezierSelectPoint GimpBezierSelectPoint; */
typedef struct _GimpBezierSelectToolClass GimpBezierSelectToolClass;
struct _GimpBezierSelectPoint
{
gint type; /* type of point (anchor/control/move) */
gdouble x, y; /* location of point in image space */
gint sx, sy; /* location of point in screen space */
GimpBezierSelectPoint *next; /* next point on curve */
GimpBezierSelectPoint *prev; /* prev point on curve */
GimpBezierSelectPoint *next_curve; /* Next curve segment */
gint pointflags; /* Status of point 0 = not selected
* 1 = selected
*/
};
struct _GimpBezierSelectTool
{
GimpSelectionTool parent_instance;
gint state; /* start, add, edit or drag */
gint draw_mode; /* all or part */
gint closed; /* is the last curve closed */
GimpBezierSelectPoint *points; /* the curve */
GimpBezierSelectPoint *cur_anchor; /* the current active anchor point */
GimpBezierSelectPoint *cur_control; /* the current active control point */
GimpBezierSelectPoint *last_point; /* the last point on the curve */
gint num_points; /* number of points in the curve */
GimpChannel *mask; /* null if the curve is open */
GSList **scanlines; /* used in converting a curve */
};
struct _GimpBezierSelectToolClass
{
GimpSelectionToolClass parent_class;
};
typedef void (* GimpBezierSelectPointsFunc) (GimpBezierSelectTool *bezier_sel,
GdkPoint *points,
gint n_points,
gpointer data);
typedef struct
{
gint count;
} CountCurves;
/* Public functions */
void gimp_bezier_select_tool_register (GimpToolRegisterCallback callback,
gpointer data);
GType gimp_bezier_select_tool_get_type (void) G_GNUC_CONST;
gboolean bezier_tool_selected (void);
void gimp_bezier_select_tool_bezier_select (GimpBezierSelectTool *rect_tool,
gint x,
gint y,
gint w,
gint h);
void bezier_select (GimpImage *gimage,
gint x,
gint y,
gint w,
gint h,
SelectOps op,
gboolean feather,
gdouble feather_radius);
gint bezier_select_load (GimpDisplay *gdisp,
GimpBezierSelectPoint *points,
gint n_points,
gint closed);
void bezier_draw_curve (GimpBezierSelectTool *bezier_sel,
GimpBezierSelectPointsFunc func,
gint coord,
gpointer data);
void bezier_select_reset (GimpBezierSelectTool *bezier_sel);
void bezier_select_free (GimpBezierSelectTool *bezier_sel);
GimpBezierSelectTool* path_to_beziersel (Path *path);
void bezier_add_point (GimpBezierSelectTool *bezier_sel,
gint type,
gdouble x,
gdouble y);
void bezier_paste_bezierselect_to_current (GimpDisplay *gdisp,
GimpBezierSelectTool *bezier_sel);
void bezier_select_mode (gint);
void bezier_stroke (GimpBezierSelectTool *bezier_sel,
GimpDisplay *gdisp,
gint subdivisions,
gint open_path);
void bezier_to_selection (GimpBezierSelectTool *bezier_sel,
GimpDisplay *gdisp);
gint bezier_distance_along (GimpBezierSelectTool *bezier_sel,
gint open_path,
gdouble dist,
gint *x,
gint *y,
gdouble *gradient);
void bezier_draw (GimpDisplay *gdisp,
GimpBezierSelectTool *bezier_sel);
#endif /* __GIMP_BEZIER_SELECT_TOOL_H__ */

View File

@ -73,7 +73,6 @@
#include "display/gimpdisplay.h" #include "display/gimpdisplay.h"
#include "gimpbezierselecttool.h"
#include "gimpiscissorstool.h" #include "gimpiscissorstool.h"
#include "gimpeditselectiontool.h" #include "gimpeditselectiontool.h"
#include "gimpselectionoptions.h" #include "gimpselectionoptions.h"

View File

@ -63,8 +63,6 @@
#include "gimptransformtool-undo.h" #include "gimptransformtool-undo.h"
#include "tool_manager.h" #include "tool_manager.h"
#include "path_transform.h"
#include "gimp-intl.h" #include "gimp-intl.h"
@ -462,9 +460,11 @@ gimp_transform_tool_button_release (GimpTool *tool,
} }
else else
{ {
#if 0
/* Only update the paths preview */ /* Only update the paths preview */
path_transform_current_path (gdisp->gimage, path_transform_current_path (gdisp->gimage,
tr_tool->transform, TRUE); tr_tool->transform, TRUE);
#endif
} }
} }
else else
@ -480,9 +480,11 @@ gimp_transform_tool_button_release (GimpTool *tool,
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool)); gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
#if 0
/* Update the paths preview */ /* Update the paths preview */
path_transform_current_path (gdisp->gimage, path_transform_current_path (gdisp->gimage,
tr_tool->transform, TRUE); tr_tool->transform, TRUE);
#endif
} }
} }
@ -761,8 +763,10 @@ gimp_transform_tool_draw (GimpDrawTool *draw_tool)
gimp_matrix3_duplicate (tr_tool->transform, tmp_matrix); gimp_matrix3_duplicate (tr_tool->transform, tmp_matrix);
} }
#if 0
path_transform_draw_current (GIMP_TOOL (draw_tool)->gdisp, path_transform_draw_current (GIMP_TOOL (draw_tool)->gdisp,
draw_tool, tmp_matrix); draw_tool, tmp_matrix);
#endif
} }
} }

View File

@ -27,7 +27,6 @@
#include "tool_manager.h" #include "tool_manager.h"
#include "gimpairbrushtool.h" #include "gimpairbrushtool.h"
#include "gimpbezierselecttool.h"
#include "gimpblendtool.h" #include "gimpblendtool.h"
#include "gimpbrightnesscontrasttool.h" #include "gimpbrightnesscontrasttool.h"
#include "gimpbucketfilltool.h" #include "gimpbucketfilltool.h"
@ -119,7 +118,6 @@ tools_init (Gimp *gimp)
/* selection tools */ /* selection tools */
gimp_bezier_select_tool_register,
gimp_iscissors_tool_register, gimp_iscissors_tool_register,
gimp_by_color_select_tool_register, gimp_by_color_select_tool_register,
gimp_fuzzy_select_tool_register, gimp_fuzzy_select_tool_register,

View File

@ -657,7 +657,9 @@ static void
gimp_vectors_real_stroke_add (GimpVectors *vectors, gimp_vectors_real_stroke_add (GimpVectors *vectors,
GimpStroke *stroke) GimpStroke *stroke)
{ {
vectors->strokes = g_list_prepend (vectors->strokes, stroke); /* Don't g_list_prepend() here. See ChangeLog 2003-05-21 --Mitch */
vectors->strokes = g_list_append (vectors->strokes, stroke);
g_object_ref (stroke); g_object_ref (stroke);
} }

View File

@ -54,12 +54,19 @@
#include "xcf-read.h" #include "xcf-read.h"
#include "xcf-seek.h" #include "xcf-seek.h"
#include "path.h"
#include "pathP.h"
#include "gimp-intl.h" #include "gimp-intl.h"
typedef struct _XcfPathPoint PathPoint;
struct _XcfPathPoint
{
guint32 type;
gdouble x;
gdouble y;
};
static gboolean xcf_load_image_props (XcfInfo *info, static gboolean xcf_load_image_props (XcfInfo *info,
GimpImage *gimage); GimpImage *gimage);
static gboolean xcf_load_layer_props (XcfInfo *info, static gboolean xcf_load_layer_props (XcfInfo *info,
@ -90,9 +97,9 @@ static gboolean xcf_load_tile_rle (XcfInfo *info,
Tile *tile, Tile *tile,
gint data_length); gint data_length);
static GimpParasite * xcf_load_parasite (XcfInfo *info); static GimpParasite * xcf_load_parasite (XcfInfo *info);
static PathList * xcf_load_old_paths (XcfInfo *info, static gboolean xcf_load_old_paths (XcfInfo *info,
GimpImage *gimage); GimpImage *gimage);
static Path * xcf_load_old_path (XcfInfo *info, static gboolean xcf_load_old_path (XcfInfo *info,
GimpImage *gimage); GimpImage *gimage);
static PathPoint * xcf_load_old_path_point1 (XcfInfo *info, static PathPoint * xcf_load_old_path_point1 (XcfInfo *info,
GimpCoords *coords); GimpCoords *coords);
@ -408,11 +415,7 @@ xcf_load_image_props (XcfInfo *info,
break; break;
case PROP_PATHS: case PROP_PATHS:
{ xcf_load_old_paths (info, gimage);
PathList *paths = xcf_load_old_paths (info, gimage);
/* add to gimage */
gimp_image_set_paths (gimage, paths);
}
break; break;
case PROP_USER_UNIT: case PROP_USER_UNIT:
@ -1305,15 +1308,12 @@ xcf_load_parasite (XcfInfo *info)
return p; return p;
} }
static PathList * static gboolean
xcf_load_old_paths (XcfInfo *info, xcf_load_old_paths (XcfInfo *info,
GimpImage *gimage) GimpImage *gimage)
{ {
guint32 num_paths; guint32 num_paths;
guint32 last_selected_row; guint32 last_selected_row;
PathList *paths;
GSList *bzp_list = NULL;
GimpVectors *active_vectors; GimpVectors *active_vectors;
info->cp += xcf_read_int32 (info->fp, &last_selected_row, 1); info->cp += xcf_read_int32 (info->fp, &last_selected_row, 1);
@ -1322,14 +1322,7 @@ xcf_load_old_paths (XcfInfo *info,
g_print ("num_paths: %d selected_row: %d\n", num_paths, last_selected_row); g_print ("num_paths: %d selected_row: %d\n", num_paths, last_selected_row);
while (num_paths-- > 0) while (num_paths-- > 0)
{ xcf_load_old_path (info, gimage);
Path *bzp;
/* Read in a path */
bzp = xcf_load_old_path (info, gimage);
bzp_list = g_slist_append (bzp_list, bzp);
}
paths = path_list_new (gimage, last_selected_row, bzp_list);
active_vectors = (GimpVectors *) active_vectors = (GimpVectors *)
gimp_container_get_child_by_index (gimage->vectors, last_selected_row); gimp_container_get_child_by_index (gimage->vectors, last_selected_row);
@ -1337,14 +1330,13 @@ xcf_load_old_paths (XcfInfo *info,
if (active_vectors) if (active_vectors)
gimp_image_set_active_vectors (gimage, active_vectors); gimp_image_set_active_vectors (gimage, active_vectors);
return paths; return TRUE;
} }
static Path * static gboolean
xcf_load_old_path (XcfInfo *info, xcf_load_old_path (XcfInfo *info,
GimpImage *gimage) GimpImage *gimage)
{ {
Path *bzp;
gchar *name; gchar *name;
guint32 locked; guint32 locked;
guint8 state; guint8 state;
@ -1353,8 +1345,7 @@ xcf_load_old_path (XcfInfo *info,
guint32 version; /* changed from num_paths */ guint32 version; /* changed from num_paths */
GimpTattoo tattoo = 0; GimpTattoo tattoo = 0;
GSList *pts_list = NULL; GSList *pts_list = NULL;
PathType ptype; GSList *free_list = NULL;
GimpVectors *vectors; GimpVectors *vectors;
GimpCoords *coords; GimpCoords *coords;
GimpCoords *curr_coord; GimpCoords *curr_coord;
@ -1380,8 +1371,6 @@ xcf_load_old_path (XcfInfo *info,
if (version == 1) if (version == 1)
{ {
ptype = BEZIER;
while (num_points-- > 0) while (num_points-- > 0)
{ {
PathPoint *bpt; PathPoint *bpt;
@ -1392,8 +1381,10 @@ xcf_load_old_path (XcfInfo *info,
} }
else if (version == 2) else if (version == 2)
{ {
guint32 dummy;
/* Had extra type field and points are stored as doubles */ /* Had extra type field and points are stored as doubles */
info->cp += xcf_read_int32 (info->fp, (guint32 *) &ptype, 1); info->cp += xcf_read_int32 (info->fp, (guint32 *) &dummy, 1);
while (num_points-- > 0) while (num_points-- > 0)
{ {
@ -1405,8 +1396,10 @@ xcf_load_old_path (XcfInfo *info,
} }
else if (version == 3) else if (version == 3)
{ {
guint32 dummy;
/* Has extra tatto field */ /* Has extra tatto field */
info->cp += xcf_read_int32 (info->fp, (guint32 *) &ptype, 1); info->cp += xcf_read_int32 (info->fp, (guint32 *) &dummy, 1);
info->cp += xcf_read_int32 (info->fp, (guint32 *) &tattoo, 1); info->cp += xcf_read_int32 (info->fp, (guint32 *) &tattoo, 1);
while (num_points-- > 0) while (num_points-- > 0)
@ -1424,14 +1417,13 @@ xcf_load_old_path (XcfInfo *info,
g_print ("\n"); g_print ("\n");
bzp = path_new (gimage,
ptype, pts_list, closed, (gint) state, locked, tattoo, name);
if (tattoo) if (tattoo)
GIMP_ITEM (vectors)->tattoo = tattoo; GIMP_ITEM (vectors)->tattoo = tattoo;
curr_coord = coords; curr_coord = coords;
free_list = pts_list;
while (num_coords > 0) while (num_coords > 0)
{ {
GimpStroke *stroke; GimpStroke *stroke;
@ -1478,11 +1470,13 @@ xcf_load_old_path (XcfInfo *info,
} }
g_free (coords); g_free (coords);
g_slist_foreach (free_list, (GFunc) g_free, NULL);
g_slist_free (free_list);
gimp_image_add_vectors (gimage, vectors, gimp_image_add_vectors (gimage, vectors,
gimp_container_num_children (gimage->vectors)); gimp_container_num_children (gimage->vectors));
return bzp; return TRUE;
} }
static PathPoint* static PathPoint*
@ -1498,7 +1492,11 @@ xcf_load_old_path_point1 (XcfInfo *info,
info->cp += xcf_read_int32 (info->fp, (guint32 *) &x, 1); info->cp += xcf_read_int32 (info->fp, (guint32 *) &x, 1);
info->cp += xcf_read_int32 (info->fp, (guint32 *) &y, 1); info->cp += xcf_read_int32 (info->fp, (guint32 *) &y, 1);
ptr = path_point_new (type, (gdouble) x, (gdouble) y); ptr = g_new0 (PathPoint, 1);
ptr->type = type;
ptr->x = x;
ptr->y = y;
coords->x = x; coords->x = x;
coords->y = y; coords->y = y;
@ -1525,7 +1523,11 @@ xcf_load_old_path_point (XcfInfo *info,
g_print ("path point type: %d (at %f, %f)\n", type, x, y); g_print ("path point type: %d (at %f, %f)\n", type, x, y);
ptr = path_point_new (type, (gdouble) x, (gdouble) y); ptr = g_new0 (PathPoint, 1);
ptr->type = type;
ptr->x = x;
ptr->y = y;
coords->x = x; coords->x = x;
coords->y = y; coords->y = y;

View File

@ -43,16 +43,18 @@
#include "core/gimpparasitelist.h" #include "core/gimpparasitelist.h"
#include "core/gimpunit.h" #include "core/gimpunit.h"
#include "vectors/gimpanchor.h"
#include "vectors/gimpstroke.h"
#include "vectors/gimpvectors.h"
#include "xcf-private.h" #include "xcf-private.h"
#include "xcf-read.h" #include "xcf-read.h"
#include "xcf-seek.h" #include "xcf-seek.h"
#include "xcf-write.h" #include "xcf-write.h"
#include "path.h"
#include "pathP.h"
#include "gimp-intl.h" #include "gimp-intl.h"
static gboolean xcf_save_image_props (XcfInfo *info, static gboolean xcf_save_image_props (XcfInfo *info,
GimpImage *gimage, GimpImage *gimage,
GError **error); GError **error);
@ -94,7 +96,7 @@ static void xcf_save_parasite (gchar *key,
GimpParasite *parasite, GimpParasite *parasite,
XcfInfo *info); XcfInfo *info);
static gboolean xcf_save_old_paths (XcfInfo *info, static gboolean xcf_save_old_paths (XcfInfo *info,
PathList *paths, GimpImage *gimage,
GError **error); GError **error);
@ -414,8 +416,8 @@ xcf_save_image_props (XcfInfo *info,
xcf_check_error (xcf_save_prop (info, gimage, PROP_UNIT, xcf_check_error (xcf_save_prop (info, gimage, PROP_UNIT,
error, gimage->unit)); error, gimage->unit));
xcf_check_error (xcf_save_prop (info, gimage, PROP_PATHS, if (gimp_container_num_children (gimage->vectors) > 0)
error, gimage->paths)); xcf_check_error (xcf_save_prop (info, gimage, PROP_PATHS, error));
if (gimage->unit >= _gimp_unit_get_number_of_built_in_units (gimage->gimp)) if (gimage->unit >= _gimp_unit_get_number_of_built_in_units (gimage->gimp))
xcf_check_error (xcf_save_prop (info, gimage, PROP_USER_UNIT, xcf_check_error (xcf_save_prop (info, gimage, PROP_USER_UNIT,
@ -852,23 +854,23 @@ xcf_save_prop (XcfInfo *info,
break; break;
case PROP_PATHS: case PROP_PATHS:
{ {
PathList *paths_list;
guint32 base, length; guint32 base, length;
glong pos; glong pos;
paths_list = va_arg (args, PathList *);
if (paths_list)
{
xcf_write_int32_check_error (info->fp, (guint32 *) &prop_type, 1); xcf_write_int32_check_error (info->fp, (guint32 *) &prop_type, 1);
/* because we don't know how much room the paths list will take /* because we don't know how much room the paths list will take
we save the file position and write the length later we save the file position and write the length later
*/ */
pos = info->cp; pos = info->cp;
xcf_write_int32_check_error (info->fp, &length, 1); xcf_write_int32_check_error (info->fp, &length, 1);
base = info->cp; base = info->cp;
xcf_check_error (xcf_save_old_paths (info, paths_list, error));
xcf_check_error (xcf_save_old_paths (info, gimage, error));
length = info->cp - base; length = info->cp - base;
/* go back to the saved position and write the length */ /* go back to the saved position and write the length */
xcf_check_error (xcf_seek_pos (info, pos, error)); xcf_check_error (xcf_seek_pos (info, pos, error));
xcf_write_int32 (info->fp, &length, 1, &tmp_error); xcf_write_int32 (info->fp, &length, 1, &tmp_error);
@ -880,7 +882,6 @@ xcf_save_prop (XcfInfo *info,
xcf_check_error (xcf_seek_end (info, error)); xcf_check_error (xcf_seek_end (info, error));
} }
}
break; break;
case PROP_USER_UNIT: case PROP_USER_UNIT:
{ {
@ -1380,11 +1381,13 @@ xcf_save_parasite (gchar *key,
static gboolean static gboolean
xcf_save_old_paths (XcfInfo *info, xcf_save_old_paths (XcfInfo *info,
PathList *paths, GimpImage *gimage,
GError **error) GError **error)
{ {
GimpVectors *active_vectors;
guint32 num_paths; guint32 num_paths;
GSList *slist; guint32 active_index = 0;
GList *list;
GError *tmp_error = NULL; GError *tmp_error = NULL;
/* Write out the following:- /* Write out the following:-
@ -1395,20 +1398,31 @@ xcf_save_old_paths (XcfInfo *info,
* then each path:- * then each path:-
*/ */
xcf_write_int32_check_error (info->fp, num_paths = gimp_container_num_children (gimage->vectors);
(guint32 *) &paths->last_selected_row, 1);
num_paths = g_slist_length (paths->bz_paths); active_vectors = gimp_image_get_active_vectors (gimage);
if (active_vectors)
active_index = gimp_container_get_child_index (gimage->vectors,
GIMP_OBJECT (active_vectors));
xcf_write_int32_check_error (info->fp, &active_index, 1);
xcf_write_int32_check_error (info->fp, &num_paths, 1); xcf_write_int32_check_error (info->fp, &num_paths, 1);
for (slist = paths->bz_paths; slist; slist = g_slist_next (slist)) for (list = GIMP_LIST (gimage->vectors)->list;
list;
list = g_list_next (list))
{ {
Path *bzp = slist->data; GimpVectors *vectors = list->data;
guint8 state = bzp->state; gchar *name;
guint32 num_points; guint32 locked;
guint32 closed; guint8 state;
guint32 num_points = 0;
guint32 closed = FALSE;
guint32 version; guint32 version;
GSList *points; guint32 pathtype;
guint32 tattoo;
GList *strokes;
/* /*
* name (string) * name (string)
@ -1416,39 +1430,106 @@ xcf_save_old_paths (XcfInfo *info,
* state (gchar) * state (gchar)
* closed (gint) * closed (gint)
* number points (gint) * number points (gint)
* number paths (gint unused) * version (gint)
* pathtype (gint)
* tattoo (gint)
* then each point. * then each point.
*/ */
xcf_write_string_check_error (info->fp, &bzp->name, 1); for (strokes = vectors->strokes; strokes; strokes = g_list_next (strokes))
xcf_write_int32_check_error (info->fp, &bzp->locked, 1);
xcf_write_int8_check_error (info->fp, &state, 1);
closed = bzp->closed;
xcf_write_int32_check_error (info->fp, &closed, 1);
num_points = g_slist_length (bzp->path_details);
xcf_write_int32_check_error (info->fp, &num_points, 1);
version = 3;
xcf_write_int32_check_error (info->fp, &version, 1);
xcf_write_int32_check_error (info->fp, &bzp->pathtype, 1);
xcf_write_int32_check_error (info->fp, &bzp->tattoo, 1);
for (points = bzp->path_details; points; points = g_slist_next (points))
{ {
PathPoint *bpt = points->data; GimpStroke *stroke = strokes->data;
gfloat xfloat = bpt->x; gint n_anchors;
gfloat yfloat = bpt->y;
g_assert (stroke->closed || ! strokes->next);
n_anchors = g_list_length (stroke->anchors);
if (! stroke->closed)
n_anchors--;
num_points += n_anchors;
if (! strokes->next)
closed = stroke->closed;
}
name = (gchar *) gimp_object_get_name (GIMP_OBJECT (vectors));
locked = gimp_item_get_linked (GIMP_ITEM (vectors));
state = closed ? 4 : 2;
version = 3;
pathtype = 1;
tattoo = gimp_item_get_tattoo (GIMP_ITEM (vectors));
xcf_write_string_check_error (info->fp, &name, 1);
xcf_write_int32_check_error (info->fp, &locked, 1);
xcf_write_int8_check_error (info->fp, &state, 1);
xcf_write_int32_check_error (info->fp, &closed, 1);
xcf_write_int32_check_error (info->fp, &num_points, 1);
xcf_write_int32_check_error (info->fp, &version, 1);
xcf_write_int32_check_error (info->fp, &pathtype, 1);
xcf_write_int32_check_error (info->fp, &tattoo, 1);
for (strokes = vectors->strokes;
strokes;
strokes = g_list_next (strokes))
{
GimpStroke *stroke = strokes->data;
GList *anchors;
for (anchors = stroke->anchors;
anchors;
anchors = g_list_next (anchors))
{
GimpAnchor *anchor = anchors->data;
guint32 type;
gfloat x;
gfloat y;
/* skip the first anchor, will add it at the end if needed */
if (! anchors->prev)
continue;
/* type (gint32) /* type (gint32)
* x (float) * x (float)
* y (float) * y (float)
*/ */
xcf_write_int32_check_error (info->fp, &bpt->type, 1); switch (anchor->type)
xcf_write_float_check_error (info->fp, &xfloat, 1); {
xcf_write_float_check_error (info->fp, &yfloat, 1); case GIMP_ANCHOR_ANCHOR:
if (strokes->prev && anchors->prev == stroke->anchors)
type = 3; /* new stroke marker */
else
type = 1; /* ordinary anchor */
break;
case GIMP_ANCHOR_CONTROL:
type = 2;
break;
}
x = anchor->position.x;
y = anchor->position.y;
xcf_write_int32_check_error (info->fp, &type, 1);
xcf_write_float_check_error (info->fp, &x, 1);
xcf_write_float_check_error (info->fp, &y, 1);
/* write the skipped control point */
if (! anchors->next && stroke->closed)
{
anchor = (GimpAnchor *) stroke->anchors->data;
type = 2;
x = anchor->position.x;
y = anchor->position.y;
xcf_write_int32_check_error (info->fp, &type, 1);
xcf_write_float_check_error (info->fp, &x, 1);
xcf_write_float_check_error (info->fp, &y, 1);
}
}
} }
} }

View File

@ -1156,7 +1156,6 @@ docs/gimprc-1.3.5
docs/gimptool-1.3.1 docs/gimptool-1.3.1
docs/gimp-remote-1.3.1 docs/gimp-remote-1.3.1
tips/Makefile tips/Makefile
pixmaps/Makefile
cursors/Makefile cursors/Makefile
themes/Makefile themes/Makefile
themes/Default/Makefile themes/Default/Makefile

View File

@ -1,4 +0,0 @@
Makefile
Makefile.in
.xvpics
.thumbnails

View File

@ -1,16 +0,0 @@
## Process this file with automake to produce Makefile.in
EXTRA_DIST = \
delete.xpm \
duplicate.xpm \
locked.xbm \
new.xpm \
path.xbm \
penadd.xpm \
pendel.xpm \
penedit.xpm \
pennorm.xpm \
penstroke.xpm \
topath.xpm \
toselection.xpm \
wilber2.xpm

View File

@ -1,28 +0,0 @@
/* XPM */
static char * delete_xpm[] = {
"16 16 9 1",
" c None",
". c #0B0B0D",
"+ c #EBEBE9",
"@ c #B8B8B9",
"# c #9E9E9D",
"$ c #3E3E3D",
"% c #2F2F2D",
"& c #242424",
"* c #656566",
" ... ",
" .++@. ",
" ........... ",
" .+++++++@@##. ",
" ............. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+%+&+.@. ",
" .+$+$+$+%#. ",
" .######**$. ",
" ......... "};

View File

@ -1,48 +0,0 @@
/* XPM */
static char * duplicate_xpm[] = {
"16 16 29 1",
" c None",
". c #000000",
"+ c #F0F0F0",
"@ c #FFFFFF",
"# c #CCCCCC",
"$ c #F6F6F6",
"% c #666666",
"& c #F5F5F5",
"* c #F7F7F7",
"= c #EEEEEE",
"- c #FAFAFA",
"; c #E6E6E6",
"> c #DDDDDD",
", c #DBDBDB",
"' c #F2F2F2",
") c #F4F4F4",
"! c #E5E5E5",
"~ c #F8F8F8",
"{ c #F9F9F9",
"] c #E7E7E7",
"^ c #F3F3F3",
"/ c #EFEFEF",
"( c #E1E1E1",
"_ c #D8D8D8",
": c #EBEBEB",
"< c #D3D3D3",
"[ c #D2D2D2",
"} c #C7C7C7",
"| c #BDBDBD",
" ....... ",
" ..+@@@#. ",
" .@.$@@@%. ",
" .@#.&*@@%......",
".....=@-*%.@@@#.",
".=;>,'-@)%.@@@%.",
".@@+@@@&!%.*@@%.",
".@@~@@{];%.@-*%.",
".@$&*^/(_%.-@)%.",
".@)$&:;,_%.@&!%.",
".@(>,<[}|%.{];%.",
".#%%%%%%%%./(_%.",
"...........;,_%.",
" .@(>,<[}|%.",
" .#%%%%%%%%.",
" ..........."};

View File

@ -1,9 +0,0 @@
/* Made with Gimp */
#define locked_width 20
#define locked_height 20
static char locked_bits[] = {
0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x70, 0x00,
0x60, 0x60, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0xf8, 0xff, 0x01,
0xf8, 0xff, 0x01, 0x18, 0x80, 0x01, 0x18, 0x86, 0x01, 0x18, 0x8f, 0x01,
0x18, 0x8f, 0x01, 0x18, 0x86, 0x01, 0x18, 0x86, 0x01, 0x18, 0x86, 0x01,
0x18, 0x80, 0x01, 0xf8, 0xff, 0x01, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00 };

View File

@ -1,56 +0,0 @@
/* XPM */
static char * new_xpm[] = {
"16 16 37 1",
" c None",
". c #000000",
"+ c #F0F0F0",
"@ c #FFFFFF",
"# c #CCCCCC",
"$ c #F6F6F6",
"% c #666666",
"& c #F5F5F5",
"* c #F7F7F7",
"= c #F9F9F9",
"- c #EEEEEE",
"; c #FAFAFA",
"> c #E6E6E6",
", c #DDDDDD",
"' c #DBDBDB",
") c #F2F2F2",
"! c #FCFCFC",
"~ c #F4F4F4",
"{ c #FBFBFB",
"] c #E5E5E5",
"^ c #F8F8F8",
"/ c #F1F1F1",
"( c #E7E7E7",
"_ c #F3F3F3",
": c #EFEFEF",
"< c #E1E1E1",
"[ c #D8D8D8",
"} c #EBEBEB",
"| c #DFDFDF",
"1 c #E8E8E8",
"2 c #DADADA",
"3 c #C9C9C9",
"4 c #D3D3D3",
"5 c #D2D2D2",
"6 c #CDCDCD",
"7 c #C7C7C7",
"8 c #BDBDBD",
" ",
" ........ ",
" ..+@@@@#. ",
" .@.$@@@@%. ",
" .@#.&*=@@%. ",
" .....-@@;*%. ",
" .->,');!@~%. ",
" .@@+@@@{&]%. ",
" .@@^@@=/(>%. ",
" .@$&*_:(<[%. ",
" .@~$&}>|'[%. ",
" .@1](<2[#3%. ",
" .@<,'45678%. ",
" .#%%%%%%%%%. ",
" ............ ",
" "};

View File

@ -1,9 +0,0 @@
#define path_width 21
#define path_height 21
static unsigned char path_bits[] = {
0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x01,
0xe0, 0xe1, 0x01, 0xe0, 0xe1, 0x01, 0xe0, 0xe1, 0x01, 0xe0, 0xe1, 0x01,
0xe0, 0xff, 0x01, 0xe0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x0f, 0x00,
0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00,
0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00,
0x00, 0x00, 0x00, };

View File

@ -1,28 +0,0 @@
/* XPM */
static char * penadd_xpm[] = {
"25 20 5 1",
" c None",
". c #949194",
"+ c #000000",
"@ c #FFFFFF",
"# c #DEDADE",
" ",
" . ",
" + ",
" +. ",
" +++. ",
" +@+#+. ",
" +@+@+. ",
" +@+@+. ",
" +@#+##+. ",
" +@#+##+. ",
" +@#+++##+. ",
" +@#.+.##+. ",
" +#####+.. ",
" +###+.. ",
" +++++. + ",
" +.+++. +. ",
" +.+++. +++++ ",
" +.+++. +... ",
" +.+++. +. ",
" ..... . "};

View File

@ -1,28 +0,0 @@
/* XPM */
static char * pendel_xpm[] = {
"25 20 5 1",
" c None",
". c #949194",
"+ c #000000",
"@ c #FFFFFF",
"# c #DEDADE",
" ",
" . ",
" + ",
" +. ",
" +++. ",
" +@+#+. ",
" +@+@+. ",
" +@+@+. ",
" +@#+##+. ",
" +@#+##+. ",
" +@#+++##+. ",
" +@#.+.##+. ",
" +#####+.. ",
" +###+.. ",
" +++++. ",
" +.+++. ",
" +.+++. +++++ ",
" +.+++. ..... ",
" +.+++. ",
" ..... "};

View File

@ -1,28 +0,0 @@
/* XPM */
static char * penedit_xpm[] = {
"25 20 5 1",
" c None",
". c #000000",
"+ c #949194",
"@ c #FFFFFF",
"# c #DEDADE",
" ... . ",
" ........ ... ",
" .. ... .. .. ",
" .. .+ ..... ",
" .. ...+ ",
" . .@.#.+ ",
" . .@.@.+ ",
" .@.@.+ ",
" .@#.##.+ ",
" .@#.##.+ ",
" .@#...##.+ ",
" .@#+.+##.+ ",
" .#####.++ ",
" .###.++ ",
" .....+ ",
" .+...+ ",
" .+...+ ",
" .+...+ ",
" .+...+ ",
" +++++ "};

View File

@ -1,28 +0,0 @@
/* XPM */
static char * pennorm_xpm[] = {
"25 20 5 1",
" c None",
". c #949194",
"+ c #000000",
"@ c #FFFFFF",
"# c #DEDADE",
" ",
" . ",
" + ",
" +. ",
" +++. ",
" +@+#+. ",
" +@+@+. ",
" +@+@+. ",
" +@#+##+. ",
" +@#+##+. ",
" +@#+++##+. ",
" +@#.+.##+. ",
" +#####+.. ",
" +###+.. ",
" +++++. ",
" +.+++. ",
" +.+++. ",
" +.+++. ",
" +.+++. ",
" ..... "};

View File

@ -1,93 +0,0 @@
/* XPM */
static char * penstroke_xpm[] = {
"17 17 73 1",
" c None",
". c #C5C5C5",
"+ c #A4A4A4",
"@ c #858585",
"# c #8F8F8F",
"$ c #B2B2B2",
"% c #979797",
"& c #343434",
"* c #262626",
"= c #323232",
"- c #2C2C2C",
"; c #1D1D1D",
"> c #111111",
", c #838383",
"' c #545454",
") c #202020",
"! c #525252",
"~ c #A1A1A1",
"{ c #BBBBBB",
"] c #C0C0C0",
"^ c #B7B7B7",
"/ c #949494",
"( c #494949",
"_ c #181818",
": c #575757",
"< c #535353",
"[ c #888888",
"} c #C8C8C8",
"| c #C7C7C7",
"1 c #989898",
"2 c #5A5A5A",
"3 c #9A9A9A",
"4 c #8C8C8C",
"5 c #969696",
"6 c #141414",
"7 c #282828",
"8 c #555555",
"9 c #4B4B4B",
"0 c #2A2A2A",
"a c #B0B0B0",
"b c #999999",
"c c #919191",
"d c #1C1C1C",
"e c #B6B6B6",
"f c #8B8B8B",
"g c #292929",
"h c #8E8E8E",
"i c #1E1E1E",
"j c #B8B8B8",
"k c #8A8A8A",
"l c #B3B3B3",
"m c #909090",
"n c #BABABA",
"o c #C6C6C6",
"p c #4C4C4C",
"q c #2B2B2B",
"r c #0E0E0E",
"s c #4F4F4F",
"t c #939393",
"u c #1F1F1F",
"v c #585858",
"w c #484848",
"x c #222222",
"y c #505050",
"z c #B9B9B9",
"A c #9D9D9D",
"B c #101010",
"C c #5B5B5B",
"D c #272727",
"E c #252525",
"F c #808080",
"G c #959595",
"H c #C9C9C9",
" .+@#$ ",
" %&*=-;>-, ",
" ')!~{]^/(_: ",
" <*[} |1;2 ",
" 3;4 56, ",
" 78} |90 ",
"a>b c>{",
"#d^ edf",
",g] ]0,",
"hij e;k",
"l>% m>n",
" *(o |pq ",
" [rh 4i[ ",
" s0t} |tuv ",
" wxy5z]{A9BC ",
" cDBu0ED0F ",
" lf,GH "};

View File

@ -1,24 +0,0 @@
/* XPM */
static char * topath_xpm[] = {
"19 17 4 1",
" c None",
". c #020204",
"+ c #E8E8E9",
"@ c #B5B5B6",
".. ... ..",
"...................",
".. +++...+++ ..",
" .@ @ @ @ @. ",
" .@ @ @ @ @ @. ",
" + @ @ @ @ @ + ",
" + @ @ @ @ @ @ + ",
" .@ @ @ @ @ @ @. ",
" . @ @ @ @ @ @ . ",
" .@ @ @ @ @ @ @. ",
" + @ @ @ @ @ @ + ",
" + @ @ @ @ @ + ",
" .@ @ @ @ @ @. ",
" .@ @ @ @ @. ",
".. +++...+++ ..",
"...................",
".. ... .."};

View File

@ -1,23 +0,0 @@
/* XPM */
static char * toselection_xpm[] = {
"16 16 4 1",
" c None",
". c #020204",
"+ c #E8E8E9",
"@ c #B5B5B6",
" ... ",
" +++@ @+++ ",
" .@ @ @ @ @. ",
" .@ @ @ @ @ @. ",
" + @ @ @ @ @ + ",
"+ @ @ @ @ @ @ + ",
".@ @ @ @ @ @ @. ",
". @ @ @ @ @ @ . ",
".@ @ @ @ @ @ @. ",
"+ @ @ @ @ @ @ + ",
" + @ @ @ @ @ + ",
" .@ @ @ @ @ @. ",
" .@ @ @ @ @. ",
" +++@ @+++ ",
" ... ",
" "};

View File

@ -1,107 +0,0 @@
/* XPM */
static char * wilber2_xpm[] = {
"95 95 9 1",
" c None",
". c #FFFFFF",
"+ c #B6B6B6",
"@ c #494949",
"# c #DBDBDB",
"$ c #6D6D6D",
"% c #929292",
"& c #242424",
"* c #000000",
" .+. ",
" .+. .+@# ..+. ",
" #@+. .$@# .%&. ",
" #&+. .&@#. .+&$. ..#. ",
" .++. +*$.. .$*%. .%*%. ..%%. ",
" .$@. #@*%. .#*&. .#&@. .%*%. ",
" .$&+. .#&&+ .%*&# .#&*# #&@.. ",
" .+*&+. .#*&+ .#&*$. .#@*&# #&$. ",
" .+#. ..%&&+. .%*&# .%**+. .$**%. .+&@. ..++. ",
" .%@#. ..@*$. #@*&#. .$**+. #**@.. ..+@*@. .#$&%. ",
" .+&$.. .@*%. .@**%. .#&*@.. #&*@. .%**&+. .%*%.. ",
" #&*@+. #&*@.. .+&*&+. .%**%. .$*&#. #&*&+. .$*#. ",
" .#+.+$*&+. #&*&%.. .+&*&+..#&*&#..+**%. #&*@. ..+&*# ",
" ... .@&...@*%. .%***$#. .%**&# .@**%. #&*@. .@*@. .+@&*&. .... ",
" +%..#&$+..@*@.. ..+@**&+..#&**+ .@**$..#**&# .$*&# #&**@+. .#+@%. ",
" +&%.+*@+#.@**%#.. .#@**@. #&**+.#&**+..%**&. .$*&+ +**$#. .$*@#. ",
" #@&$@**%+#%***@%#...+**&#.+&*@##@**$..%&**$..#&**+ .+**+. .#&&#. ",
" .+@&***@##.%&***&%. #&*&#.@*&+#@**$.#@**&%..#$**&+ .%*&# ..#+$*%. ",
" ..+&**&#...#+&**&#.#&*$.%**@.#&**+.%**&+.#$&***$. .$*&# .#$&**&+. ",
" .@***%.....+&**+.%**+.%**@.#&**+.$**@..@***&%#..+&*&# .%***@%. ",
" ... .$***@......$**+.@**+.+***+.@**$.%**@.+&**$#..#%&**&#..$**%#.. ..... ",
" #$#. .$***&%.....#@*#.@**@#.$**&+#&**+#&*&#+**&#.%&*****%.#$@*@.. ..%@&+ ",
" #@@++#.. .$****&$+....#$#.%***@+#$**&+%**@.$**+#&*@.#&***&@%#%$+$*%. .%*&%. ",
" .+&*&&$. .@******&%.....++#%&**&+#@**$#***#%**$#&*&#+**&%##+@%##&*+. .#+++@&+.. ",
" .+%$**+..$********$.....#+++@**&+%**&#&**#%**@#@*&#%**$#$&*%..%*&# .+&****$. ",
" ...@*&%#%*****@$@*@#....#&$+&**$+**&+***#@**$#&*&+%**&***@..#&*$. .@***&@#. ",
" .+***&&*****&##+@@+....%&&&**@+**&@**@%***+$**&+$*****@#..#@%#..+&*@+#.. ",
" .@**********%..#@&+...#&$%&*&@**&**&@***@%&***&*****&+.........$*&#. ",
" ... ..+++%&*****@...#&@...#&@##@*********************@%&%....++###$**$. ..##.. ",
" +$+..#.. ..+*****&#...+&+..+@&$.#&@%+%$$@&&**&***&&@$+#%&#...$&*&&&**&+. .....#@&&%. ",
" #@&@@&$#. #@*****@#...%$...#@&.+$#......##++%%%%+#.+$@&%...+&*******@. .#%$++@*$%#. ",
" .#&*&**$#..#++#.#******&+..#%....+%....................#&@%+....@**&$$@&$#..#@*****$... ",
" ..#.%**&@&***&+.$*******&%%++%$@&$.............##++#..#+......+**&#........$***&&@#. ",
" ..@********@##&*************&%..........+##....+$%#.......+@**%.#++#...%&*@+##.. ",
" .#@@@%%$&**+.+&************%..........%&&@$.....$$#.....+&**&##@**&$%@**&#. ",
" .......+&*&##@***********@...........%$%+@+.....$%.#%$$@***%#@*********%. ",
" .%***&&***********+...............+@#....#$+#+##+@&%#$***@@&***$.. ... ..... ",
" .##..#+#. ..###.#&**************&#........#$#.....%#.....#@.....#$%$&*&%#.#%$+....+%#..+@@%# ",
" #@@$$&*@#..+@&&@+.%&*&&@&*********@+#......+*@$$+..........@#.....#&***%..##... ..$&*&$$&&&@+ ",
" .#@**@**&@&*****&#.####.#%*******@&*&$+....+%+++$$#.....##.%+......&**@#+@&@%...#$******&+... ",
" ..+#.%&****&&***$#.#+$&@&******&+##%@&@#........$+.....%&@%%......@&$#+&****@%$@**@%%$$#. ",
" ..%&&$+##+@**&@&***********&#....%&#..#......#.....@**&%...#+.@+#+&**********$#..... ",
" ..##.. .#&***************&#....+&#.#$........+.#%****%...$*%&@&***@%+$****@#. ",
" .....+&**&@%%$*******&#....+@#.#&&@$@$..#*&&*****#.+#$*******$#...+@@%#. ",
" .#%@$#.+%%##++%&******&#...#@+...+%+$$$%.#&******&.#&&&**&**&$##%%#.......#.. ",
" .###...+&***&#...+@&*********&+...$%.....#.......%&*****%.#@****%%%+#%&**&+. .#%&@+..#+#..",
".##.+@*&%%$******&++$&************%..+&#.....+#.......%@&**&+..#+@**@%%%@*****&+##+@***&$%&*&%#",
"#$&&*&&*****&$$@*******&&&********@..%$.......%%#......#$@++@$%$@&&*************&&***&&***&$$$#",
".#%@@##$**&$#...%****&$##+&*******&#.%$........%@%%%%%$$%#..#+++%$$@@&***&*********&+##%@$#....",
" .......+$+.. ..%&&@+#+@&*********$.+@.........#+++++#.............+&**$+$****&**@#. ..... ",
" ... ..#+#.##..$*************$#&$..........%$@$$%...........#&**@+$&****$+#.. ",
" .#$&*&%#.#$***************$@*$.......+@&@@@$+..........#@***********@# .... ",
" .#$*****@@&**&@%%***********&&*%.....$@%#...............%************&#..#%%#. ",
" ..+#.#$***&&*****&%#+@**************&#....#.................#&*************$%$&**&#... ",
" ..#@*&&&**@+##%&**&+#@*****************@+....................#@&********************&%%@. ",
" .#+%@*&****$#. ..+$%##$*******************&&$%+###............#$&@***********&&**&$+%&***&. ",
" #$&*&%#%@&$#...##....+&**@%@***************@@@&&&@@$+#......#%@**@&*********&@@$%#...+@@%%. ",
" ..#++....#....%&&@%+%&**%#+&***********&%@*@##&&@&***&@%%%%$&****&$********@$@#... ..... ",
" .%*********@#$************&@+&&@$.&*+%****************&%@&**&@$@$#. ",
" .#&**&&****&#+&***&*******&+$&*$#$%&*$$*$&***&**********&@@@@$@&*@+###++#. ",
" ....#@**$##+$&$+.@**&+%&********&&*%.#@&&@@*@$*&&***************$+#@***&&&**$.. ",
" .#%%$&**%.. .....+**&#+&***********@+..#&%+*&$&&+%****************$.+*********%.... ",
" .#@*****@#..#+%+#+&**%#&***&*********&$+.+#.@$#+++&***@***$%@@&&&**&#.%@@@%+%&*&%%%$. ",
" ..#%*&@&&@#..#@**&&&**&#%***%%&**********&@+#.####+&****%***@+####+@*&+...#....#@*****. ",
" #$&*@#.###. .$********%.@**$#@**************&@@@&****&**%$****@$%#.#**$.. .#%%+%.. ",
" #%$%#. #&**@%%$@+.#&*&#$***$%&*****************&$**@#$******@#.&**$#..... .... ",
" ..... .+**$#......%**@#&**$+&**&@&**********&**@%***%#+$@&***%.@***&@@@%#. ",
" ...#@*@#...+%%$&**$#&*&#$**&%@**&$**&$&*&%**&#@***$+..+@**$.+&*******%. ",
" .#%$&**%..#$******&+#&*@.@**$+&**%@**$%**@+***++@****@#.#&*$..#%$$$@**@.. ",
" #@****@#..%****&&&+.#**@#&**+%**@+&**+%**&#@**@+#%&***@#.&*@........%&*%##. ",
" .+*&@@$+. .@**@+###..%**@.@**#%**@#&**++**&++&**&%##$***+.&**%.. ..$**&@+. ",
" ..+@&#.... .&*&#...#+$&**$.$**++**@#@**%.&**@#+&***$.#@*&+.@***$+#.. .#%$@&@# ",
" .$*&$. .#**%..#$*****&#.$**%#@*&+%**&#+&**@##@***#.$*&#.+&*****@+. ....+@% ",
" #++#.. ..$*&+..%***&@%+.#@**$.$**$.@**$.+&**$.#&**%.@*&#..+$@&***@. .## ",
" ..+$**&# .$**@#...+@***+.%**@.+***#.%**&#.@**##@**+. ...#+&*&# ",
" .$****$. .@**+..#@****$..$**@.#&**+.#**&##@*@..@**&+.. .#**+.. ",
" #&*@$+.. .$*@. .@***$#.#%&**%.#&**+.+**$.+**%..+&**&$+.. .@*&%+. ",
" .+*$#.. .@*@. .&**%..#@**&%##@**$.#@*&#.$**$. .+@&**&$. .+@&*&#. ",
" .#@*+. .#&*@. .&*&#..%**&+..$**$#.%**$..%**&#. ..+$**&# ..#%*%. ",
" #&&%. .#@**$. .@*&. .@**$. +**&#..@**%..#&**@#.. ..$**+ ..$@. ",
" #+#.. .+&**&+. .%*&. .$**+. +**@# .$**@#..+@**&%.. .#&*+. ..#. ",
" .$*@%#. .%*&# .+**%. #&*&#..+&*&+. .#%&**%. #&*$#. ",
" .@&#.. ..$**+ .&*$. .$**+. .+&*&+. ..%**$. .%&*@+. ",
" .#@&. ..%**&# .$*&#...@*&#. .+&*&#. .#&*%. ..#%*$. ",
" .$&$. .%**@+. .%**%. .+**$. .$**%. #&*+. ..@@. ",
" #@%#. .$*@#. ..@**+. #**&. .%**+. #&*%.. .+$# ",
" ##.. .%*+. .%**$. .+**$. .%*&# .%&&%. ... ",
" .+*%. #@*$.. .@*@#. .@*$. ..#&&# ",
" #@&+. .$*+. .@*%. .%&@#. .%&# ",
" +&%. .+*%. .$*%. ..%*$. .+@# ",
" ##.. .+*$. .#&&# .#@@. .#. ",
" .$&#. .$&# .@$. ",
" .$%. .@@. .%+. ",
" .#.. .%+. .... ",
" ... "};