Various fixes/enhancements

* plug-ins/common/spheredesigner.c: Various fixes/enhancements

	* plug-ins/gimpressionist/Makefile.am
        * plug-ins/gimpressionist/ChangeLog
        * plug-ins/gimpressionist/*.[ch]: Added Color options (new file color.c)
This commit is contained in:
Vidar Madsen/gimpressionist 1999-09-09 20:28:34 +00:00
parent d8498e3087
commit 6439161e80
13 changed files with 282 additions and 59 deletions

View File

@ -1,3 +1,11 @@
Thu Sep 9 22:23:06 CET 1999 vidar@prosalg.no (Vidar Madsen)
* plug-ins/common/spheredesigner.c: Various fixes/enhancements
* plug-ins/gimpressionist/ChangeLog
* plug-ins/gimpressionist/Makefile.am
* plug-ins/gimpressionist/*.[ch]: Added Color options (new file color.c)
1999-09-09 Tomas Ogren <stric@ing.umu.se>
* app/Makefile.am: Add the path_tool* here, makes gimp compile

View File

@ -5,15 +5,18 @@
* SphereDesigner v0.4 - creates textured spheres
* by Vidar Madsen <vidar@prosalg.no>
*
* Status: Aug 31 1999 - Messy source, will clean up later.
* Status: Last updated 1999-09-09
*
* Known issues:
* - Crash if you click OK or Cancel before first preview is rendered
* - Phong might look weird with transparent textures
*
* Todo:
* - Editing of lights
* - Saving / Loading of presets
* - Transparency in textures (preliminary work started)
* - Antialiasing
* - Global controls: Gamma, ++
* - Beautification of GUI
* - Clean up messy source (lots of Glade remnants)
* - (Probably more. ;-)
*/
@ -118,6 +121,7 @@ typedef struct {
vector color1, color2;
gradient gradient;
vector ambient, diffuse;
double oscale;
vector scale, translate, rotate;
image image;
vector reflection;
@ -264,6 +268,7 @@ GtkWidget *texturelist = NULL;
GtkObject *scalexscale,*scaleyscale,*scalezscale;
GtkObject *rotxscale,*rotyscale,*rotzscale;
GtkObject *posxscale,*posyscale,*poszscale;
GtkObject *scalescale;
GtkObject *turbulencescale;
GtkObject *amountscale;
GtkObject *expscale;
@ -272,7 +277,6 @@ GtkWidget *texturemenu_menu;
GtkWidget *typemenu;
GtkWidget *texturemenu;
#define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2])
#define B 256
@ -1029,6 +1033,7 @@ void objcolor(vector *col, vector *p, common *obj)
case TRANSPARENT:
case SMOKE:
/* Silently ignore non-color textures */
continue;
break;
default:
fprintf(stderr, "Warning: unknown texture %d\n", t->type);
@ -1228,8 +1233,8 @@ void calclight(vector *col, vector *point, common *obj)
if(obj->texture[j].type == PHONG) continue;
if(obj->texture[j].type == REFLECTION) continue;
if(obj->texture[j].type == REFRACTION) continue;
if(obj->texture[i].type == TRANSPARENT) continue;
if(obj->texture[i].type == SMOKE) continue;
if(obj->texture[j].type == TRANSPARENT) continue;
if(obj->texture[j].type == SMOKE) continue;
vcopy(&lcol, &pcol);
vvmul(&lcol, &world.light[i].color);
vvmul(&lcol, &obj->texture[j].diffuse);
@ -1364,8 +1369,11 @@ int traceray(ray *r, vector *col, int level, double imp)
if((world.quality >= 4) && ((bobj->texture[i].type == REFLECTION) || (bobj->texture[i].type == PHONG))) {
vector refcol, norm;
vector refcol, norm, ocol;
ray ref;
objcolor(&ocol, &p, bobj);
vcopy(&ref.v1, &p);
vcopy(&ref.v2, &r->v1);
ref.inside = r->inside;
@ -1387,11 +1395,13 @@ int traceray(ray *r, vector *col, int level, double imp)
if((world.quality >= 5) && (bobj->texture[i].type == REFLECTION)) {
traceray(&ref, &refcol, level - 1, imp * vmax(&bobj->texture[i].reflection));
vvmul(&refcol, &bobj->texture[i].reflection);
refcol.w = ocol.w;
vadd(col, &refcol);
}
if(bobj->texture[i].type == PHONG) {
vcset(&refcol,0,0,0,0);
calcphong(bobj, &ref, &refcol);
refcol.w = ocol.w;
vadd(col, &refcol);
}
@ -1543,6 +1553,7 @@ void setdefaults(texture *t)
vset(&t->scale,1,1,1);
vset(&t->rotate,0,0,0);
vset(&t->translate,0,0,0);
t->oscale = 1.0;
t->amount = 1.0;
t->exp = 1.0;
}
@ -1609,6 +1620,8 @@ void setvals(texture *t)
noupdate = 1;
gtk_adjustment_set_value(GTK_ADJUSTMENT(amountscale), t->amount);
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalescale), t->oscale);
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalexscale), t->scale.x);
gtk_adjustment_set_value(GTK_ADJUSTMENT(scaleyscale), t->scale.y);
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalezscale), t->scale.z);
@ -1769,17 +1782,20 @@ void initworld(void)
if(t->majtype == 0) { /* Normal texture */
if(t->type == PHONG) {
memcpy(&t->phongcolor, &t->color1, sizeof(t->color1));
t->phongsize = t->scale.x / 25.0;
t->phongsize = t->oscale / 25.0;
}
memcpy(&d->texture[d->numtexture],t,sizeof(texture));
vmul(&d->texture[d->numtexture].scale, d->texture[d->numtexture].oscale);
d->numtexture++;
} else if(t->majtype == 1) { /* Bumpmap */
memcpy(&d->normal[d->numnormal],t,sizeof(texture));
vmul(&d->normal[d->numnormal].scale, d->texture[d->numnormal].oscale);
d->numnormal++;
} else if(t->majtype == 2) { /* Lightsource */
light l;
vcopy(&l.a, &t->translate);
vcopy(&l.color, &t->color1);
vmul(&l.color, t->amount);
memcpy(&world.light[world.numlight], &l, sizeof(l));
world.numlight++;
}
@ -1858,6 +1874,7 @@ void getscales(GtkWidget *wg, gpointer data)
f = GTK_ADJUSTMENT(turbulencescale)->value;
vset(&t->turbulence, f,f,f);
t->oscale = GTK_ADJUSTMENT(scalescale)->value;
t->scale.x = GTK_ADJUSTMENT(scalexscale)->value;
t->scale.y = GTK_ADJUSTMENT(scaleyscale)->value;
t->scale.z = GTK_ADJUSTMENT(scalezscale)->value;
@ -2049,7 +2066,7 @@ void sphere_ok(GtkWidget *widget, gpointer data)
void sphere_cancel(GtkWidget *widget, gpointer data)
{
gtk_widget_destroy (GTK_WIDGET (data));
gtk_widget_hide (GTK_WIDGET (data));
gtk_main_quit();
}
@ -2099,7 +2116,7 @@ GtkWidget* makewindow (void)
gtk_object_set_data (GTK_OBJECT (window), "window", window);
gtk_container_border_width (GTK_CONTAINER (window), 5);
gtk_window_set_title (GTK_WINDOW (window), "SphereDesigner");
gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
table1 = gtk_table_new (3, 3, FALSE);
gtk_object_set_data (GTK_OBJECT (window), "table1", table1);
@ -2195,7 +2212,7 @@ GtkWidget* makewindow (void)
gtk_signal_connect (GTK_OBJECT (resetbutton), "clicked",
GTK_SIGNAL_FUNC (sphere_reset), window);
frame4 = gtk_frame_new ("Properties");
frame4 = gtk_frame_new ("Texture Properties");
gtk_object_set_data (GTK_OBJECT (window), "frame4", frame4);
gtk_widget_show (frame4);
gtk_table_attach (GTK_TABLE (table1), frame4, 2, 3, 0, 1,
@ -2258,6 +2275,23 @@ GtkWidget* makewindow (void)
gtk_widget_show(tmpw);
drawcolor2(tmpw);
label5 = gtk_label_new ("Scale:");
gtk_object_set_data (GTK_OBJECT (window), "label5", label5);
gtk_widget_show (label5);
gtk_table_attach (GTK_TABLE (table2), label5, 0, 1, 3, 4,
(GtkAttachOptions) GTK_EXPAND | GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0);
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scalescale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_widget_show (_scalescale);
gtk_table_attach (GTK_TABLE (table2), _scalescale, 1, 2, 3, 4,
(GtkAttachOptions) GTK_EXPAND | GTK_FILL, (GtkAttachOptions) GTK_EXPAND, 0, 0);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_signal_connect(GTK_OBJECT(scalescale), "value_changed",
(GtkSignalFunc)getscales, NULL);
label5 = gtk_label_new ("Turbulence:");
gtk_object_set_data (GTK_OBJECT (window), "label5", label5);
gtk_widget_show (label5);
@ -2266,6 +2300,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
_turbulencescale = gtk_hscale_new (GTK_ADJUSTMENT (turbulencescale = gtk_adjustment_new (0.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_turbulencescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_turbulencescale", _turbulencescale);
gtk_widget_show (_turbulencescale);
gtk_table_attach (GTK_TABLE (table2), _turbulencescale, 1, 2, 4, 5,
@ -2274,10 +2309,6 @@ GtkWidget* makewindow (void)
gtk_signal_connect(GTK_OBJECT(turbulencescale), "value_changed",
(GtkSignalFunc)getscales, NULL);
label6 = gtk_label_new ("Scale X:");
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
gtk_widget_show (label6);
@ -2286,6 +2317,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scalexscale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_widget_show (_scalescale);
@ -2302,6 +2334,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scaleyscale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_widget_show (_scalescale);
@ -2318,6 +2351,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scalezscale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_widget_show (_scalescale);
@ -2336,6 +2370,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_rotscale = gtk_hscale_new (GTK_ADJUSTMENT (rotxscale = gtk_adjustment_new (1.0, 0.0, 360.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_rotscale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
gtk_widget_show (_rotscale);
@ -2352,6 +2387,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_rotscale = gtk_hscale_new (GTK_ADJUSTMENT (rotyscale = gtk_adjustment_new (1.0, 0.0, 360.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_rotscale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
gtk_widget_show (_rotscale);
@ -2368,6 +2404,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_rotscale = gtk_hscale_new (GTK_ADJUSTMENT (rotzscale = gtk_adjustment_new (1.0, 0.0, 360.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_rotscale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
gtk_widget_show (_rotscale);
@ -2376,8 +2413,6 @@ GtkWidget* makewindow (void)
gtk_signal_connect(GTK_OBJECT(rotzscale), "value_changed",
(GtkSignalFunc)getscales, NULL);
label6 = gtk_label_new ("Pos X:");
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
gtk_widget_show (label6);
@ -2386,6 +2421,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (posxscale = gtk_adjustment_new (0.0, -20.0, 20.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_widget_show (_scalescale);
@ -2402,6 +2438,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (posyscale = gtk_adjustment_new (1.0, -20.0, 20.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_widget_show (_scalescale);
@ -2418,6 +2455,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (poszscale = gtk_adjustment_new (1.0, -20.0, 20.1, 0.1, 0.1, 0.1)));
gtk_widget_set_usize(_scalescale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
gtk_widget_show (_scalescale);
@ -2426,11 +2464,6 @@ GtkWidget* makewindow (void)
gtk_signal_connect(GTK_OBJECT(poszscale), "value_changed",
(GtkSignalFunc)getscales, NULL);
typemenu = gtk_option_menu_new ();
gtk_object_set_data (GTK_OBJECT (window), "typemenu", typemenu);
gtk_widget_show (typemenu);
@ -2476,6 +2509,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5);
_amountscale = gtk_hscale_new (GTK_ADJUSTMENT (amountscale = gtk_adjustment_new (1.0, 0, 1.01, .01, .01, .01)));
gtk_widget_set_usize(_amountscale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_amountscale", _amountscale);
gtk_widget_show (_amountscale);
gtk_table_attach (GTK_TABLE (table2), _amountscale, 1, 2, 5, 6,
@ -2492,6 +2526,7 @@ GtkWidget* makewindow (void)
gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
_expscale = gtk_hscale_new (GTK_ADJUSTMENT (expscale = gtk_adjustment_new (1.0, 0, 1.01, .01, .01, .01)));
gtk_widget_set_usize(_expscale, 100, -1);
gtk_object_set_data (GTK_OBJECT (window), "_expscale", _expscale);
gtk_widget_show (_expscale);
gtk_table_attach (GTK_TABLE (table2), _expscale, 1, 2, 6, 7,

View File

@ -1,6 +1,20 @@
(The events are in chronological order, latest first)
September 9 1999:
- Added the Color page, with two color sampling schemes and
color noise.
August 29 1999:
- Big rewrite of many internals to get rid of the clumsy
"struct rgbcolor"
August 26 1999:
- GIMPressionist is included in the CVS GIMP-development tree
- Fixed a //-style comment in repaint.c
- Renamed buffer in sizemap.c (it was also declared in orientmap.c)
August 23 1999:
- Released 0.99.5
- Added the missing Shadow controls
- Fixed the applybrush() function. (It was foobar with regards to
shadow handling.) It's still shaky when using Tilable, though...

View File

@ -26,7 +26,8 @@ gimpressionist_SOURCES = \
preview.c \
repaint.c \
size.c \
sizemap.c
sizemap.c \
color.c
AM_CPPFLAGS = \
-DDEFAULTPATH=\""~/$(gimpdir)/gimpressionist:$(gimpdatadir)/gimpressionist"\"

View File

@ -0,0 +1,127 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#else
#define HAVE_DIRENT_H
#define HAVE_UNISTD_H
#endif
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
#include <sys/types.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "gimpressionist.h"
#include "ppmtool.h"
#define NUMCOLORRADIO 2
GtkWidget *colorradio[NUMCOLORRADIO];
GtkObject *colornoiseadjust = NULL;
void colorchange(GtkWidget *wg, void *d, int num)
{
int n;
if(wg) {
n = (long)d;
pcvals.colortype = n;
} else {
int i;
n = num;
for(i = 0; i < NUMCOLORRADIO; i++)
if(i != n)
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(colorradio[i]), FALSE);
else
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(colorradio[n]), TRUE);
}
}
void create_colorpage(GtkNotebook *notebook)
{
GtkWidget *box0, *box1, *box2, *box3, *thispage;
GtkWidget *labelbox, *menubox;
GtkWidget *tmpw;
char title[100];
int i;
sprintf(title, "Color");
labelbox = gtk_hbox_new (FALSE, 0);
tmpw = gtk_label_new(title);
gtk_box_pack_start(GTK_BOX(labelbox), tmpw, FALSE, FALSE, 0);
gtk_widget_show_all(labelbox);
menubox = gtk_hbox_new (FALSE, 0);
tmpw = gtk_label_new(title);
gtk_box_pack_start(GTK_BOX(menubox), tmpw, FALSE, FALSE, 0);
gtk_widget_show_all(menubox);
thispage = gtk_vbox_new(FALSE, 0);
gtk_container_border_width (GTK_CONTAINER (thispage), 5);
gtk_widget_show(thispage);
box0 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(thispage), box0,FALSE,FALSE,0);
gtk_widget_show (box0);
box1 = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(box0), box1,FALSE,FALSE,0);
gtk_widget_show (box1);
box2 = gtk_vbox_new (TRUE, 0);
gtk_box_pack_start(GTK_BOX(box1), box2,FALSE,FALSE,0);
gtk_widget_show (box2);
tmpw = gtk_label_new("Color:");
gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
gtk_widget_show (tmpw);
box3 = gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(box1), box3,FALSE,FALSE, 10);
gtk_widget_show(box3);
i = pcvals.colortype;
colorradio[0] = tmpw = gtk_radio_button_new_with_label(NULL, "Average under brush");
gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
gtk_widget_show(tmpw);
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), FALSE);
gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
(GtkSignalFunc)colorchange, (void *)0);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, "Color is computed from the average of all pixels under the brush", NULL);
if(i == 0)
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), TRUE);
colorradio[1] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), "Center of brush");
gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), FALSE);
gtk_widget_show(tmpw);
gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
(GtkSignalFunc)colorchange, (void *)1);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, "Samples the color from the pixel in the center of the brush", NULL);
if(i == 1)
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), TRUE);
box1 = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(box0), box1,FALSE,FALSE,0);
gtk_widget_show (box1);
tmpw = gtk_label_new("Color noise:");
gtk_box_pack_start(GTK_BOX(box1), tmpw,FALSE,FALSE,0);
gtk_widget_show (tmpw);
colornoiseadjust = gtk_adjustment_new(pcvals.colornoise, 0.0, 101.0, 1.0, 1.0, 1.0);
tmpw = gtk_hscale_new(GTK_ADJUSTMENT(colornoiseadjust));
gtk_widget_set_usize (GTK_WIDGET(tmpw), 150, 30);
gtk_scale_set_draw_value (GTK_SCALE (tmpw), TRUE);
gtk_scale_set_digits(GTK_SCALE (tmpw), 1);
gtk_box_pack_start (GTK_BOX (box1), tmpw, FALSE, FALSE, 10);
gtk_widget_show (tmpw);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, "Adds random noise to the color", NULL);
gtk_notebook_append_page_menu (notebook, thispage, labelbox, menubox);
}

View File

@ -72,7 +72,9 @@ gimpressionist_vals_t defaultpcvals = {
0,
10,
4
4,
0, 0.0
};
static GDrawable *drawable;

View File

@ -154,6 +154,7 @@ void storevals(void)
pcvals.devthresh = GTK_ADJUSTMENT(devthreshadjust)->value;
pcvals.placecenter = GTK_TOGGLE_BUTTON(placecenter)->active;
pcvals.paperoverlay = GTK_TOGGLE_BUTTON(paperoverlay)->active;
pcvals.colornoise = GTK_ADJUSTMENT(colornoiseadjust)->value;
}
void restorevals(void)
@ -197,6 +198,9 @@ void restorevals(void)
drawcolor(NULL);
gtk_adjustment_set_value(GTK_ADJUSTMENT(colornoiseadjust), pcvals.colornoise);
colorchange(NULL, NULL, pcvals.colortype);
update_orientmap_dialog();
}
@ -463,6 +467,7 @@ int create_dialog(void)
create_orientationpage(GTK_NOTEBOOK (notebook));
create_sizepage(GTK_NOTEBOOK (notebook));
create_placementpage(GTK_NOTEBOOK (notebook));
create_colorpage(GTK_NOTEBOOK (notebook));
create_generalpage(GTK_NOTEBOOK (notebook));
create_presetpage(GTK_NOTEBOOK (notebook));

View File

@ -1,7 +1,5 @@
#include <gtk/gtk.h>
#include "libgimp/gimpmath.h"
#define PLUG_IN_NAME "plug_in_gimpressionist"
#define PLUG_IN_VERSION "v0.99.6, August 1999"
@ -13,6 +11,14 @@
#define MAXORIENTVECT 50
#define MAXSIZEVECT 50
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif /* M_PI */
#ifndef M_PI_2
#define M_PI_2 (M_PI / 2.0)
#endif /* M_PI_2 */
/* Type declaration and definitions */
struct vector_t {
@ -75,7 +81,8 @@ typedef struct {
int generalshadowdepth;
int generalshadowblur;
int coloracc;
int colortype;
double colornoise;
} gimpressionist_vals_t;
/* Globals */
@ -131,7 +138,9 @@ extern GtkObject *generalshadowadjust;
extern GtkObject *generalshadowdepth;
extern GtkObject *generalshadowblur;
extern GtkObject *devthreshadjust;
extern GtkObject *coloraccadjust;
extern GtkWidget *colortype;
extern GtkObject *colornoiseadjust;
extern GtkWidget *placecenter;
@ -154,6 +163,7 @@ void create_sizepage(GtkNotebook *);
void create_generalpage(GtkNotebook *);
void create_presetpage(GtkNotebook *);
void create_placementpage(GtkNotebook *);
void create_colorpage(GtkNotebook *);
GtkWidget* create_preview();
void updatepreviewprev(GtkWidget *wg, void *d);
@ -170,6 +180,7 @@ void drawcolor(GtkWidget *w);
void orientchange(GtkWidget *wg, void *d, int num);
void sizechange(GtkWidget *wg, void *d, int num);
void placechange(GtkWidget *wg, void *d, int num);
void colorchange(GtkWidget *wg, void *d, int num);
void generalbgchange(GtkWidget *wg, void *d, int num);
void reloadbrush(char *fn, struct ppm *p);

View File

@ -34,12 +34,12 @@ int numvect = 0;
double degtorad(double d)
{
return d/180.0*G_PI;
return d/180.0*M_PI;
}
double radtodeg(double d)
{
double v = d/G_PI*180.0;
double v = d/M_PI*180.0;
if(v < 0.0) v += 360;
return v;
}
@ -117,18 +117,18 @@ double getdir(double x, double y, int from)
} else if(vec[i].type == 1) {
double a = atan2(vec[i].dy, vec[i].dx);
a -= atan2(y-vec[i].y, x-vec[i].x);
tx = sin(a+G_PI_2);
ty = cos(a+G_PI_2);
tx = sin(a+M_PI_2);
ty = cos(a+M_PI_2);
} else if(vec[i].type == 2) {
double a = atan2(vec[i].dy, vec[i].dx);
a += atan2(y-vec[i].y, x-vec[i].x);
tx = sin(a+G_PI_2);
ty = cos(a+G_PI_2);
tx = sin(a+M_PI_2);
ty = cos(a+M_PI_2);
} else if(vec[i].type == 3) {
double a = atan2(vec[i].dy, vec[i].dx);
a -= atan2(y-vec[i].y, x-vec[i].x)*2;
tx = sin(a+G_PI_2);
ty = cos(a+G_PI_2);
tx = sin(a+M_PI_2);
ty = cos(a+M_PI_2);
}
dst = dist(x,y,vec[i].x,vec[i].y);

View File

@ -332,7 +332,7 @@ void freerotate(struct ppm *p, double amount)
double nx, ny;
double R, a;
struct ppm tmp = {0,0,NULL};
double f = amount*G_PI*2/360.0;
double f = amount*M_PI*2/360.0;
int rowstride = p->width * 3;
a = p->width/(float)p->height;

View File

@ -245,6 +245,11 @@ void setval(char *key, char *val)
pcvals.sizestrexp = atof(val);
else if(!strcmp(key, "sizevoronoi"))
pcvals.sizevoronoi = atoi(val);
else if(!strcmp(key, "colortype"))
pcvals.colortype = atoi(val);
else if(!strcmp(key, "colornoise"))
pcvals.colornoise = atof(val);
}
int loadpreset(char *fn)
@ -497,6 +502,9 @@ void savepreset(GtkWidget *wg, GtkWidget *p)
fprintf(f, "sizestrexp=%f\n", pcvals.sizestrexp);
fprintf(f, "sizevoronoi=%d\n", pcvals.sizevoronoi);
fprintf(f, "colortype=%d\n", pcvals.colortype);
fprintf(f, "colornoise=%f\n", pcvals.colornoise);
fclose(f);
presetsrefresh();
reselect(presetlist, fname);

View File

@ -85,7 +85,7 @@ void updatepreviewprev(GtkWidget *wg, void *d)
for(i = 0; i < PREVIEWSIZE; i++) {
memset(buf,0,PREVIEWSIZE*3);
/* for(j = 0; j < p.width; j++) */
//for(j = 0; j < p.width; j++)
gtk_preview_draw_row(GTK_PREVIEW(previewprev), (guchar *)&p.col[i*PREVIEWSIZE*3], 0, i, PREVIEWSIZE);
}
killppm(&p);

View File

@ -717,6 +717,7 @@ void repaint(struct ppm *p, struct ppm *a)
thissum = brushsum[n];
/* Calculate color - avg. of in-brush pixels */
if(runningvals.colortype == 0) {
r = g = b = 0;
for(y = 0; y < brush->height; y++) {
guchar *row = &p->col[(ty+y)*p->width*3];
@ -734,13 +735,24 @@ void repaint(struct ppm *p, struct ppm *a)
r = r * 255.0 / thissum;
g = g * 255.0 / thissum;
b = b * 255.0 / thissum;
/* Color = center pixel - Looks bad... */
/*
r = p->col[ty+brush->height/2][tx+brush->width/2].r;
g = p->col[ty+brush->height/2][tx+brush->width/2].g;
b = p->col[ty+brush->height/2][tx+brush->width/2].b;
*/
} else if(runningvals.colortype == 1) {
guchar *pixel = &p->col[(ty+brush->height/2)*p->width*3 + (tx+brush->width)*3];
r = pixel[0];
g = pixel[1];
b = pixel[2];
} else {
/* No such colortype! */
r = g = b = 0;
}
if(runningvals.colornoise > 0.0) {
double v = runningvals.colornoise;
r = r + rand() / (float)RAND_MAX * v - v/2;
g = g + rand() / (float)RAND_MAX * v - v/2;
b = b + rand() / (float)RAND_MAX * v - v/2;
if(r < 0) r = 0; else if(r > 255) r = 255;
if(g < 0) g = 0; else if(g > 255) g = 255;
if(b < 0) b = 0; else if(b > 255) b = 255;
}
applybrush(brush, shadow, &tmp, &atmp, tx,ty, r,g,b);
if(runningvals.generaltileable && runningvals.generalpaintedges) {