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:
@ -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>
|
1999-09-09 Tomas Ogren <stric@ing.umu.se>
|
||||||
|
|
||||||
* app/Makefile.am: Add the path_tool* here, makes gimp compile
|
* app/Makefile.am: Add the path_tool* here, makes gimp compile
|
||||||
|
@ -5,15 +5,18 @@
|
|||||||
* SphereDesigner v0.4 - creates textured spheres
|
* SphereDesigner v0.4 - creates textured spheres
|
||||||
* by Vidar Madsen <vidar@prosalg.no>
|
* 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:
|
* Todo:
|
||||||
* - Editing of lights
|
|
||||||
* - Saving / Loading of presets
|
* - Saving / Loading of presets
|
||||||
* - Transparency in textures (preliminary work started)
|
|
||||||
* - Antialiasing
|
* - Antialiasing
|
||||||
* - Global controls: Gamma, ++
|
* - Global controls: Gamma, ++
|
||||||
* - Beautification of GUI
|
* - Beautification of GUI
|
||||||
|
* - Clean up messy source (lots of Glade remnants)
|
||||||
* - (Probably more. ;-)
|
* - (Probably more. ;-)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -118,6 +121,7 @@ typedef struct {
|
|||||||
vector color1, color2;
|
vector color1, color2;
|
||||||
gradient gradient;
|
gradient gradient;
|
||||||
vector ambient, diffuse;
|
vector ambient, diffuse;
|
||||||
|
double oscale;
|
||||||
vector scale, translate, rotate;
|
vector scale, translate, rotate;
|
||||||
image image;
|
image image;
|
||||||
vector reflection;
|
vector reflection;
|
||||||
@ -264,6 +268,7 @@ GtkWidget *texturelist = NULL;
|
|||||||
GtkObject *scalexscale,*scaleyscale,*scalezscale;
|
GtkObject *scalexscale,*scaleyscale,*scalezscale;
|
||||||
GtkObject *rotxscale,*rotyscale,*rotzscale;
|
GtkObject *rotxscale,*rotyscale,*rotzscale;
|
||||||
GtkObject *posxscale,*posyscale,*poszscale;
|
GtkObject *posxscale,*posyscale,*poszscale;
|
||||||
|
GtkObject *scalescale;
|
||||||
GtkObject *turbulencescale;
|
GtkObject *turbulencescale;
|
||||||
GtkObject *amountscale;
|
GtkObject *amountscale;
|
||||||
GtkObject *expscale;
|
GtkObject *expscale;
|
||||||
@ -272,7 +277,6 @@ GtkWidget *texturemenu_menu;
|
|||||||
GtkWidget *typemenu;
|
GtkWidget *typemenu;
|
||||||
GtkWidget *texturemenu;
|
GtkWidget *texturemenu;
|
||||||
|
|
||||||
|
|
||||||
#define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2])
|
#define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2])
|
||||||
|
|
||||||
#define B 256
|
#define B 256
|
||||||
@ -1029,6 +1033,7 @@ void objcolor(vector *col, vector *p, common *obj)
|
|||||||
case TRANSPARENT:
|
case TRANSPARENT:
|
||||||
case SMOKE:
|
case SMOKE:
|
||||||
/* Silently ignore non-color textures */
|
/* Silently ignore non-color textures */
|
||||||
|
continue;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Warning: unknown texture %d\n", t->type);
|
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 == PHONG) continue;
|
||||||
if(obj->texture[j].type == REFLECTION) continue;
|
if(obj->texture[j].type == REFLECTION) continue;
|
||||||
if(obj->texture[j].type == REFRACTION) continue;
|
if(obj->texture[j].type == REFRACTION) continue;
|
||||||
if(obj->texture[i].type == TRANSPARENT) continue;
|
if(obj->texture[j].type == TRANSPARENT) continue;
|
||||||
if(obj->texture[i].type == SMOKE) continue;
|
if(obj->texture[j].type == SMOKE) continue;
|
||||||
vcopy(&lcol, &pcol);
|
vcopy(&lcol, &pcol);
|
||||||
vvmul(&lcol, &world.light[i].color);
|
vvmul(&lcol, &world.light[i].color);
|
||||||
vvmul(&lcol, &obj->texture[j].diffuse);
|
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))) {
|
if((world.quality >= 4) && ((bobj->texture[i].type == REFLECTION) || (bobj->texture[i].type == PHONG))) {
|
||||||
|
|
||||||
vector refcol, norm;
|
vector refcol, norm, ocol;
|
||||||
ray ref;
|
ray ref;
|
||||||
|
|
||||||
|
objcolor(&ocol, &p, bobj);
|
||||||
|
|
||||||
vcopy(&ref.v1, &p);
|
vcopy(&ref.v1, &p);
|
||||||
vcopy(&ref.v2, &r->v1);
|
vcopy(&ref.v2, &r->v1);
|
||||||
ref.inside = r->inside;
|
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)) {
|
if((world.quality >= 5) && (bobj->texture[i].type == REFLECTION)) {
|
||||||
traceray(&ref, &refcol, level - 1, imp * vmax(&bobj->texture[i].reflection));
|
traceray(&ref, &refcol, level - 1, imp * vmax(&bobj->texture[i].reflection));
|
||||||
vvmul(&refcol, &bobj->texture[i].reflection);
|
vvmul(&refcol, &bobj->texture[i].reflection);
|
||||||
|
refcol.w = ocol.w;
|
||||||
vadd(col, &refcol);
|
vadd(col, &refcol);
|
||||||
}
|
}
|
||||||
if(bobj->texture[i].type == PHONG) {
|
if(bobj->texture[i].type == PHONG) {
|
||||||
vcset(&refcol,0,0,0,0);
|
vcset(&refcol,0,0,0,0);
|
||||||
calcphong(bobj, &ref, &refcol);
|
calcphong(bobj, &ref, &refcol);
|
||||||
|
refcol.w = ocol.w;
|
||||||
vadd(col, &refcol);
|
vadd(col, &refcol);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1543,6 +1553,7 @@ void setdefaults(texture *t)
|
|||||||
vset(&t->scale,1,1,1);
|
vset(&t->scale,1,1,1);
|
||||||
vset(&t->rotate,0,0,0);
|
vset(&t->rotate,0,0,0);
|
||||||
vset(&t->translate,0,0,0);
|
vset(&t->translate,0,0,0);
|
||||||
|
t->oscale = 1.0;
|
||||||
t->amount = 1.0;
|
t->amount = 1.0;
|
||||||
t->exp = 1.0;
|
t->exp = 1.0;
|
||||||
}
|
}
|
||||||
@ -1609,6 +1620,8 @@ void setvals(texture *t)
|
|||||||
noupdate = 1;
|
noupdate = 1;
|
||||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(amountscale), t->amount);
|
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(scalexscale), t->scale.x);
|
||||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(scaleyscale), t->scale.y);
|
gtk_adjustment_set_value(GTK_ADJUSTMENT(scaleyscale), t->scale.y);
|
||||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalezscale), t->scale.z);
|
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->majtype == 0) { /* Normal texture */
|
||||||
if(t->type == PHONG) {
|
if(t->type == PHONG) {
|
||||||
memcpy(&t->phongcolor, &t->color1, sizeof(t->color1));
|
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));
|
memcpy(&d->texture[d->numtexture],t,sizeof(texture));
|
||||||
|
vmul(&d->texture[d->numtexture].scale, d->texture[d->numtexture].oscale);
|
||||||
d->numtexture++;
|
d->numtexture++;
|
||||||
} else if(t->majtype == 1) { /* Bumpmap */
|
} else if(t->majtype == 1) { /* Bumpmap */
|
||||||
memcpy(&d->normal[d->numnormal],t,sizeof(texture));
|
memcpy(&d->normal[d->numnormal],t,sizeof(texture));
|
||||||
|
vmul(&d->normal[d->numnormal].scale, d->texture[d->numnormal].oscale);
|
||||||
d->numnormal++;
|
d->numnormal++;
|
||||||
} else if(t->majtype == 2) { /* Lightsource */
|
} else if(t->majtype == 2) { /* Lightsource */
|
||||||
light l;
|
light l;
|
||||||
vcopy(&l.a, &t->translate);
|
vcopy(&l.a, &t->translate);
|
||||||
vcopy(&l.color, &t->color1);
|
vcopy(&l.color, &t->color1);
|
||||||
|
vmul(&l.color, t->amount);
|
||||||
memcpy(&world.light[world.numlight], &l, sizeof(l));
|
memcpy(&world.light[world.numlight], &l, sizeof(l));
|
||||||
world.numlight++;
|
world.numlight++;
|
||||||
}
|
}
|
||||||
@ -1858,6 +1874,7 @@ void getscales(GtkWidget *wg, gpointer data)
|
|||||||
f = GTK_ADJUSTMENT(turbulencescale)->value;
|
f = GTK_ADJUSTMENT(turbulencescale)->value;
|
||||||
vset(&t->turbulence, f,f,f);
|
vset(&t->turbulence, f,f,f);
|
||||||
|
|
||||||
|
t->oscale = GTK_ADJUSTMENT(scalescale)->value;
|
||||||
t->scale.x = GTK_ADJUSTMENT(scalexscale)->value;
|
t->scale.x = GTK_ADJUSTMENT(scalexscale)->value;
|
||||||
t->scale.y = GTK_ADJUSTMENT(scaleyscale)->value;
|
t->scale.y = GTK_ADJUSTMENT(scaleyscale)->value;
|
||||||
t->scale.z = GTK_ADJUSTMENT(scalezscale)->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)
|
void sphere_cancel(GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
gtk_widget_destroy (GTK_WIDGET (data));
|
gtk_widget_hide (GTK_WIDGET (data));
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2099,7 +2116,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_object_set_data (GTK_OBJECT (window), "window", window);
|
gtk_object_set_data (GTK_OBJECT (window), "window", window);
|
||||||
gtk_container_border_width (GTK_CONTAINER (window), 5);
|
gtk_container_border_width (GTK_CONTAINER (window), 5);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "SphereDesigner");
|
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);
|
table1 = gtk_table_new (3, 3, FALSE);
|
||||||
gtk_object_set_data (GTK_OBJECT (window), "table1", table1);
|
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_connect (GTK_OBJECT (resetbutton), "clicked",
|
||||||
GTK_SIGNAL_FUNC (sphere_reset), window);
|
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_object_set_data (GTK_OBJECT (window), "frame4", frame4);
|
||||||
gtk_widget_show (frame4);
|
gtk_widget_show (frame4);
|
||||||
gtk_table_attach (GTK_TABLE (table1), frame4, 2, 3, 0, 1,
|
gtk_table_attach (GTK_TABLE (table1), frame4, 2, 3, 0, 1,
|
||||||
@ -2258,6 +2275,23 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_widget_show(tmpw);
|
gtk_widget_show(tmpw);
|
||||||
drawcolor2(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:");
|
label5 = gtk_label_new ("Turbulence:");
|
||||||
gtk_object_set_data (GTK_OBJECT (window), "label5", label5);
|
gtk_object_set_data (GTK_OBJECT (window), "label5", label5);
|
||||||
gtk_widget_show (label5);
|
gtk_widget_show (label5);
|
||||||
@ -2266,6 +2300,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_turbulencescale", _turbulencescale);
|
||||||
gtk_widget_show (_turbulencescale);
|
gtk_widget_show (_turbulencescale);
|
||||||
gtk_table_attach (GTK_TABLE (table2), _turbulencescale, 1, 2, 4, 5,
|
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",
|
gtk_signal_connect(GTK_OBJECT(turbulencescale), "value_changed",
|
||||||
(GtkSignalFunc)getscales, NULL);
|
(GtkSignalFunc)getscales, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
label6 = gtk_label_new ("Scale X:");
|
label6 = gtk_label_new ("Scale X:");
|
||||||
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
|
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
|
||||||
gtk_widget_show (label6);
|
gtk_widget_show (label6);
|
||||||
@ -2286,6 +2317,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||||
gtk_widget_show (_scalescale);
|
gtk_widget_show (_scalescale);
|
||||||
@ -2302,6 +2334,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||||
gtk_widget_show (_scalescale);
|
gtk_widget_show (_scalescale);
|
||||||
@ -2318,6 +2351,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||||
gtk_widget_show (_scalescale);
|
gtk_widget_show (_scalescale);
|
||||||
@ -2336,6 +2370,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
||||||
gtk_widget_show (_rotscale);
|
gtk_widget_show (_rotscale);
|
||||||
@ -2352,6 +2387,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
||||||
gtk_widget_show (_rotscale);
|
gtk_widget_show (_rotscale);
|
||||||
@ -2368,6 +2404,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
||||||
gtk_widget_show (_rotscale);
|
gtk_widget_show (_rotscale);
|
||||||
@ -2376,8 +2413,6 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_signal_connect(GTK_OBJECT(rotzscale), "value_changed",
|
gtk_signal_connect(GTK_OBJECT(rotzscale), "value_changed",
|
||||||
(GtkSignalFunc)getscales, NULL);
|
(GtkSignalFunc)getscales, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
label6 = gtk_label_new ("Pos X:");
|
label6 = gtk_label_new ("Pos X:");
|
||||||
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
|
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
|
||||||
gtk_widget_show (label6);
|
gtk_widget_show (label6);
|
||||||
@ -2386,6 +2421,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||||
gtk_widget_show (_scalescale);
|
gtk_widget_show (_scalescale);
|
||||||
@ -2402,6 +2438,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||||
gtk_widget_show (_scalescale);
|
gtk_widget_show (_scalescale);
|
||||||
@ -2418,6 +2455,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||||
gtk_widget_show (_scalescale);
|
gtk_widget_show (_scalescale);
|
||||||
@ -2426,11 +2464,6 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_signal_connect(GTK_OBJECT(poszscale), "value_changed",
|
gtk_signal_connect(GTK_OBJECT(poszscale), "value_changed",
|
||||||
(GtkSignalFunc)getscales, NULL);
|
(GtkSignalFunc)getscales, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typemenu = gtk_option_menu_new ();
|
typemenu = gtk_option_menu_new ();
|
||||||
gtk_object_set_data (GTK_OBJECT (window), "typemenu", typemenu);
|
gtk_object_set_data (GTK_OBJECT (window), "typemenu", typemenu);
|
||||||
gtk_widget_show (typemenu);
|
gtk_widget_show (typemenu);
|
||||||
@ -2476,6 +2509,7 @@ GtkWidget* makewindow (void)
|
|||||||
gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_amountscale", _amountscale);
|
||||||
gtk_widget_show (_amountscale);
|
gtk_widget_show (_amountscale);
|
||||||
gtk_table_attach (GTK_TABLE (table2), _amountscale, 1, 2, 5, 6,
|
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);
|
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)));
|
_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_object_set_data (GTK_OBJECT (window), "_expscale", _expscale);
|
||||||
gtk_widget_show (_expscale);
|
gtk_widget_show (_expscale);
|
||||||
gtk_table_attach (GTK_TABLE (table2), _expscale, 1, 2, 6, 7,
|
gtk_table_attach (GTK_TABLE (table2), _expscale, 1, 2, 6, 7,
|
||||||
|
@ -1,6 +1,20 @@
|
|||||||
(The events are in chronological order, latest first)
|
(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:
|
August 23 1999:
|
||||||
|
- Released 0.99.5
|
||||||
- Added the missing Shadow controls
|
- Added the missing Shadow controls
|
||||||
- Fixed the applybrush() function. (It was foobar with regards to
|
- Fixed the applybrush() function. (It was foobar with regards to
|
||||||
shadow handling.) It's still shaky when using Tilable, though...
|
shadow handling.) It's still shaky when using Tilable, though...
|
||||||
|
@ -26,7 +26,8 @@ gimpressionist_SOURCES = \
|
|||||||
preview.c \
|
preview.c \
|
||||||
repaint.c \
|
repaint.c \
|
||||||
size.c \
|
size.c \
|
||||||
sizemap.c
|
sizemap.c \
|
||||||
|
color.c
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
AM_CPPFLAGS = \
|
||||||
-DDEFAULTPATH=\""~/$(gimpdir)/gimpressionist:$(gimpdatadir)/gimpressionist"\"
|
-DDEFAULTPATH=\""~/$(gimpdir)/gimpressionist:$(gimpdatadir)/gimpressionist"\"
|
||||||
|
127
plug-ins/gimpressionist/color.c
Normal file
127
plug-ins/gimpressionist/color.c
Normal 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);
|
||||||
|
}
|
@ -72,7 +72,9 @@ gimpressionist_vals_t defaultpcvals = {
|
|||||||
0,
|
0,
|
||||||
|
|
||||||
10,
|
10,
|
||||||
4
|
4,
|
||||||
|
|
||||||
|
0, 0.0
|
||||||
};
|
};
|
||||||
|
|
||||||
static GDrawable *drawable;
|
static GDrawable *drawable;
|
||||||
|
@ -154,6 +154,7 @@ void storevals(void)
|
|||||||
pcvals.devthresh = GTK_ADJUSTMENT(devthreshadjust)->value;
|
pcvals.devthresh = GTK_ADJUSTMENT(devthreshadjust)->value;
|
||||||
pcvals.placecenter = GTK_TOGGLE_BUTTON(placecenter)->active;
|
pcvals.placecenter = GTK_TOGGLE_BUTTON(placecenter)->active;
|
||||||
pcvals.paperoverlay = GTK_TOGGLE_BUTTON(paperoverlay)->active;
|
pcvals.paperoverlay = GTK_TOGGLE_BUTTON(paperoverlay)->active;
|
||||||
|
pcvals.colornoise = GTK_ADJUSTMENT(colornoiseadjust)->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void restorevals(void)
|
void restorevals(void)
|
||||||
@ -197,6 +198,9 @@ void restorevals(void)
|
|||||||
|
|
||||||
drawcolor(NULL);
|
drawcolor(NULL);
|
||||||
|
|
||||||
|
gtk_adjustment_set_value(GTK_ADJUSTMENT(colornoiseadjust), pcvals.colornoise);
|
||||||
|
colorchange(NULL, NULL, pcvals.colortype);
|
||||||
|
|
||||||
update_orientmap_dialog();
|
update_orientmap_dialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -463,6 +467,7 @@ int create_dialog(void)
|
|||||||
create_orientationpage(GTK_NOTEBOOK (notebook));
|
create_orientationpage(GTK_NOTEBOOK (notebook));
|
||||||
create_sizepage(GTK_NOTEBOOK (notebook));
|
create_sizepage(GTK_NOTEBOOK (notebook));
|
||||||
create_placementpage(GTK_NOTEBOOK (notebook));
|
create_placementpage(GTK_NOTEBOOK (notebook));
|
||||||
|
create_colorpage(GTK_NOTEBOOK (notebook));
|
||||||
create_generalpage(GTK_NOTEBOOK (notebook));
|
create_generalpage(GTK_NOTEBOOK (notebook));
|
||||||
create_presetpage(GTK_NOTEBOOK (notebook));
|
create_presetpage(GTK_NOTEBOOK (notebook));
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include "libgimp/gimpmath.h"
|
|
||||||
|
|
||||||
#define PLUG_IN_NAME "plug_in_gimpressionist"
|
#define PLUG_IN_NAME "plug_in_gimpressionist"
|
||||||
#define PLUG_IN_VERSION "v0.99.6, August 1999"
|
#define PLUG_IN_VERSION "v0.99.6, August 1999"
|
||||||
|
|
||||||
@ -13,6 +11,14 @@
|
|||||||
#define MAXORIENTVECT 50
|
#define MAXORIENTVECT 50
|
||||||
#define MAXSIZEVECT 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 */
|
/* Type declaration and definitions */
|
||||||
|
|
||||||
struct vector_t {
|
struct vector_t {
|
||||||
@ -75,7 +81,8 @@ typedef struct {
|
|||||||
int generalshadowdepth;
|
int generalshadowdepth;
|
||||||
int generalshadowblur;
|
int generalshadowblur;
|
||||||
|
|
||||||
int coloracc;
|
int colortype;
|
||||||
|
double colornoise;
|
||||||
} gimpressionist_vals_t;
|
} gimpressionist_vals_t;
|
||||||
|
|
||||||
/* Globals */
|
/* Globals */
|
||||||
@ -131,7 +138,9 @@ extern GtkObject *generalshadowadjust;
|
|||||||
extern GtkObject *generalshadowdepth;
|
extern GtkObject *generalshadowdepth;
|
||||||
extern GtkObject *generalshadowblur;
|
extern GtkObject *generalshadowblur;
|
||||||
extern GtkObject *devthreshadjust;
|
extern GtkObject *devthreshadjust;
|
||||||
extern GtkObject *coloraccadjust;
|
|
||||||
|
extern GtkWidget *colortype;
|
||||||
|
extern GtkObject *colornoiseadjust;
|
||||||
|
|
||||||
extern GtkWidget *placecenter;
|
extern GtkWidget *placecenter;
|
||||||
|
|
||||||
@ -154,6 +163,7 @@ void create_sizepage(GtkNotebook *);
|
|||||||
void create_generalpage(GtkNotebook *);
|
void create_generalpage(GtkNotebook *);
|
||||||
void create_presetpage(GtkNotebook *);
|
void create_presetpage(GtkNotebook *);
|
||||||
void create_placementpage(GtkNotebook *);
|
void create_placementpage(GtkNotebook *);
|
||||||
|
void create_colorpage(GtkNotebook *);
|
||||||
|
|
||||||
GtkWidget* create_preview();
|
GtkWidget* create_preview();
|
||||||
void updatepreviewprev(GtkWidget *wg, void *d);
|
void updatepreviewprev(GtkWidget *wg, void *d);
|
||||||
@ -170,6 +180,7 @@ void drawcolor(GtkWidget *w);
|
|||||||
void orientchange(GtkWidget *wg, void *d, int num);
|
void orientchange(GtkWidget *wg, void *d, int num);
|
||||||
void sizechange(GtkWidget *wg, void *d, int num);
|
void sizechange(GtkWidget *wg, void *d, int num);
|
||||||
void placechange(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 generalbgchange(GtkWidget *wg, void *d, int num);
|
||||||
|
|
||||||
void reloadbrush(char *fn, struct ppm *p);
|
void reloadbrush(char *fn, struct ppm *p);
|
||||||
|
@ -34,12 +34,12 @@ int numvect = 0;
|
|||||||
|
|
||||||
double degtorad(double d)
|
double degtorad(double d)
|
||||||
{
|
{
|
||||||
return d/180.0*G_PI;
|
return d/180.0*M_PI;
|
||||||
}
|
}
|
||||||
|
|
||||||
double radtodeg(double d)
|
double radtodeg(double d)
|
||||||
{
|
{
|
||||||
double v = d/G_PI*180.0;
|
double v = d/M_PI*180.0;
|
||||||
if(v < 0.0) v += 360;
|
if(v < 0.0) v += 360;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -117,18 +117,18 @@ double getdir(double x, double y, int from)
|
|||||||
} else if(vec[i].type == 1) {
|
} else if(vec[i].type == 1) {
|
||||||
double a = atan2(vec[i].dy, vec[i].dx);
|
double a = atan2(vec[i].dy, vec[i].dx);
|
||||||
a -= atan2(y-vec[i].y, x-vec[i].x);
|
a -= atan2(y-vec[i].y, x-vec[i].x);
|
||||||
tx = sin(a+G_PI_2);
|
tx = sin(a+M_PI_2);
|
||||||
ty = cos(a+G_PI_2);
|
ty = cos(a+M_PI_2);
|
||||||
} else if(vec[i].type == 2) {
|
} else if(vec[i].type == 2) {
|
||||||
double a = atan2(vec[i].dy, vec[i].dx);
|
double a = atan2(vec[i].dy, vec[i].dx);
|
||||||
a += atan2(y-vec[i].y, x-vec[i].x);
|
a += atan2(y-vec[i].y, x-vec[i].x);
|
||||||
tx = sin(a+G_PI_2);
|
tx = sin(a+M_PI_2);
|
||||||
ty = cos(a+G_PI_2);
|
ty = cos(a+M_PI_2);
|
||||||
} else if(vec[i].type == 3) {
|
} else if(vec[i].type == 3) {
|
||||||
double a = atan2(vec[i].dy, vec[i].dx);
|
double a = atan2(vec[i].dy, vec[i].dx);
|
||||||
a -= atan2(y-vec[i].y, x-vec[i].x)*2;
|
a -= atan2(y-vec[i].y, x-vec[i].x)*2;
|
||||||
tx = sin(a+G_PI_2);
|
tx = sin(a+M_PI_2);
|
||||||
ty = cos(a+G_PI_2);
|
ty = cos(a+M_PI_2);
|
||||||
}
|
}
|
||||||
|
|
||||||
dst = dist(x,y,vec[i].x,vec[i].y);
|
dst = dist(x,y,vec[i].x,vec[i].y);
|
||||||
|
@ -332,7 +332,7 @@ void freerotate(struct ppm *p, double amount)
|
|||||||
double nx, ny;
|
double nx, ny;
|
||||||
double R, a;
|
double R, a;
|
||||||
struct ppm tmp = {0,0,NULL};
|
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;
|
int rowstride = p->width * 3;
|
||||||
|
|
||||||
a = p->width/(float)p->height;
|
a = p->width/(float)p->height;
|
||||||
|
@ -245,6 +245,11 @@ void setval(char *key, char *val)
|
|||||||
pcvals.sizestrexp = atof(val);
|
pcvals.sizestrexp = atof(val);
|
||||||
else if(!strcmp(key, "sizevoronoi"))
|
else if(!strcmp(key, "sizevoronoi"))
|
||||||
pcvals.sizevoronoi = atoi(val);
|
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)
|
int loadpreset(char *fn)
|
||||||
@ -497,6 +502,9 @@ void savepreset(GtkWidget *wg, GtkWidget *p)
|
|||||||
fprintf(f, "sizestrexp=%f\n", pcvals.sizestrexp);
|
fprintf(f, "sizestrexp=%f\n", pcvals.sizestrexp);
|
||||||
fprintf(f, "sizevoronoi=%d\n", pcvals.sizevoronoi);
|
fprintf(f, "sizevoronoi=%d\n", pcvals.sizevoronoi);
|
||||||
|
|
||||||
|
fprintf(f, "colortype=%d\n", pcvals.colortype);
|
||||||
|
fprintf(f, "colornoise=%f\n", pcvals.colornoise);
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
presetsrefresh();
|
presetsrefresh();
|
||||||
reselect(presetlist, fname);
|
reselect(presetlist, fname);
|
||||||
|
@ -85,7 +85,7 @@ void updatepreviewprev(GtkWidget *wg, void *d)
|
|||||||
|
|
||||||
for(i = 0; i < PREVIEWSIZE; i++) {
|
for(i = 0; i < PREVIEWSIZE; i++) {
|
||||||
memset(buf,0,PREVIEWSIZE*3);
|
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);
|
gtk_preview_draw_row(GTK_PREVIEW(previewprev), (guchar *)&p.col[i*PREVIEWSIZE*3], 0, i, PREVIEWSIZE);
|
||||||
}
|
}
|
||||||
killppm(&p);
|
killppm(&p);
|
||||||
|
@ -717,30 +717,42 @@ void repaint(struct ppm *p, struct ppm *a)
|
|||||||
thissum = brushsum[n];
|
thissum = brushsum[n];
|
||||||
|
|
||||||
/* Calculate color - avg. of in-brush pixels */
|
/* Calculate color - avg. of in-brush pixels */
|
||||||
r = g = b = 0;
|
if(runningvals.colortype == 0) {
|
||||||
for(y = 0; y < brush->height; y++) {
|
r = g = b = 0;
|
||||||
guchar *row = &p->col[(ty+y)*p->width*3];
|
for(y = 0; y < brush->height; y++) {
|
||||||
for(x = 0; x < brush->width; x++) {
|
guchar *row = &p->col[(ty+y)*p->width*3];
|
||||||
int k = (tx+x) * 3;
|
for(x = 0; x < brush->width; x++) {
|
||||||
double v;
|
int k = (tx+x) * 3;
|
||||||
if((h = brush->col[y*brush->width*3+x*3])) {
|
double v;
|
||||||
v = h / 255.0;
|
if((h = brush->col[y*brush->width*3+x*3])) {
|
||||||
r += row[k+0] * v;
|
v = h / 255.0;
|
||||||
g += row[k+1] * v;
|
r += row[k+0] * v;
|
||||||
b += row[k+2] * v;
|
g += row[k+1] * v;
|
||||||
|
b += row[k+2] * v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
r = r * 255.0 / thissum;
|
||||||
|
g = g * 255.0 / thissum;
|
||||||
|
b = b * 255.0 / thissum;
|
||||||
|
} 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;
|
||||||
}
|
}
|
||||||
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;
|
|
||||||
*/
|
|
||||||
|
|
||||||
applybrush(brush, shadow, &tmp, &atmp, tx,ty, r,g,b);
|
applybrush(brush, shadow, &tmp, &atmp, tx,ty, r,g,b);
|
||||||
if(runningvals.generaltileable && runningvals.generalpaintedges) {
|
if(runningvals.generaltileable && runningvals.generalpaintedges) {
|
||||||
|
Reference in New Issue
Block a user