mirror of https://github.com/GNOME/gimp.git
358 lines
13 KiB
C
358 lines
13 KiB
C
/**********************************************************************
|
|
Magic numbers
|
|
*********************************************************************/
|
|
|
|
#define PREVIEW_SIZE 128
|
|
#define SCALE_WIDTH 200
|
|
#define ENTRY_WIDTH 60
|
|
#define MAX_LOAD_LINE 256
|
|
#define GR_WIDTH 325
|
|
|
|
#define SINUS 0
|
|
#define COSINUS 1
|
|
#define NONE 2
|
|
|
|
#define FRACTAL_HEADER "Fractal Explorer Plug-In Version 2 - (c) 1997 <cotting@mygale.org>\n"
|
|
#define fractalexplorer_HEADER "Fractal Explorer Plug-In Version 2 - (c) 1997 <cotting@mygale.org>\n"
|
|
|
|
/**********************************************************************
|
|
Types
|
|
*********************************************************************/
|
|
|
|
typedef struct {
|
|
gint fractaltype;
|
|
gdouble xmin;
|
|
gdouble xmax;
|
|
gdouble ymin;
|
|
gdouble ymax;
|
|
gdouble iter;
|
|
gdouble cx;
|
|
gdouble cy;
|
|
gint colormode;
|
|
gdouble redstretch;
|
|
gdouble greenstretch;
|
|
gdouble bluestretch;
|
|
gint redmode;
|
|
gint greenmode;
|
|
gint bluemode;
|
|
gint redinvert;
|
|
gint greeninvert;
|
|
gint blueinvert;
|
|
gint alwayspreview;
|
|
gint language;
|
|
|
|
} explorer_vals_t;
|
|
|
|
typedef struct {
|
|
GtkWidget *preview;
|
|
guchar *wimage;
|
|
gint run;
|
|
} explorer_interface_t;
|
|
|
|
typedef int clrmap[256][3];
|
|
|
|
typedef struct {
|
|
GtkWidget *text;
|
|
GtkAdjustment *data;
|
|
} scaledata;
|
|
|
|
typedef struct _DialogElements DialogElements;
|
|
|
|
|
|
struct _DialogElements {
|
|
GtkWidget *type_mandelbrot;
|
|
GtkWidget *type_julia;
|
|
GtkWidget *type_barnsley1;
|
|
GtkWidget *type_barnsley2;
|
|
GtkWidget *type_barnsley3;
|
|
GtkWidget *type_spider;
|
|
GtkWidget *type_manowar;
|
|
GtkWidget *type_lambda;
|
|
GtkWidget *type_sierpinski;
|
|
scaledata xmin;
|
|
scaledata xmax;
|
|
scaledata ymin;
|
|
scaledata ymax;
|
|
scaledata iter;
|
|
scaledata cx;
|
|
scaledata cy;
|
|
scaledata red;
|
|
scaledata green;
|
|
scaledata blue;
|
|
GtkWidget *redmodecos;
|
|
GtkWidget *redmodesin;
|
|
GtkWidget *redmodenone;
|
|
GtkWidget *greenmodecos;
|
|
GtkWidget *greenmodesin;
|
|
GtkWidget *greenmodenone;
|
|
GtkWidget *bluemodecos;
|
|
GtkWidget *bluemodesin;
|
|
GtkWidget *bluemodenone;
|
|
GtkWidget *redinvert;
|
|
GtkWidget *greeninvert;
|
|
GtkWidget *blueinvert;
|
|
GtkWidget *colormode0;
|
|
GtkWidget *colormode1;
|
|
};
|
|
|
|
|
|
typedef struct DFigObj {
|
|
gchar * name; /* Trailing name of file */
|
|
gchar * filename; /* Filename itself */
|
|
gchar * draw_name;/* Name of the drawing */
|
|
explorer_vals_t opts; /* Options enforced when fig saved */
|
|
GtkWidget *list_item;
|
|
GtkWidget *label_widget;
|
|
GtkWidget *pixmap_widget;
|
|
gint obj_status;
|
|
} fractalexplorerOBJ;
|
|
|
|
|
|
typedef struct GigObj {
|
|
gchar * name; /* Trailing name of file */
|
|
gchar * filename; /* Filename itself */
|
|
gchar * draw_name;/* Name of the drawing */
|
|
gint typus;
|
|
GtkWidget *list_item;
|
|
GtkWidget *label_widget;
|
|
GtkWidget *pixmap_widget;
|
|
gint obj_status;
|
|
} gradientOBJ;
|
|
|
|
typedef struct _fractalexplorerListOptions {
|
|
GtkWidget *query_box;
|
|
GtkWidget *name_entry;
|
|
GtkWidget *list_entry;
|
|
fractalexplorerOBJ * obj;
|
|
gint created;
|
|
} fractalexplorerListOptions;
|
|
|
|
/* States of the object */
|
|
#define fractalexplorer_OK 0x0
|
|
#define fractalexplorer_MODIFIED 0x1
|
|
#define fractalexplorer_READONLY 0x2
|
|
|
|
#define gradient_GRADIENTEDITOR 0x2
|
|
|
|
static fractalexplorerOBJ *current_obj;
|
|
static fractalexplorerOBJ *pic_obj;
|
|
static GtkWidget *delete_dialog = NULL;
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
Declare local functions
|
|
*********************************************************************/
|
|
|
|
/* Gimp interface functions */
|
|
static void query(void);
|
|
static void run(char *name, int nparams, GParam * param, int *nreturn_vals,
|
|
GParam ** return_vals);
|
|
|
|
/* Dialog and fractal functions */
|
|
void explorer(GDrawable * drawable);
|
|
void explorer_render_row(const guchar * src_row, guchar * dest_row, gint row,
|
|
gint row_width, gint bytes);
|
|
void transform(short int *, short int *, short int *, double, double, double);
|
|
gint explorer_dialog(void);
|
|
void dialog_update_preview(void);
|
|
|
|
/* Functions for dialog widgets */
|
|
void dialog_create_value(char *title, GtkTable * table, int row, gdouble * value,
|
|
int left, int right, const char *desc, scaledata * scalevalues);
|
|
void dialog_scale_update(GtkAdjustment * adjustment, gdouble * value);
|
|
void dialog_create_int_value(char *title, GtkTable * table, int row, gdouble * value,
|
|
int left, int right, const char *desc, scaledata * scalevalues);
|
|
void dialog_scale_int_update(GtkAdjustment * adjustment, gdouble * value);
|
|
void dialog_entry_update(GtkWidget * widget, gdouble * value);
|
|
void dialog_close_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_ok_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_cancel_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_step_out_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_step_in_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_undo_zoom_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_redo_zoom_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_redraw_callback(GtkWidget * widget, gpointer data);
|
|
void dialog_reset_callback(GtkWidget * widget, gpointer data);
|
|
GtkWidget *explorer_logo_dialog();
|
|
GtkWidget *explorer_load_dialog();
|
|
void explorer_toggle_update(GtkWidget * widget, gpointer data);
|
|
void set_tooltip(GtkTooltips * tooltips, GtkWidget * widget, const char *desc);
|
|
void dialog_change_scale(void);
|
|
void set_cmap_preview(void);
|
|
void make_color_map(void);
|
|
void create_file_selection();
|
|
void create_load_file_selection();
|
|
void explorer_load();
|
|
void load_button_press(GtkWidget * widget, gpointer data);
|
|
|
|
/* Preview events */
|
|
gint preview_button_press_event(GtkWidget * widget, GdkEventButton * event);
|
|
gint preview_button_release_event(GtkWidget * widget, GdkEventButton * event);
|
|
gint preview_motion_notify_event(GtkWidget * widget, GdkEventButton * event);
|
|
gint preview_leave_notify_event(GtkWidget * widget, GdkEventButton * event);
|
|
gint preview_enter_notify_event(GtkWidget * widget, GdkEventButton * event);
|
|
|
|
|
|
|
|
static gint list_button_press(GtkWidget *widget,GdkEventButton *event,gpointer data);
|
|
static gint new_button_press(GtkWidget *widget,GdkEventButton *bevent,gpointer data);
|
|
static gint fractalexplorer_delete_fractalexplorer_callback(GtkWidget *widget,GdkEventButton *bevent,gpointer data);
|
|
static gint delete_button_press_ok(GtkWidget *widget,gpointer data);
|
|
static gint rescan_button_press(GtkWidget *widget,GdkEventButton *bevent,gpointer data);
|
|
static void fractalexplorer_list_ok_callback (GtkWidget *w, gpointer client_data);
|
|
static void fractalexplorer_list_cancel_callback (GtkWidget *w, gpointer client_data);
|
|
static void fractalexplorer_dialog_edit_list (GtkWidget *lwidget,fractalexplorerOBJ *obj,gint created);
|
|
static GtkWidget *new_fractalexplorer_obj(gchar * name);
|
|
static void fractalexplorer_rescan_cancel_callback (GtkWidget *w, gpointer client_data);
|
|
void clear_list_items(GtkList *list);
|
|
gint fractalexplorer_list_pos(fractalexplorerOBJ *fractalexplorer);
|
|
gint fractalexplorer_list_insert (fractalexplorerOBJ *fractalexplorer);
|
|
GtkWidget* fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj, gchar *label, GtkWidget *pix_widget);
|
|
GtkWidget* fractalexplorer_new_pixmap(GtkWidget *list, char **pixdata);
|
|
static GtkWidget *fractalexplorer_list_add(fractalexplorerOBJ *obj);
|
|
void list_button_update(fractalexplorerOBJ *obj);
|
|
fractalexplorerOBJ *fractalexplorer_new(void);
|
|
void build_list_items(GtkWidget *list);
|
|
/*
|
|
static void fractalexplorer_op_menu_popup(gint button, guint32 activate_time,fractalexplorerOBJ *obj);
|
|
*/
|
|
void plug_in_parse_fractalexplorer_path();
|
|
void fractalexplorer_free(fractalexplorerOBJ * fractalexplorer);
|
|
void fractalexplorer_free_everything(fractalexplorerOBJ * fractalexplorer);
|
|
void fractalexplorer_list_free_all ();
|
|
fractalexplorerOBJ *fractalexplorer_load (gchar *filename, gchar *name);
|
|
static void fractalexplorer_rescan_file_selection_ok(GtkWidget *w, GtkFileSelection *fs, gpointer data);
|
|
void fractalexplorer_list_load_all(GList *plist);
|
|
static GtkWidget *add_objects_list ();
|
|
static GtkWidget *add_gradients_list ();
|
|
static void fractalexplorer_rescan_ok_callback (GtkWidget *w, gpointer client_data);
|
|
static void fractalexplorer_rescan_add_entry_callback (GtkWidget *w, gpointer client_data);
|
|
static void fractalexplorer_rescan_list (void);
|
|
/*
|
|
static void fractalexplorer_op_menu_create(GtkWidget *window);
|
|
*/
|
|
|
|
|
|
/**********************************************************************
|
|
Global variables
|
|
*********************************************************************/
|
|
|
|
double xmin = -2,
|
|
xmax = 1,
|
|
ymin = -1.5,
|
|
ymax = 1.5;
|
|
double xbild,
|
|
ybild,
|
|
xdiff,
|
|
ydiff;
|
|
double x_press = -1.0,
|
|
y_press = -1.0;
|
|
double x_release = -1.0,
|
|
y_release = -1.0;
|
|
float cx = -0.75;
|
|
float cy = -0.2;
|
|
GDrawable *drawable;
|
|
gint tile_width,
|
|
tile_height;
|
|
gint img_width,
|
|
img_height,
|
|
img_bpp;
|
|
gint sel_x1,
|
|
sel_y1,
|
|
sel_x2,
|
|
sel_y2;
|
|
gint sel_width,
|
|
sel_height;
|
|
gint preview_width,
|
|
preview_height;
|
|
GTile *the_tile = NULL;
|
|
double cen_x,
|
|
cen_y;
|
|
double xpos,
|
|
ypos,
|
|
oldxpos = -1,
|
|
oldypos = -1;
|
|
gint do_redsinus,
|
|
do_redcosinus,
|
|
do_rednone;
|
|
gint do_greensinus,
|
|
do_greencosinus,
|
|
do_greennone;
|
|
gint do_bluesinus,
|
|
do_bluecosinus,
|
|
do_bluenone;
|
|
gint do_redinvert,
|
|
do_greeninvert,
|
|
do_blueinvert;
|
|
gint do_colormode1 = FALSE,
|
|
do_colormode2 = FALSE;
|
|
gint do_type0 = FALSE,
|
|
do_type1 = FALSE,
|
|
do_type2 = FALSE,
|
|
do_type3 = FALSE,
|
|
do_type4 = FALSE,
|
|
do_type5 = FALSE,
|
|
do_type6 = FALSE,
|
|
do_type7 = FALSE,
|
|
do_type8 = FALSE,
|
|
do_english = TRUE,
|
|
do_french = FALSE,
|
|
do_german = FALSE;
|
|
GtkWidget *maindlg;
|
|
GtkWidget *logodlg;
|
|
GtkWidget *loaddlg;
|
|
GtkWidget *cmap_preview;
|
|
GtkWidget *cmap_preview_long;
|
|
GtkWidget *cmap_preview_long2;
|
|
GtkWidget *delete_frame_to_freeze;
|
|
GtkWidget *fractalexplorer_gtk_list;
|
|
GtkWidget *save_menu_item;
|
|
GtkWidget *fractalexplorer_op_menu;
|
|
GtkTooltips *tips;
|
|
GdkColor tips_fg,
|
|
tips_bg;
|
|
GdkCursor *MyCursor;
|
|
int ready_now = FALSE;
|
|
explorer_vals_t zooms[100];
|
|
DialogElements *elements = NULL;
|
|
int zoomindex = 1;
|
|
int zoommax = 1;
|
|
gdouble *gg;
|
|
int line_no;
|
|
gchar *filename;
|
|
clrmap colormap;
|
|
GList *fractalexplorer_path_list = NULL;
|
|
GList *fractalexplorer_list = NULL;
|
|
GList *gradient_list = NULL;
|
|
gchar *tpath = NULL;
|
|
fractalexplorerOBJ *fractalexplorer_obj_for_menu;
|
|
static GList *rescan_list = NULL;
|
|
int lng=LNG_GERMAN;
|
|
|
|
|
|
GPlugInInfo PLUG_IN_INFO =
|
|
{
|
|
NULL, /* init_proc */
|
|
NULL, /* quit_proc */
|
|
query, /* query_proc */
|
|
run, /* run_proc */
|
|
};
|
|
|
|
explorer_interface_t wint =
|
|
{
|
|
NULL, /* preview */
|
|
NULL, /* wimage */
|
|
FALSE /* run */
|
|
}; /* wint */
|
|
|
|
static explorer_vals_t wvals =
|
|
{
|
|
0, -2.0, 2.0, -1.5, 1.5, 50.0, -0.75, -0.2, 0, 128.0, 128.0, 128.0, 1, 1, 0, 0, 0, 0, 1, 0,
|
|
}; /* wvals */
|
|
|
|
static explorer_vals_t standardvals =
|
|
{
|
|
0, -2.0, 2.0, -1.5, 1.5, 50.0, -0.75, -0.2, 0, 128.0, 128.0, 128.0, 1, 1, 0, 0, 0, 0, 1, 0,
|
|
}; /* standardvals */
|