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,40 +58,34 @@
#include "gimp-intl.h" #include "gimp-intl.h"
#include "pixmaps/wilber2.xpm"
/* local function prototypes */ /* local function prototypes */
static void gui_threads_enter (Gimp *gimp); static void gui_threads_enter (Gimp *gimp);
static void gui_threads_leave (Gimp *gimp); static void gui_threads_leave (Gimp *gimp);
static void gui_set_busy (Gimp *gimp); static void gui_set_busy (Gimp *gimp);
static void gui_unset_busy (Gimp *gimp); static void gui_unset_busy (Gimp *gimp);
static void gui_message (Gimp *gimp, static void gui_message (Gimp *gimp,
const gchar *message); const gchar *message);
static GimpObject * gui_display_new (GimpImage *gimage, 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, static gboolean gui_exit_callback (Gimp *gimp,
GdkEvent *eevent, gboolean kill_it);
gpointer data); static gboolean gui_exit_finish_callback (Gimp *gimp,
gboolean kill_it);
static gboolean gui_exit_callback (Gimp *gimp, static void gui_really_quit_callback (GtkWidget *button,
gboolean kill_it); gboolean quit,
static gboolean gui_exit_finish_callback (Gimp *gimp, gpointer data);
gboolean kill_it); static void gui_show_tooltips_notify (GObject *config,
static void gui_really_quit_callback (GtkWidget *button, GParamSpec *param_spec,
gboolean quit, Gimp *gimp);
gpointer data); static void gui_display_changed (GimpContext *context,
static void gui_show_tooltips_notify (GObject *config, GimpDisplay *display,
GParamSpec *param_spec, Gimp *gimp);
Gimp *gimp); static void gui_image_disconnect (GimpImage *gimage,
static void gui_display_changed (GimpContext *context, Gimp *gimp);
GimpDisplay *display,
Gimp *gimp);
static void gui_image_disconnect (GimpImage *gimage,
Gimp *gimp);
/* private variables */ /* private variables */
@ -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,24 +1330,22 @@ 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; guint32 closed;
guint32 closed; guint32 num_points;
guint32 num_points; 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; GSList *free_list = NULL;
PathType ptype;
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,34 +854,33 @@ 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 *); xcf_write_int32_check_error (info->fp, (guint32 *) &prop_type, 1);
if (paths_list) /* because we don't know how much room the paths list will take
we save the file position and write the length later
*/
pos = info->cp;
xcf_write_int32_check_error (info->fp, &length, 1);
base = info->cp;
xcf_check_error (xcf_save_old_paths (info, gimage, error));
length = info->cp - base;
/* go back to the saved position and write the length */
xcf_check_error (xcf_seek_pos (info, pos, error));
xcf_write_int32 (info->fp, &length, 1, &tmp_error);
if (tmp_error)
{ {
xcf_write_int32_check_error (info->fp, (guint32 *) &prop_type, 1); g_propagate_error (error, tmp_error);
/* because we don't know how much room the paths list will take return FALSE;
we save the file position and write the length later
*/
pos = info->cp;
xcf_write_int32_check_error (info->fp, &length, 1);
base = info->cp;
xcf_check_error (xcf_save_old_paths (info, paths_list, error));
length = info->cp - base;
/* go back to the saved position and write the length */
xcf_check_error (xcf_seek_pos (info, pos, error));
xcf_write_int32 (info->fp, &length, 1, &tmp_error);
if (tmp_error)
{
g_propagate_error (error, tmp_error);
return FALSE;
}
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:
@ -1379,13 +1380,15 @@ 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)
{ {
guint32 num_paths; GimpVectors *active_vectors;
GSList *slist; guint32 num_paths;
GError *tmp_error = NULL; guint32 active_index = 0;
GList *list;
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 version; guint32 num_points = 0;
GSList *points; guint32 closed = FALSE;
guint32 version;
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);
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); for (strokes = vectors->strokes; strokes; strokes = g_list_next (strokes))
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;
/* type (gint32) g_assert (stroke->closed || ! strokes->next);
* x (float)
* y (float)
*/
xcf_write_int32_check_error (info->fp, &bpt->type, 1); n_anchors = g_list_length (stroke->anchors);
xcf_write_float_check_error (info->fp, &xfloat, 1);
xcf_write_float_check_error (info->fp, &yfloat, 1); 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)
* x (float)
* y (float)
*/
switch (anchor->type)
{
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",
" .+. ",
" .+. .+@# ..+. ",
" #@+. .$@# .%&. ",
" #&+. .&@#. .+&$. ..#. ",
" .++. +*$.. .$*%. .%*%. ..%%. ",
" .$@. #@*%. .#*&. .#&@. .%*%. ",
" .$&+. .#&&+ .%*&# .#&*# #&@.. ",
" .+*&+. .#*&+ .#&*$. .#@*&# #&$. ",
" .+#. ..%&&+. .%*&# .%**+. .$**%. .+&@. ..++. ",
" .%@#. ..@*$. #@*&#. .$**+. #**@.. ..+@*@. .#$&%. ",
" .+&$.. .@*%. .@**%. .#&*@.. #&*@. .%**&+. .%*%.. ",
" #&*@+. #&*@.. .+&*&+. .%**%. .$*&#. #&*&+. .$*#. ",
" .#+.+$*&+. #&*&%.. .+&*&+..#&*&#..+**%. #&*@. ..+&*# ",
" ... .@&...@*%. .%***$#. .%**&# .@**%. #&*@. .@*@. .+@&*&. .... ",
" +%..#&$+..@*@.. ..+@**&+..#&**+ .@**$..#**&# .$*&# #&**@+. .#+@%. ",
" +&%.+*@+#.@**%#.. .#@**@. #&**+.#&**+..%**&. .$*&+ +**$#. .$*@#. ",
" #@&$@**%+#%***@%#...+**&#.+&*@##@**$..%&**$..#&**+ .+**+. .#&&#. ",
" .+@&***@##.%&***&%. #&*&#.@*&+#@**$.#@**&%..#$**&+ .%*&# ..#+$*%. ",
" ..+&**&#...#+&**&#.#&*$.%**@.#&**+.%**&+.#$&***$. .$*&# .#$&**&+. ",
" .@***%.....+&**+.%**+.%**@.#&**+.$**@..@***&%#..+&*&# .%***@%. ",
" ... .$***@......$**+.@**+.+***+.@**$.%**@.+&**$#..#%&**&#..$**%#.. ..... ",
" #$#. .$***&%.....#@*#.@**@#.$**&+#&**+#&*&#+**&#.%&*****%.#$@*@.. ..%@&+ ",
" #@@++#.. .$****&$+....#$#.%***@+#$**&+%**@.$**+#&*@.#&***&@%#%$+$*%. .%*&%. ",
" .+&*&&$. .@******&%.....++#%&**&+#@**$#***#%**$#&*&#+**&%##+@%##&*+. .#+++@&+.. ",
" .+%$**+..$********$.....#+++@**&+%**&#&**#%**@#@*&#%**$#$&*%..%*&# .+&****$. ",
" ...@*&%#%*****@$@*@#....#&$+&**$+**&+***#@**$#&*&+%**&***@..#&*$. .@***&@#. ",
" .+***&&*****&##+@@+....%&&&**@+**&@**@%***+$**&+$*****@#..#@%#..+&*@+#.. ",
" .@**********%..#@&+...#&$%&*&@**&**&@***@%&***&*****&+.........$*&#. ",
" ... ..+++%&*****@...#&@...#&@##@*********************@%&%....++###$**$. ..##.. ",
" +$+..#.. ..+*****&#...+&+..+@&$.#&@%+%$$@&&**&***&&@$+#%&#...$&*&&&**&+. .....#@&&%. ",
" #@&@@&$#. #@*****@#...%$...#@&.+$#......##++%%%%+#.+$@&%...+&*******@. .#%$++@*$%#. ",
" .#&*&**$#..#++#.#******&+..#%....+%....................#&@%+....@**&$$@&$#..#@*****$... ",
" ..#.%**&@&***&+.$*******&%%++%$@&$.............##++#..#+......+**&#........$***&&@#. ",
" ..@********@##&*************&%..........+##....+$%#.......+@**%.#++#...%&*@+##.. ",
" .#@@@%%$&**+.+&************%..........%&&@$.....$$#.....+&**&##@**&$%@**&#. ",
" .......+&*&##@***********@...........%$%+@+.....$%.#%$$@***%#@*********%. ",
" .%***&&***********+...............+@#....#$+#+##+@&%#$***@@&***$.. ... ..... ",
" .##..#+#. ..###.#&**************&#........#$#.....%#.....#@.....#$%$&*&%#.#%$+....+%#..+@@%# ",
" #@@$$&*@#..+@&&@+.%&*&&@&*********@+#......+*@$$+..........@#.....#&***%..##... ..$&*&$$&&&@+ ",
" .#@**@**&@&*****&#.####.#%*******@&*&$+....+%+++$$#.....##.%+......&**@#+@&@%...#$******&+... ",
" ..+#.%&****&&***$#.#+$&@&******&+##%@&@#........$+.....%&@%%......@&$#+&****@%$@**@%%$$#. ",
" ..%&&$+##+@**&@&***********&#....%&#..#......#.....@**&%...#+.@+#+&**********$#..... ",
" ..##.. .#&***************&#....+&#.#$........+.#%****%...$*%&@&***@%+$****@#. ",
" .....+&**&@%%$*******&#....+@#.#&&@$@$..#*&&*****#.+#$*******$#...+@@%#. ",
" .#%@$#.+%%##++%&******&#...#@+...+%+$$$%.#&******&.#&&&**&**&$##%%#.......#.. ",
" .###...+&***&#...+@&*********&+...$%.....#.......%&*****%.#@****%%%+#%&**&+. .#%&@+..#+#..",
".##.+@*&%%$******&++$&************%..+&#.....+#.......%@&**&+..#+@**@%%%@*****&+##+@***&$%&*&%#",
"#$&&*&&*****&$$@*******&&&********@..%$.......%%#......#$@++@$%$@&&*************&&***&&***&$$$#",
".#%@@##$**&$#...%****&$##+&*******&#.%$........%@%%%%%$$%#..#+++%$$@@&***&*********&+##%@$#....",
" .......+$+.. ..%&&@+#+@&*********$.+@.........#+++++#.............+&**$+$****&**@#. ..... ",
" ... ..#+#.##..$*************$#&$..........%$@$$%...........#&**@+$&****$+#.. ",
" .#$&*&%#.#$***************$@*$.......+@&@@@$+..........#@***********@# .... ",
" .#$*****@@&**&@%%***********&&*%.....$@%#...............%************&#..#%%#. ",
" ..+#.#$***&&*****&%#+@**************&#....#.................#&*************$%$&**&#... ",
" ..#@*&&&**@+##%&**&+#@*****************@+....................#@&********************&%%@. ",
" .#+%@*&****$#. ..+$%##$*******************&&$%+###............#$&@***********&&**&$+%&***&. ",
" #$&*&%#%@&$#...##....+&**@%@***************@@@&&&@@$+#......#%@**@&*********&@@$%#...+@@%%. ",
" ..#++....#....%&&@%+%&**%#+&***********&%@*@##&&@&***&@%%%%$&****&$********@$@#... ..... ",
" .%*********@#$************&@+&&@$.&*+%****************&%@&**&@$@$#. ",
" .#&**&&****&#+&***&*******&+$&*$#$%&*$$*$&***&**********&@@@@$@&*@+###++#. ",
" ....#@**$##+$&$+.@**&+%&********&&*%.#@&&@@*@$*&&***************$+#@***&&&**$.. ",
" .#%%$&**%.. .....+**&#+&***********@+..#&%+*&$&&+%****************$.+*********%.... ",
" .#@*****@#..#+%+#+&**%#&***&*********&$+.+#.@$#+++&***@***$%@@&&&**&#.%@@@%+%&*&%%%$. ",
" ..#%*&@&&@#..#@**&&&**&#%***%%&**********&@+#.####+&****%***@+####+@*&+...#....#@*****. ",
" #$&*@#.###. .$********%.@**$#@**************&@@@&****&**%$****@$%#.#**$.. .#%%+%.. ",
" #%$%#. #&**@%%$@+.#&*&#$***$%&*****************&$**@#$******@#.&**$#..... .... ",
" ..... .+**$#......%**@#&**$+&**&@&**********&**@%***%#+$@&***%.@***&@@@%#. ",
" ...#@*@#...+%%$&**$#&*&#$**&%@**&$**&$&*&%**&#@***$+..+@**$.+&*******%. ",
" .#%$&**%..#$******&+#&*@.@**$+&**%@**$%**@+***++@****@#.#&*$..#%$$$@**@.. ",
" #@****@#..%****&&&+.#**@#&**+%**@+&**+%**&#@**@+#%&***@#.&*@........%&*%##. ",
" .+*&@@$+. .@**@+###..%**@.@**#%**@#&**++**&++&**&%##$***+.&**%.. ..$**&@+. ",
" ..+@&#.... .&*&#...#+$&**$.$**++**@#@**%.&**@#+&***$.#@*&+.@***$+#.. .#%$@&@# ",
" .$*&$. .#**%..#$*****&#.$**%#@*&+%**&#+&**@##@***#.$*&#.+&*****@+. ....+@% ",
" #++#.. ..$*&+..%***&@%+.#@**$.$**$.@**$.+&**$.#&**%.@*&#..+$@&***@. .## ",
" ..+$**&# .$**@#...+@***+.%**@.+***#.%**&#.@**##@**+. ...#+&*&# ",
" .$****$. .@**+..#@****$..$**@.#&**+.#**&##@*@..@**&+.. .#**+.. ",
" #&*@$+.. .$*@. .@***$#.#%&**%.#&**+.+**$.+**%..+&**&$+.. .@*&%+. ",
" .+*$#.. .@*@. .&**%..#@**&%##@**$.#@*&#.$**$. .+@&**&$. .+@&*&#. ",
" .#@*+. .#&*@. .&*&#..%**&+..$**$#.%**$..%**&#. ..+$**&# ..#%*%. ",
" #&&%. .#@**$. .@*&. .@**$. +**&#..@**%..#&**@#.. ..$**+ ..$@. ",
" #+#.. .+&**&+. .%*&. .$**+. +**@# .$**@#..+@**&%.. .#&*+. ..#. ",
" .$*@%#. .%*&# .+**%. #&*&#..+&*&+. .#%&**%. #&*$#. ",
" .@&#.. ..$**+ .&*$. .$**+. .+&*&+. ..%**$. .%&*@+. ",
" .#@&. ..%**&# .$*&#...@*&#. .+&*&#. .#&*%. ..#%*$. ",
" .$&$. .%**@+. .%**%. .+**$. .$**%. #&*+. ..@@. ",
" #@%#. .$*@#. ..@**+. #**&. .%**+. #&*%.. .+$# ",
" ##.. .%*+. .%**$. .+**$. .%*&# .%&&%. ... ",
" .+*%. #@*$.. .@*@#. .@*$. ..#&&# ",
" #@&+. .$*+. .@*%. .%&@#. .%&# ",
" +&%. .+*%. .$*%. ..%*$. .+@# ",
" ##.. .+*$. .#&&# .#@@. .#. ",
" .$&#. .$&# .@$. ",
" .$%. .@@. .%+. ",
" .#.. .%+. .... ",
" ... "};